From ae696952b94054d3b9ec8ab05c02fc82d11607bf Mon Sep 17 00:00:00 2001 From: Bruno Sinou Date: Fri, 14 Oct 2011 21:07:41 +0000 Subject: [PATCH] fix a few bugs git-svn-id: https://svn.argeo.org/commons/trunk@4843 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../org.argeo.eclipse.ui.jcr/icons/sort.gif | Bin 0 -> 162 bytes .../org/argeo/eclipse/ui/jcr/JcrImages.java | 2 + .../ui/jcr}/utils/JcrFileProvider.java | 64 ++++++++------ .../ui/jcr/utils/JcrItemsComparator.java | 4 +- .../META-INF/spring/commands.xml | 4 +- .../org.argeo.jcr.ui.explorer/icons/sort.gif | Bin 0 -> 162 bytes .../org.argeo.jcr.ui.explorer/plugin.xml | 22 +++++ .../explorer/browser/NodeContentProvider.java | 79 +++++------------- .../browser/PropertiesContentProvider.java | 3 +- .../ui/explorer/commands/SortChildNodes.java | 35 ++++++++ .../SingleNodeAsTreeContentProvider.java | 4 +- .../utils/GenericNodeDoubleClickListener.java | 3 +- .../explorer/utils/TreeObjectsComparator.java | 11 +++ .../ui/explorer/views/GenericJcrBrowser.java | 11 +++ 14 files changed, 152 insertions(+), 90 deletions(-) create mode 100644 eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/sort.gif rename {server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer => eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr}/utils/JcrFileProvider.java (74%) rename server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/ItemComparator.java => eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrItemsComparator.java (78%) create mode 100644 server/plugins/org.argeo.jcr.ui.explorer/icons/sort.gif create mode 100644 server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/SortChildNodes.java create mode 100644 server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/TreeObjectsComparator.java diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/sort.gif b/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/sort.gif new file mode 100644 index 0000000000000000000000000000000000000000..23c5d0b11c4a26466ce83a628087957c3157d567 GIT binary patch literal 162 zcmZ?wbhEHb6krfw*v!Dt=Qd?o<*NL$mekrQF|AAe`uB!(Z}yFfm2Rtco!n8ea?$_) z|C?po8DK#1CkrD312=;XNC0F81B-vb$&~_LS+7D>PF**XjMmUwGAU-6$GW(pMcgqb z(|2w9;dV}`sl!pnk4?!TK`? repositories = repositoryRegister // .getRepositories(); // for (String name : repositories.keySet()) { - // tmpNodes.add(new RepositoryNode(name, repositories - // .get(name))); + // // tmpNodes.add(new RepositoryNode(name, repositories + // // .get(name))); // } // // } @@ -96,27 +109,26 @@ public class JcrFileProvider implements FileProvider { */ private Node getFileNodeFromId(String fileId) { try { - Node result = null; - - rootNodes: for (int j = 0; j < rootNodes.length; j++) { - // in case we have a classic JCR Node - if (rootNodes[j] instanceof Node) { - Node curNode = (Node) rootNodes[j]; - result = curNode.getSession().getNodeByIdentifier(fileId); - if (result != null) - break rootNodes; - } // Case of a repository Node - else if (rootNodes[j] instanceof RepositoryNode) { - Object[] nodes = ((RepositoryNode) rootNodes[j]) - .getChildren(); - for (int i = 0; i < nodes.length; i++) { - Node node = (Node) nodes[i]; - result = node.getSession().getNodeByIdentifier(fileId); - if (result != null) - break rootNodes; - } - } - } + Node result = refNode.getSession().getNodeByIdentifier(fileId); + + // rootNodes: for (int j = 0; j < rootNodes.length; j++) { + // // in case we have a classic JCR Node + // if (rootNodes[j] instanceof Node) { + // Node curNode = (Node) rootNodes[j]; + // if (result != null) + // break rootNodes; + // } // Case of a repository Node + // else if (rootNodes[j] instanceof RepositoryNode) { + // Object[] nodes = ((RepositoryNode) rootNodes[j]) + // .getChildren(); + // for (int i = 0; i < nodes.length; i++) { + // Node node = (Node) nodes[i]; + // result = node.getSession().getNodeByIdentifier(fileId); + // if (result != null) + // break rootNodes; + // } + // } + // } // Sanity checks if (result == null) diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/ItemComparator.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrItemsComparator.java similarity index 78% rename from server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/ItemComparator.java rename to eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrItemsComparator.java index 156aa7b43..5e6f911e9 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/ItemComparator.java +++ b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrItemsComparator.java @@ -1,4 +1,4 @@ -package org.argeo.jcr.ui.explorer.browser; +package org.argeo.eclipse.ui.jcr.utils; import java.util.Comparator; @@ -7,7 +7,7 @@ import javax.jcr.RepositoryException; import org.argeo.ArgeoException; -public class ItemComparator implements Comparator { +public class JcrItemsComparator implements Comparator { public int compare(Item o1, Item o2) { try { // TODO: put folder before files diff --git a/server/plugins/org.argeo.jcr.ui.explorer/META-INF/spring/commands.xml b/server/plugins/org.argeo.jcr.ui.explorer/META-INF/spring/commands.xml index 1e58d33e5..96ad94dbd 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/META-INF/spring/commands.xml +++ b/server/plugins/org.argeo.jcr.ui.explorer/META-INF/spring/commands.xml @@ -5,10 +5,10 @@ http://www.springframework.org/schema/beans/spring-beans.xsd"> + value="org.argeo.jcr.ui.explorer.genericJcrQueryEditor" /> PF**XjMmUwGAU-6$GW(pMcgqb z(|2w9;dV}`sl!pnk4?!TK`? + + + + + + + + + + + nodes = new ArrayList(); - // Map repositories = repositoryRegister - // .getRepositories(); - // for (String name : repositories.keySet()) { - // nodes.add(new RepositoryNode(name, repositories.get(name))); - // } - // return nodes.toArray(); - - if (parentElement instanceof TreeParent) - return ((TreeParent) parentElement).getChildren(); - else { + if (parentElement instanceof TreeParent) { + if (sortChildren) { + // TreeParent[] arr = (TreeParent[]) ((TreeParent) + // parentElement) + // .getChildren(); + Object[] tmpArr = ((TreeParent) parentElement).getChildren(); + TreeParent[] arr = new TreeParent[tmpArr.length]; + for (int i = 0; i < tmpArr.length; i++) + arr[i] = (TreeParent) tmpArr[i]; + + Arrays.sort(arr, itemComparator); + return arr; + } else + return ((TreeParent) parentElement).getChildren(); + + } else { return new Object[0]; } } @@ -108,15 +99,8 @@ public class NodeContentProvider implements ITreeContentProvider { } else if (element instanceof TreeParent) { TreeParent tp = (TreeParent) element; return tp.hasChildren(); - // } else if (element instanceof RepositoryNode) { - // return ((RepositoryNode) element).hasChildren(); - // } else if (element instanceof WorkspaceNode) { - // return ((WorkspaceNode) element).getSession() != null; } return false; - // } catch (RepositoryException e) { - // throw new ArgeoException("Cannot check children of " + element, e); - // } } public void dispose() { @@ -124,21 +108,4 @@ public class NodeContentProvider implements ITreeContentProvider { public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } - - // protected Object[] childrenNodes(Node parentNode) { - // try { - // List children = new ArrayList(); - // NodeIterator nit = parentNode.getNodes(); - // while (nit.hasNext()) { - // Node node = nit.nextNode(); - // children.add(node); - // } - // Node[] arr = children.toArray(new Node[children.size()]); - // Arrays.sort(arr, itemComparator); - // return arr; - // } catch (RepositoryException e) { - // throw new ArgeoException("Cannot list children of " + parentNode, e); - // } - // } - } diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/PropertiesContentProvider.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/PropertiesContentProvider.java index 04cd699a7..4d606aaed 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/PropertiesContentProvider.java +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/browser/PropertiesContentProvider.java @@ -9,11 +9,12 @@ import javax.jcr.PropertyIterator; import javax.jcr.RepositoryException; import org.argeo.ArgeoException; +import org.argeo.eclipse.ui.jcr.utils.JcrItemsComparator; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.Viewer; public class PropertiesContentProvider implements IStructuredContentProvider { - private ItemComparator itemComparator = new ItemComparator(); + private JcrItemsComparator itemComparator = new JcrItemsComparator(); public void dispose() { } diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/SortChildNodes.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/SortChildNodes.java new file mode 100644 index 000000000..5b53badea --- /dev/null +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/SortChildNodes.java @@ -0,0 +1,35 @@ +package org.argeo.jcr.ui.explorer.commands; + +import org.argeo.jcr.ui.explorer.JcrExplorerPlugin; +import org.argeo.jcr.ui.explorer.views.GenericJcrBrowser; +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.Command; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.State; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.commands.ICommandService; +import org.eclipse.ui.handlers.HandlerUtil; + +/** + * Change isSorted state of the JcrExplorer Browser + */ +public class SortChildNodes extends AbstractHandler { + public final static String ID = JcrExplorerPlugin.ID + ".sortChildNodes"; + + public Object execute(ExecutionEvent event) throws ExecutionException { + GenericJcrBrowser view = (GenericJcrBrowser) HandlerUtil + .getActiveWorkbenchWindow(event).getActivePage() + .findView(GenericJcrBrowser.ID); + + ICommandService service = (ICommandService) PlatformUI.getWorkbench() + .getService(ICommandService.class); + Command command = service.getCommand(ID); + State state = command.getState(ID + ".toggleState"); + + boolean wasSorted = (Boolean) state.getValue(); + view.setSortChildNodes(!wasSorted); + state.setValue(!wasSorted); + return null; + } +} diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/providers/SingleNodeAsTreeContentProvider.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/providers/SingleNodeAsTreeContentProvider.java index d32942775..87e19a27b 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/providers/SingleNodeAsTreeContentProvider.java +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/providers/SingleNodeAsTreeContentProvider.java @@ -9,7 +9,7 @@ import javax.jcr.NodeIterator; import javax.jcr.RepositoryException; import org.argeo.ArgeoException; -import org.argeo.jcr.ui.explorer.browser.ItemComparator; +import org.argeo.eclipse.ui.jcr.utils.JcrItemsComparator; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; @@ -20,7 +20,7 @@ import org.eclipse.jface.viewers.Viewer; */ public class SingleNodeAsTreeContentProvider implements ITreeContentProvider { // private Node rootNode; - private ItemComparator itemComparator = new ItemComparator(); + private JcrItemsComparator itemComparator = new JcrItemsComparator(); /** * Sends back the first level of the Tree. input element must be a single diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/GenericNodeDoubleClickListener.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/GenericNodeDoubleClickListener.java index f97e1b579..da13a2366 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/GenericNodeDoubleClickListener.java +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/GenericNodeDoubleClickListener.java @@ -5,6 +5,7 @@ import javax.jcr.RepositoryException; import javax.jcr.nodetype.NodeType; import org.argeo.ArgeoException; +import org.argeo.eclipse.ui.jcr.utils.JcrFileProvider; import org.argeo.eclipse.ui.specific.FileHandler; import org.argeo.jcr.ui.explorer.JcrExplorerPlugin; import org.argeo.jcr.ui.explorer.editors.GenericNodeEditor; @@ -67,7 +68,7 @@ public class GenericNodeDoubleClickListener implements IDoubleClickListener { // ITreeContentProvider itcp = (ITreeContentProvider) // nodeViewer // .getContentProvider(); - // jfp.setRootNodes((Object[]) itcp.getElements(null)); + jfp.setReferenceNode(node); fileHandler.openFile(name, id); } GenericNodeEditorInput gnei = new GenericNodeEditorInput(node); diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/TreeObjectsComparator.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/TreeObjectsComparator.java new file mode 100644 index 000000000..a7997086a --- /dev/null +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/TreeObjectsComparator.java @@ -0,0 +1,11 @@ +package org.argeo.jcr.ui.explorer.utils; + +import java.util.Comparator; + +import org.argeo.eclipse.ui.TreeParent; + +public class TreeObjectsComparator implements Comparator { + public int compare(TreeParent o1, TreeParent o2) { + 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 2274644d9..3af60844c 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 @@ -18,6 +18,7 @@ import org.argeo.eclipse.ui.jcr.utils.NodeViewerComparer; import org.argeo.eclipse.ui.jcr.views.AbstractJcrBrowser; import org.argeo.jcr.RepositoryRegister; import org.argeo.jcr.security.JcrKeyring; +import org.argeo.jcr.ui.explorer.JcrExplorerPlugin; import org.argeo.jcr.ui.explorer.browser.NodeContentProvider; import org.argeo.jcr.ui.explorer.browser.NodeLabelProvider; import org.argeo.jcr.ui.explorer.browser.PropertiesContentProvider; @@ -51,6 +52,8 @@ import org.eclipse.swt.widgets.Menu; public class GenericJcrBrowser extends AbstractJcrBrowser { // private final static Log log = // LogFactory.getLog(GenericJcrBrowser.class); + public final static String ID = JcrExplorerPlugin.ID + ".browserView"; + private boolean sortChildNodes = false; /* DEPENDENCY INJECTION */ private JcrKeyring jcrKeyring; @@ -284,6 +287,14 @@ public class GenericJcrBrowser extends AbstractJcrBrowser { } + public void setSortChildNodes(boolean sortChildNodes) { + this.sortChildNodes = sortChildNodes; + } + + public boolean getSortChildNodes() { + return sortChildNodes; + } + /* DEPENDENCY INJECTION */ public void setRepositoryRegister(RepositoryRegister repositoryRegister) { this.repositoryRegister = repositoryRegister; -- 2.39.2