From: Mathieu Baudier Date: Tue, 19 Mar 2013 13:16:36 +0000 (+0000) Subject: Merge Order of nodes in JCR data explorer X-Git-Tag: svn/tags/argeo-commons-1.2.1~15 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=f96a69b4dff6914b36c348e70b4d20dcaa8819a7;p=lgpl%2Fargeo-commons.git Merge Order of nodes in JCR data explorer https://www.argeo.org/bugzilla/show_bug.cgi?id=139 git-svn-id: https://svn.argeo.org/commons/branches/1.x@6166 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/server/plugins/org.argeo.jcr.ui.explorer/plugin.xml b/server/plugins/org.argeo.jcr.ui.explorer/plugin.xml index 1df9981dc..095aa01a8 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/plugin.xml +++ b/server/plugins/org.argeo.jcr.ui.explorer/plugin.xml @@ -114,13 +114,15 @@ defaultHandler="org.argeo.jcr.ui.explorer.commands.SortChildNodes" id="org.argeo.jcr.ui.explorer.sortChildNodes" name="Sort node tree"> + - + id="org.argeo.jcr.ui.explorer.sortChildNodes.toggleState" + class="org.eclipse.ui.handlers.RegistryToggleState:true" > + @@ -143,7 +145,7 @@ diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/NodeContentProvider.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/NodeContentProvider.java index c2de694dd..fb6bd1a15 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/NodeContentProvider.java +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/NodeContentProvider.java @@ -17,11 +17,14 @@ package org.argeo.jcr.ui.explorer.browser; import java.util.ArrayList; import java.util.Arrays; +import java.util.Comparator; import java.util.List; import javax.jcr.Node; +import javax.jcr.RepositoryException; import javax.jcr.RepositoryFactory; import javax.jcr.Session; +import javax.jcr.nodetype.NodeType; import org.argeo.eclipse.ui.TreeParent; import org.argeo.jcr.ArgeoJcrConstants; @@ -29,7 +32,6 @@ import org.argeo.jcr.RepositoryRegister; import org.argeo.jcr.UserJcrUtils; import org.argeo.jcr.ui.explorer.model.RepositoriesElem; import org.argeo.jcr.ui.explorer.model.SingleJcrNodeElem; -import org.argeo.jcr.ui.explorer.utils.TreeObjectsComparator; import org.argeo.util.security.Keyring; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; @@ -48,14 +50,14 @@ public class NodeContentProvider implements ITreeContentProvider { */ final private Session userSession; final private Keyring keyring; - final private boolean sortChildren; + private boolean sortChildren; // reference for cleaning private SingleJcrNodeElem homeNode = null; private RepositoriesElem repositoriesNode = null; // Utils - private TreeObjectsComparator itemComparator = new TreeObjectsComparator(); + private TreeBrowserComparator itemComparator = new TreeBrowserComparator(); public NodeContentProvider(Session userSession, Keyring keyring, RepositoryRegister repositoryRegister, @@ -124,6 +126,15 @@ public class NodeContentProvider implements ITreeContentProvider { } } + /** + * Sets whether the content provider should order the children nodes or not. + * It is user duty to call a full refresh of the tree after changing this + * parameter. + */ + public void setSortChildren(boolean sortChildren) { + this.sortChildren = sortChildren; + } + public Object getParent(Object element) { if (element instanceof TreeParent) { return ((TreeParent) element).getParent(); @@ -153,4 +164,34 @@ public class NodeContentProvider implements ITreeContentProvider { } } -} + /** + * Specific comparator for this view. See spec in BUG : + * https://www.argeo.org/bugzilla/show_bug.cgi?id=139 + */ + private class TreeBrowserComparator implements Comparator { + + public int category(TreeParent element) { + if (element instanceof SingleJcrNodeElem) { + Node node = ((SingleJcrNodeElem) element).getNode(); + try { + if (node.isNodeType(NodeType.NT_FOLDER)) + return 5; + } catch (RepositoryException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + return 10; + } + + public int compare(TreeParent o1, TreeParent o2) { + int cat1 = category(o1); + int cat2 = category(o2); + + if (cat1 != cat2) { + return cat1 - cat2; + } + return o1.getName().compareTo(o2.getName()); + } + } +} \ No newline at end of file diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/views/GenericJcrBrowser.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/views/GenericJcrBrowser.java index f000ba385..c36b965b9 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/views/GenericJcrBrowser.java +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/views/GenericJcrBrowser.java @@ -67,7 +67,7 @@ import org.eclipse.swt.widgets.Menu; */ public class GenericJcrBrowser extends AbstractJcrBrowser { public final static String ID = JcrExplorerPlugin.ID + ".browserView"; - private boolean sortChildNodes = false; + private boolean sortChildNodes = true; /* DEPENDENCY INJECTION */ private Keyring keyring; @@ -256,6 +256,20 @@ public class GenericJcrBrowser extends AbstractJcrBrowser { return nodesViewer; } + /** + * Resets the tree content provider + * + * @param sortChildNodes + * if true the content provider will use a comparer to sort nodes + * that might slow down the display + * */ + public void setSortChildNodes(boolean sortChildNodes) { + this.sortChildNodes = sortChildNodes; + ((NodeContentProvider) nodesViewer.getContentProvider()) + .setSortChildren(sortChildNodes); + nodesViewer.setInput(getViewSite()); + } + /** Notifies the current view that a node has been added */ public void nodeAdded(TreeParent parentNode) { // insure that Ui objects have been correctly created: @@ -264,7 +278,7 @@ public class GenericJcrBrowser extends AbstractJcrBrowser { getNodeViewer().expandToLevel(parentNode, 1); } - /** Notifies the current view that a node has been added */ + /** Notifies the current view that a node has been removed */ public void nodeRemoved(TreeParent parentNode) { IStructuredSelection newSel = new StructuredSelection(parentNode); getNodeViewer().setSelection(newSel, true); @@ -304,10 +318,6 @@ public class GenericJcrBrowser extends AbstractJcrBrowser { } - public void setSortChildNodes(boolean sortChildNodes) { - this.sortChildNodes = sortChildNodes; - } - public boolean getSortChildNodes() { return sortChildNodes; }