X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=server%2Fplugins%2Forg.argeo.jcr.ui.explorer%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjcr%2Fui%2Fexplorer%2Fcommands%2FAddFolderNode.java;h=afc01b2a7bd0e02326c3431956e9aed7549737ba;hb=ae696952b94054d3b9ec8ab05c02fc82d11607bf;hp=ed81c88d9bf5c1a903d64da61e5e32c3e7999ba4;hpb=c0b7b3f9d1781d074ab35d24017042fa9415e1e4;p=lgpl%2Fargeo-commons.git diff --git a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/AddFolderNode.java b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/AddFolderNode.java index ed81c88d9..afc01b2a7 100644 --- a/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/AddFolderNode.java +++ b/server/plugins/org.argeo.jcr.ui.explorer/src/main/java/org/argeo/jcr/ui/explorer/commands/AddFolderNode.java @@ -5,9 +5,12 @@ import javax.jcr.RepositoryException; import javax.jcr.nodetype.NodeType; import org.argeo.eclipse.ui.ErrorFeedback; +import org.argeo.eclipse.ui.TreeParent; import org.argeo.eclipse.ui.dialogs.SingleValue; import org.argeo.eclipse.ui.jcr.JcrUiPlugin; +import org.argeo.jcr.ui.explorer.JcrExplorerPlugin; import org.argeo.jcr.ui.explorer.model.SingleJcrNode; +import org.argeo.jcr.ui.explorer.model.WorkspaceNode; import org.argeo.jcr.ui.explorer.views.GenericJcrBrowser; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; @@ -16,41 +19,68 @@ import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.handlers.HandlerUtil; -/** Adds a node of type nt:folder */ +/** + * Adds a node of type nt:folder, only on {@link SingleJcrNode} and + * {@link WorkspaceNode} TreeObject types. + * + * + * This handler assumes that a selection provider is available and picks only + * first selected item. It is UI's job to enable the command only when the + * selection contains one and only one element. Thus no parameter is passed + * through the command. + * + * This handler is still 'hard linked' to a GenericJcrBrowser view to enable + * correct tree refresh when a node is added. This must be corrected in future + * versions. + */ public class AddFolderNode extends AbstractHandler { + public final static String ID = JcrExplorerPlugin.ID + ".addFolderNode"; + + // public final static String DEFAULT_LABEL = JcrExplorerPlugin + // .getMessage("addFolderNodeCmdLbl"); + // public final static String DEFAULT_ICON_REL_PATH = "icons/addRepo.gif"; + public Object execute(ExecutionEvent event) throws ExecutionException { + ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event) .getActivePage().getSelection(); + GenericJcrBrowser view = (GenericJcrBrowser) HandlerUtil .getActiveWorkbenchWindow(event).getActivePage() .findView(HandlerUtil.getActivePartId(event)); + if (selection != null && !selection.isEmpty() && selection instanceof IStructuredSelection) { Object obj = ((IStructuredSelection) selection).getFirstElement(); + TreeParent treeParentNode = null; + Node jcrParentNode = null; if (obj instanceof SingleJcrNode) { - String folderName = SingleValue.ask("Folder name", - "Enter folder name"); - if (folderName != null) { - SingleJcrNode sjn = (SingleJcrNode) obj; - Node parentNode = sjn.getNode(); - try { - Node newNode = parentNode.addNode(folderName, - NodeType.NT_FOLDER); - parentNode.getSession().save(); - view.nodeAdded(sjn); - } catch (RepositoryException e) { - ErrorFeedback.show("Cannot create folder " + folderName - + " under " + parentNode, e); - } + treeParentNode = (TreeParent) obj; + jcrParentNode = ((SingleJcrNode) treeParentNode).getNode(); + } else if (obj instanceof WorkspaceNode) { + treeParentNode = (TreeParent) obj; + jcrParentNode = ((WorkspaceNode) treeParentNode).getRootNode(); + } else + return null; + + String folderName = SingleValue.ask("Folder name", + "Enter folder name"); + if (folderName != null) { + try { + jcrParentNode.addNode(folderName, NodeType.NT_FOLDER); + jcrParentNode.getSession().save(); + view.nodeAdded(treeParentNode); + } catch (RepositoryException e) { + ErrorFeedback.show("Cannot create folder " + folderName + + " under " + treeParentNode, e); } - } else { - ErrorFeedback.show(JcrUiPlugin - .getMessage("errorUnvalidNtFolderNodeType")); } + } else { + ErrorFeedback.show(JcrUiPlugin + .getMessage("errorUnvalidNtFolderNodeType")); } return null; } - }