From: Bruno Sinou Date: Fri, 14 Oct 2011 21:07:41 +0000 (+0000) Subject: fix a few bugs X-Git-Tag: argeo-commons-2.1.30~1092 X-Git-Url: https://git.argeo.org/?a=commitdiff_plain;h=ae696952b94054d3b9ec8ab05c02fc82d11607bf;p=lgpl%2Fargeo-commons.git fix a few bugs git-svn-id: https://svn.argeo.org/commons/trunk@4843 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- 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 000000000..23c5d0b11 Binary files /dev/null and b/eclipse/runtime/org.argeo.eclipse.ui.jcr/icons/sort.gif differ diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrImages.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrImages.java index b9566d7ea..7d8abdb32 100644 --- a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrImages.java +++ b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/JcrImages.java @@ -14,6 +14,8 @@ public class JcrImages { "icons/binary.png").createImage(); public final static Image HOME = JcrUiPlugin.getImageDescriptor( "icons/home.gif").createImage(); + public final static Image SORT = JcrUiPlugin.getImageDescriptor( + "icons/sort.gif").createImage(); public final static Image REPOSITORIES = JcrUiPlugin.getImageDescriptor( "icons/repositories.gif").createImage(); diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrFileProvider.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrFileProvider.java new file mode 100644 index 000000000..a9ee6402e --- /dev/null +++ b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrFileProvider.java @@ -0,0 +1,157 @@ +package org.argeo.eclipse.ui.jcr.utils; + +import java.io.InputStream; + +import javax.jcr.Node; +import javax.jcr.Property; +import javax.jcr.RepositoryException; +import javax.jcr.nodetype.NodeType; + +import org.apache.commons.io.IOUtils; +import org.argeo.ArgeoException; +import org.argeo.eclipse.ui.specific.FileProvider; + +/** + * Implements a FileProvider for UI purposes. Note that it might not be very + * reliable as long as we have not fixed login & multi repository issues that + * will be addressed in the next version. + * + * NOTE: id used here is the real id of the JCR Node, not the JCR Path + * + * Relies on common approach for JCR file handling implementation. + * + */ + +public class JcrFileProvider implements FileProvider { + + // private Object[] rootNodes; + private Node refNode; + + /** + * Must be set in order for the provider to be able to get current session + * and thus have the ability to get the file node corresponding to a given + * file ID + * + * FIXME : this introduces some concurrences ISSUES. + * + * @param repositoryNode + */ + public void setReferenceNode(Node refNode) { + this.refNode = refNode; + } + + /** + * Must be set in order for the provider to be able to search the repository + * Provided object might be either JCR Nodes or UI RepositoryNode for the + * time being. + * + * @param repositoryNode + */ + // public void setRootNodes(Object[] rootNodes) { + // List tmpNodes = new ArrayList(); + // for (int i = 0; i < rootNodes.length; i++) { + // Object obj = rootNodes[i]; + // if (obj instanceof Node) { + // tmpNodes.add(obj); + // } else if (obj instanceof RepositoryRegister) { + // RepositoryRegister repositoryRegister = (RepositoryRegister) obj; + // Map repositories = repositoryRegister + // .getRepositories(); + // for (String name : repositories.keySet()) { + // // tmpNodes.add(new RepositoryNode(name, repositories + // // .get(name))); + // } + // + // } + // } + // this.rootNodes = tmpNodes.toArray(); + // } + + public byte[] getByteArrayFileFromId(String fileId) { + InputStream fis = null; + byte[] ba = null; + Node child = getFileNodeFromId(fileId); + try { + fis = (InputStream) child.getProperty(Property.JCR_DATA) + .getBinary().getStream(); + ba = IOUtils.toByteArray(fis); + + } catch (Exception e) { + throw new ArgeoException("Stream error while opening file", e); + } finally { + IOUtils.closeQuietly(fis); + } + return ba; + } + + public InputStream getInputStreamFromFileId(String fileId) { + try { + InputStream fis = null; + + Node child = getFileNodeFromId(fileId); + fis = (InputStream) child.getProperty(Property.JCR_DATA) + .getBinary().getStream(); + return fis; + } catch (RepositoryException re) { + throw new ArgeoException("Cannot get stream from file node for Id " + + fileId, re); + } + } + + /** + * Throws an exception if the node is not found in the current repository (a + * bit like a FileNotFoundException) + * + * @param fileId + * @return Returns the child node of the nt:file node. It is the child node + * that have the jcr:data property where actual file is stored. + * never null + */ + private Node getFileNodeFromId(String fileId) { + try { + 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) + throw new ArgeoException("File node not found for ID" + fileId); + + // Ensure that the node have the correct type. + if (!result.isNodeType(NodeType.NT_FILE)) + throw new ArgeoException( + "Cannot open file children Node that are not of '" + + NodeType.NT_RESOURCE + "' type."); + + // Get the usefull part of the Node + Node child = result.getNodes().nextNode(); + if (child == null || !child.isNodeType(NodeType.NT_RESOURCE)) + throw new ArgeoException( + "ERROR: IN the current implemented model, '" + + NodeType.NT_FILE + + "' file node must have one and only one child of the nt:ressource, where actual data is stored"); + return child; + + } catch (RepositoryException re) { + throw new ArgeoException("Erreur while getting file node of ID " + + fileId, re); + } + } +} diff --git a/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrItemsComparator.java b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrItemsComparator.java new file mode 100644 index 000000000..5e6f911e9 --- /dev/null +++ b/eclipse/runtime/org.argeo.eclipse.ui.jcr/src/main/java/org/argeo/eclipse/ui/jcr/utils/JcrItemsComparator.java @@ -0,0 +1,20 @@ +package org.argeo.eclipse.ui.jcr.utils; + +import java.util.Comparator; + +import javax.jcr.Item; +import javax.jcr.RepositoryException; + +import org.argeo.ArgeoException; + +public class JcrItemsComparator implements Comparator { + public int compare(Item o1, Item o2) { + try { + // TODO: put folder before files + return o1.getName().compareTo(o2.getName()); + } catch (RepositoryException e) { + throw new ArgeoException("Cannot compare " + o1 + " and " + o2, e); + } + } + +} 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" /> + + + + + + + + + + + { - public int compare(Item o1, Item o2) { - try { - // TODO: put folder before files - return o1.getName().compareTo(o2.getName()); - } catch (RepositoryException e) { - throw new ArgeoException("Cannot compare " + o1 + " and " + o2, e); - } - } - -} 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 c0ae9c422..99a169e6d 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 @@ -1,11 +1,14 @@ package org.argeo.jcr.ui.explorer.browser; import java.util.ArrayList; +import java.util.Arrays; 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; @@ -13,6 +16,7 @@ import org.argeo.jcr.RepositoryRegister; import org.argeo.jcr.security.JcrKeyring; import org.argeo.jcr.ui.explorer.model.RepositoriesNode; import org.argeo.jcr.ui.explorer.model.SingleJcrNode; +import org.argeo.jcr.ui.explorer.utils.TreeObjectsComparator; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; @@ -22,8 +26,7 @@ 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 private RepositoryRegister repositoryRegister; @@ -31,7 +34,8 @@ public class NodeContentProvider implements ITreeContentProvider { private JcrKeyring jcrKeyring; // Utils - // private ItemComparator itemComparator = new ItemComparator(); + private boolean sortChildren = true; + private TreeObjectsComparator itemComparator = new TreeObjectsComparator(); public NodeContentProvider(JcrKeyring jcrKeyring, RepositoryRegister repositoryRegister) { @@ -60,35 +64,22 @@ public class NodeContentProvider implements ITreeContentProvider { } public Object[] getChildren(Object parentElement) { - // if (parentElement instanceof Node) { - // return childrenNodes((Node) parentElement); - // } else if (parentElement instanceof RepositoryNode) { - // return ((RepositoryNode) parentElement).getChildren(); - // } else if (parentElement instanceof WorkspaceNode) { - // Session session = ((WorkspaceNode) parentElement).getSession(); - // if (session == null) - // return new Object[0]; - // - // try { - // return childrenNodes(session.getRootNode()); - // } catch (RepositoryException e) { - // throw new ArgeoException("Cannot retrieve root node of " - // + session, e); - // } - // } else if (parentElement instanceof RepositoryRegister) { - // RepositoryRegister repositoryRegister = (RepositoryRegister) - // parentElement; - // List 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/JcrFileProvider.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/JcrFileProvider.java deleted file mode 100644 index 568c75108..000000000 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/utils/JcrFileProvider.java +++ /dev/null @@ -1,145 +0,0 @@ -package org.argeo.jcr.ui.explorer.utils; - -import java.io.InputStream; - -import javax.jcr.Node; -import javax.jcr.Property; -import javax.jcr.RepositoryException; -import javax.jcr.nodetype.NodeType; - -import org.apache.commons.io.IOUtils; -import org.argeo.ArgeoException; -import org.argeo.eclipse.ui.specific.FileProvider; -import org.argeo.jcr.ui.explorer.model.RepositoryNode; - -/** - * Implements a FileProvider for UI purposes. Note that it might not be very - * reliable as long as we have not fixed login & multi repository issues that - * will be addressed in the next version. - * - * NOTE: id used here is the real id of the JCR Node, not the JCR Path - * - * Relies on common approach for JCR file handling implementation. - * - */ - -public class JcrFileProvider implements FileProvider { - - private Object[] rootNodes; - - /** - * Must be set in order for the provider to be able to search the repository - * Provided object might be either JCR Nodes or UI RepositoryNode for the - * time being. - * - * @param repositoryNode - */ - // public void setRootNodes(Object[] rootNodes) { - // List tmpNodes = new ArrayList(); - // for (int i = 0; i < rootNodes.length; i++) { - // Object obj = rootNodes[i]; - // if (obj instanceof Node) { - // tmpNodes.add(obj); - // } else if (obj instanceof RepositoryRegister) { - // RepositoryRegister repositoryRegister = (RepositoryRegister) obj; - // Map repositories = repositoryRegister - // .getRepositories(); - // for (String name : repositories.keySet()) { - // tmpNodes.add(new RepositoryNode(name, repositories - // .get(name))); - // } - // - // } - // } - // this.rootNodes = tmpNodes.toArray(); - // } - - public byte[] getByteArrayFileFromId(String fileId) { - InputStream fis = null; - byte[] ba = null; - Node child = getFileNodeFromId(fileId); - try { - fis = (InputStream) child.getProperty(Property.JCR_DATA) - .getBinary().getStream(); - ba = IOUtils.toByteArray(fis); - - } catch (Exception e) { - throw new ArgeoException("Stream error while opening file", e); - } finally { - IOUtils.closeQuietly(fis); - } - return ba; - } - - public InputStream getInputStreamFromFileId(String fileId) { - try { - InputStream fis = null; - - Node child = getFileNodeFromId(fileId); - fis = (InputStream) child.getProperty(Property.JCR_DATA) - .getBinary().getStream(); - return fis; - } catch (RepositoryException re) { - throw new ArgeoException("Cannot get stream from file node for Id " - + fileId, re); - } - } - - /** - * Throws an exception if the node is not found in the current repository (a - * bit like a FileNotFoundException) - * - * @param fileId - * @return Returns the child node of the nt:file node. It is the child node - * that have the jcr:data property where actual file is stored. - * never null - */ - 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; - } - } - } - - // Sanity checks - if (result == null) - throw new ArgeoException("File node not found for ID" + fileId); - - // Ensure that the node have the correct type. - if (!result.isNodeType(NodeType.NT_FILE)) - throw new ArgeoException( - "Cannot open file children Node that are not of '" - + NodeType.NT_RESOURCE + "' type."); - - // Get the usefull part of the Node - Node child = result.getNodes().nextNode(); - if (child == null || !child.isNodeType(NodeType.NT_RESOURCE)) - throw new ArgeoException( - "ERROR: IN the current implemented model, '" - + NodeType.NT_FILE - + "' file node must have one and only one child of the nt:ressource, where actual data is stored"); - return child; - - } catch (RepositoryException re) { - throw new ArgeoException("Erreur while getting file node of ID " - + fileId, re); - } - } -} 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;