]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/users/UserViewerOld.java
Work on user management and generic forms in CMS - Work In Progress.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / users / UserViewerOld.java
diff --git a/org.argeo.cms/src/org/argeo/cms/users/UserViewerOld.java b/org.argeo.cms/src/org/argeo/cms/users/UserViewerOld.java
new file mode 100644 (file)
index 0000000..ad0b62f
--- /dev/null
@@ -0,0 +1,233 @@
+package org.argeo.cms.users;
+
+import java.util.Observable;
+import java.util.Observer;
+
+import javax.jcr.Node;
+import javax.jcr.RepositoryException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.ArgeoException;
+import org.argeo.cms.CmsEditable;
+import org.argeo.cms.CmsException;
+import org.argeo.cms.CmsUtils;
+import org.argeo.cms.viewers.EditablePart;
+import org.argeo.cms.viewers.JcrVersionCmsEditable;
+import org.eclipse.jface.viewers.ContentViewer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Widget;
+
+/** Manage edition of the users */
+public class UserViewerOld extends ContentViewer implements Observer {
+       private static final long serialVersionUID = -5055220955004863645L;
+
+       private final static Log log = LogFactory.getLog(UserViewerOld.class);
+
+       // private UserPart userPart = new UserPart();
+
+       private CmsEditable cmsEditable;
+       private Node currentDisplayed;
+
+       /** The basis for the layouts, typically the body of a ScrolledPage. */
+       private final Composite page;
+
+       private MouseListener mouseListener;
+
+       private EditablePart edited;
+       private ISelection selection = StructuredSelection.EMPTY;
+
+       protected UserViewerOld(Composite composite) {
+               page = composite;
+       }
+
+       void setDisplayedUser(Node node) {
+               try {
+
+                       if (!hasChanged(node))
+                               return;
+
+                       CmsUtils.clear(page);
+                       // userPart.createUi(page, node);
+                       
+                       page.layout();
+                       page.getParent().layout();
+
+                       // update
+                       cmsEditable = new JcrVersionCmsEditable(node);
+
+                       if (this.cmsEditable instanceof Observable)
+                               ((Observable) this.cmsEditable).addObserver(this);
+                       // // if (cmsEditable.canEdit()) {
+                       // // mouseListener = createMouseListener();
+                       // // refresh();
+                       // // }
+               } catch (RepositoryException re) {
+                       throw new ArgeoException("Unable to display " + node, re);
+               }
+       }
+
+       private boolean hasChanged(Node node) throws RepositoryException {
+               if (currentDisplayed == null && node == null)
+                       return false;
+               else if (currentDisplayed == null || node == null)
+                       return true;
+               else
+                       return node.getIdentifier()
+                                       .equals(currentDisplayed.getIdentifier());
+       }
+
+       /** Create (retrieve) the MouseListener to use. */
+       protected MouseListener createMouseListener() {
+               return new MouseAdapter() {
+                       private static final long serialVersionUID = 1L;
+               };
+       }
+
+       @Override
+       public void update(Observable o, Object arg) {
+               if (o == cmsEditable)
+                       editingStateChanged(cmsEditable);
+       }
+
+       /** To be overridden in order to provide the actual refresh */
+       protected void refresh(Control control) throws RepositoryException {
+       }
+
+       /** To be overridden.Save the edited part. */
+       protected void save(EditablePart part) throws RepositoryException {
+       }
+
+       /** Prepare the edited part */
+       protected void prepare(EditablePart part, Object caretPosition) {
+       }
+
+       /** Notified when the editing state changed. Does nothing, to be overridden */
+       protected void editingStateChanged(CmsEditable cmsEditable) {
+       }
+
+       @Override
+       public Control getControl() {
+               return null;
+       }
+
+       @Override
+       public void refresh() {
+               try {
+                       // if (cmsEditable.canEdit() && !readOnly)
+                       // mouseListener = createMouseListener();
+                       // else
+                       // mouseListener = null;
+                       refresh(getControl());
+                       layout(getControl());
+               } catch (RepositoryException e) {
+                       throw new CmsException("Cannot refresh", e);
+               }
+       }
+
+       @Override
+       public void setSelection(ISelection selection, boolean reveal) {
+               this.selection = selection;
+       }
+
+       protected void updateContent(EditablePart part) throws RepositoryException {
+       }
+
+       // LOW LEVEL EDITION
+       protected void edit(EditablePart part, Object caretPosition) {
+               try {
+                       if (edited == part)
+                               return;
+
+                       if (edited != null && edited != part)
+                               stopEditing(true);
+
+                       part.startEditing();
+                       updateContent(part);
+                       prepare(part, caretPosition);
+                       edited = part;
+                       layout(part.getControl());
+               } catch (RepositoryException e) {
+                       throw new CmsException("Cannot edit " + part, e);
+               }
+       }
+
+       private void stopEditing(Boolean save) throws RepositoryException {
+               if (edited instanceof Widget && ((Widget) edited).isDisposed()) {
+                       edited = null;
+                       return;
+               }
+
+               assert edited != null;
+               if (edited == null) {
+                       if (log.isTraceEnabled())
+                               log.warn("Told to stop editing while not editing anything");
+                       return;
+               }
+
+               if (save)
+                       save(edited);
+
+               edited.stopEditing();
+               updateContent(edited);
+               layout(((EditablePart) edited).getControl());
+               edited = null;
+       }
+
+       // METHODS AVAILABLE TO EXTENDING CLASSES
+       protected void saveEdit() {
+               try {
+                       if (edited != null)
+                               stopEditing(true);
+               } catch (RepositoryException e) {
+                       throw new CmsException("Cannot stop editing", e);
+               }
+       }
+
+       protected void cancelEdit() {
+               try {
+                       if (edited != null)
+                               stopEditing(false);
+               } catch (RepositoryException e) {
+
+                       throw new CmsException("Cannot cancel editing", e);
+               }
+       }
+
+       /** Layout this controls from the related base page. */
+       public void layout(Control... controls) {
+               page.layout(controls);
+       }
+
+       // UTILITIES
+       /** Check whether the edited part is in a proper state */
+       protected void checkEdited() {
+               if (edited == null || (edited instanceof Widget)
+                               && ((Widget) edited).isDisposed())
+                       throw new CmsException(
+                                       "Edited should not be null or disposed at this stage");
+       }
+
+       // GETTERS / SETTERS
+       protected EditablePart getEdited() {
+               return edited;
+       }
+
+       public MouseListener getMouseListener() {
+               return mouseListener;
+       }
+
+       public CmsEditable getCmsEditable() {
+               return cmsEditable;
+       }
+
+       @Override
+       public ISelection getSelection() {
+               return selection;
+       }
+}
\ No newline at end of file