Improve cleaning of the model (bug 23)
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 8 Mar 2012 14:31:00 +0000 (14:31 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 8 Mar 2012 14:31:00 +0000 (14:31 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@5162 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

server/plugins/org.argeo.jcr.ui.explorer/build.properties
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/HomeContentProvider.java [deleted file]
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/NodeContentProvider.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/editors/GenericNodeEditor.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/editors/GenericPropertyPage.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/model/WorkspaceNode.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/views/GenericJcrBrowser.java
server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/wizards/ImportFileSystemWizard.java

index 1f316c6fa1769e68276d245bdf9d93be02bd54da..9b0c715ca5a3bf2ece7a2d0b5a0db483a2433f5b 100644 (file)
@@ -3,4 +3,5 @@ source.. =      src/main/java/,\
 output.. = target/classes/
 bin.includes = META-INF/,\
                .,\
-               plugin.xml
+               plugin.xml,\
+               plugin.properties
diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/HomeContentProvider.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/HomeContentProvider.java
deleted file mode 100644 (file)
index 123fdaa..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.argeo.jcr.ui.explorer.browser;
-
-import javax.jcr.Session;
-
-import org.argeo.eclipse.ui.jcr.SimpleNodeContentProvider;
-import org.argeo.jcr.JcrUtils;
-
-public class HomeContentProvider extends SimpleNodeContentProvider {
-
-       public HomeContentProvider(Session session) {
-               super(session, new String[] { JcrUtils.getUserHomePath(session) });
-       }
-
-}
index 205874285aa196eaaf1138148a150e8fb07db713..085087201e5d8921e3c01df10203446cf17b27c6 100644 (file)
@@ -7,8 +7,6 @@ import java.util.List;
 import javax.jcr.Node;
 import javax.jcr.Session;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.argeo.eclipse.ui.TreeParent;
 import org.argeo.jcr.ArgeoJcrConstants;
 import org.argeo.jcr.JcrUtils;
@@ -26,7 +24,8 @@ import org.eclipse.jface.viewers.Viewer;
  * 
  */
 public class NodeContentProvider implements ITreeContentProvider {
-       private final static Log log = LogFactory.getLog(NodeContentProvider.class);
+       // private final static Log log =
+       // LogFactory.getLog(NodeContentProvider.class);
 
        // Business Objects
        final private RepositoryRegister repositoryRegister;
@@ -34,6 +33,10 @@ public class NodeContentProvider implements ITreeContentProvider {
        final private JcrKeyring jcrKeyring;
        final private boolean sortChildren;
 
+       // reference for cleaning
+       private SingleJcrNode homeNode = null;
+       private RepositoriesNode repositoriesNode = null;
+
        // Utils
        private TreeObjectsComparator itemComparator = new TreeObjectsComparator();
 
@@ -45,22 +48,35 @@ public class NodeContentProvider implements ITreeContentProvider {
                this.sortChildren = sortChildren;
        }
 
+       public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+               if (userSession != null) {
+                       Node userHome = JcrUtils.getUserHome(userSession);
+                       if (userHome != null) {
+                               // TODO : find a way to dynamically get alias for the node
+                               if (homeNode != null)
+                                       homeNode.dispose();
+                               homeNode = new SingleJcrNode(null, userHome,
+                                               userSession.getUserID(), ArgeoJcrConstants.ALIAS_NODE);
+                       }
+               }
+               if (repositoryRegister != null) {
+                       if (repositoriesNode != null)
+                               repositoriesNode.dispose();
+                       repositoriesNode = new RepositoriesNode("Repositories",
+                                       repositoryRegister, null, jcrKeyring);
+               }
+       }
+
        /**
         * Sends back the first level of the Tree. Independent from inputElement
         * that can be null
         */
        public Object[] getElements(Object inputElement) {
                List<Object> objs = new ArrayList<Object>();
-               if (userSession != null) {
-                       Node userHome = JcrUtils.getUserHome(userSession);
-                       if (userHome != null)
-                               // TODO : find a way to dynamically get alias for the node
-                               objs.add(new SingleJcrNode(null, userHome, userSession
-                                               .getUserID(), ArgeoJcrConstants.ALIAS_NODE));
-               }
-               if (repositoryRegister != null)
-                       objs.add(new RepositoriesNode("Repositories", repositoryRegister,
-                                       null, jcrKeyring));
+               if (homeNode != null)
+                       objs.add(homeNode);
+               if (repositoriesNode != null)
+                       objs.add(repositoriesNode);
                return objs.toArray();
        }
 
@@ -105,8 +121,13 @@ public class NodeContentProvider implements ITreeContentProvider {
        }
 
        public void dispose() {
+               if (homeNode != null)
+                       homeNode.dispose();
+               if (repositoriesNode != null) {
+                       // logs out open sessions
+                       // see https://bugzilla.argeo.org/show_bug.cgi?id=23
+                       repositoriesNode.dispose();
+               }
        }
 
-       public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-       }
 }
index fe13a8091ea1ee3789a5d49a0f9919ab52e20840..812dfef490a0f4705c11c240706e9961a0d6bbaa 100644 (file)
@@ -12,10 +12,8 @@ import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.forms.editor.FormEditor;
 
 /**
- * 
  * Container for the node editor page. At creation time, it takes a JCR Node
  * that cannot be changed afterwards.
- * 
  */
 public class GenericNodeEditor extends FormEditor {
 
@@ -25,7 +23,6 @@ public class GenericNodeEditor extends FormEditor {
 
        private Node currentNode;
 
-       private GenericNodePage genericNodePage;
        private GenericPropertyPage genericPropertyPage;
        private ChildNodesPage childNodesPage;
        private NodeRightsManagementPage nodeRightsManagementPage;
index 176d7f6597eb02e5938c57c9e3638ffcd6b507f3..2adcb92e33514822cae3999d0815fb960069cdee 100644 (file)
@@ -9,8 +9,6 @@ import javax.jcr.PropertyIterator;
 import javax.jcr.RepositoryException;
 import javax.jcr.Value;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.argeo.ArgeoException;
 import org.argeo.jcr.ui.explorer.JcrExplorerConstants;
 import org.argeo.jcr.ui.explorer.JcrExplorerPlugin;
@@ -26,7 +24,6 @@ import org.eclipse.swt.widgets.TreeColumn;
 import org.eclipse.ui.forms.IManagedForm;
 import org.eclipse.ui.forms.editor.FormEditor;
 import org.eclipse.ui.forms.editor.FormPage;
-import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.ScrolledForm;
 
 /**
@@ -36,34 +33,26 @@ import org.eclipse.ui.forms.widgets.ScrolledForm;
 
 public class GenericPropertyPage extends FormPage implements
                JcrExplorerConstants {
-       private final static Log log = LogFactory.getLog(GenericPropertyPage.class);
-
-       // local constants
-       private final static String JCR_PROPERTY_NAME = "jcr:name";
+       // private final static Log log =
+       // LogFactory.getLog(GenericPropertyPage.class);
 
        // Main business Objects
        private Node currentNode;
 
-       // This page widgets
-       private FormToolkit tk;
-       private TreeViewer complexTree;
-
        public GenericPropertyPage(FormEditor editor, String title, Node currentNode) {
                super(editor, "id", title);
                this.currentNode = currentNode;
        }
 
        protected void createFormContent(IManagedForm managedForm) {
-               tk = managedForm.getToolkit();
                ScrolledForm form = managedForm.getForm();
-               form.setText(JcrExplorerPlugin
-                               .getMessage("genericNodePageTitle"));
+               form.setText(JcrExplorerPlugin.getMessage("genericNodePageTitle"));
                FillLayout layout = new FillLayout();
                layout.marginHeight = 5;
                layout.marginWidth = 5;
                form.getBody().setLayout(layout);
 
-               complexTree = createComplexTree(form.getBody());
+               createComplexTree(form.getBody());
 
                // TODO remove following
                // createPropertiesPart(form.getBody());
index 63c56349ae8d7e2badcbe873e357e33d92f4c0d6..ba118e14e8f02a3e1b46507d4bc3d716df26669c 100644 (file)
@@ -16,7 +16,6 @@ import org.argeo.eclipse.ui.TreeParent;
  * keeps a reference to its parent {@link RepositoryNode}, to be able to
  * retrieve alias of the current used repository
  */
-
 public class WorkspaceNode extends TreeParent implements EventListener, UiNode {
        private Session session = null;
 
@@ -60,6 +59,13 @@ public class WorkspaceNode extends TreeParent implements EventListener, UiNode {
                }
        }
 
+       @Override
+       public synchronized void dispose() {
+               logout();
+               super.dispose();
+       }
+
+       /** Logouts the session, does not nothing if there is no live session. */
        public void logout() {
                try {
                        if (session != null && session.isLive()) {
index b84214c741fdd81b826fba8b1f1bfeffe07e5bfd..ae07a5b5eceda112e6f9072ead37ce380cbaabe7 100644 (file)
@@ -5,7 +5,6 @@ import java.util.List;
 import javax.jcr.Property;
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
-import javax.jcr.Session;
 import javax.jcr.Value;
 import javax.jcr.observation.Event;
 import javax.jcr.observation.EventListener;
@@ -73,8 +72,8 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
        public void createPartControl(Composite parent) {
 
                // look for session
-               Session nodeSession = jcrKeyring != null ? jcrKeyring.getSession()
-                               : null;
+               // Session nodeSession = jcrKeyring != null ? jcrKeyring.getSession()
+               // : null;
                // if (nodeSession == null) {
                // Repository nodeRepository = JcrUtils.getRepositoryByAlias(
                // repositoryRegister, ArgeoJcrConstants.ALIAS_NODE);
@@ -82,7 +81,6 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
                // try {
                // nodeSession = nodeRepository.login();
                // // TODO : enhance that to enable multirepository listener.
-               // session = nodeSession;
                // } catch (RepositoryException e1) {
                // throw new ArgeoException("Cannot login to node repository");
                // }
@@ -247,6 +245,11 @@ public class GenericJcrBrowser extends AbstractJcrBrowser {
                return propertiesViewer;
        }
 
+       @Override
+       public void dispose() {
+               super.dispose();
+       }
+
        @Override
        protected TreeViewer getNodeViewer() {
                return nodesViewer;
index 9e9168e4faa3be48cabcbc633a3bd0e67c73e097..34ce3325a523f474cd5276bc9f29a390c77d82a9 100644 (file)
@@ -13,7 +13,7 @@ import org.apache.commons.io.IOUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.argeo.ArgeoException;
-import org.argeo.eclipse.ui.dialogs.Error;
+import org.argeo.eclipse.ui.ErrorFeedback;
 import org.argeo.eclipse.ui.specific.ImportToServerWizardPage;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -51,7 +51,7 @@ public class ImportFileSystemWizard extends Wizard {
                final String objectPath = importPage.getObjectPath();
 
                // We do not display a progress bar for one file only
-               if (importPage.FILE_ITEM_TYPE.equals(objectType)) {
+               if (ImportToServerWizardPage.FILE_ITEM_TYPE.equals(objectType)) {
                        // In Rap we must force the "real" upload of the file
                        importPage.performFinish();
                        try {
@@ -75,9 +75,9 @@ public class ImportFileSystemWizard extends Wizard {
                                return false;
                        }
                        return true;
-               } else if (importPage.FOLDER_ITEM_TYPE.equals(objectType)) {
+               } else if (ImportToServerWizardPage.FOLDER_ITEM_TYPE.equals(objectType)) {
                        if (objectPath == null || !new File(objectPath).exists()) {
-                               Error.show("Directory " + objectPath + " does not exist");
+                               ErrorFeedback.show("Directory " + objectPath + " does not exist");
                                return false;
                        }
 
@@ -104,7 +104,7 @@ public class ImportFileSystemWizard extends Wizard {
                                        }
                                });
                        } catch (Exception e) {
-                               Error.show("Cannot import " + objectPath, e);
+                               ErrorFeedback.show("Cannot import " + objectPath, e);
                                failed = true;
                        }