]> git.argeo.org Git - lgpl/argeo-commons.git/blob - eclipse/org.argeo.cms.e4/src/org/argeo/cms/e4/jcr/handlers/AddFolderNode.java
Simplify hierarchy units
[lgpl/argeo-commons.git] / eclipse / org.argeo.cms.e4 / src / org / argeo / cms / e4 / jcr / handlers / AddFolderNode.java
1 package org.argeo.cms.e4.jcr.handlers;
2
3 import java.util.List;
4
5 import javax.inject.Named;
6 import javax.jcr.Node;
7 import javax.jcr.RepositoryException;
8 import javax.jcr.nodetype.NodeType;
9
10 import org.argeo.cms.e4.jcr.JcrBrowserView;
11 import org.argeo.cms.ui.jcr.model.SingleJcrNodeElem;
12 import org.argeo.cms.ui.jcr.model.WorkspaceElem;
13 import org.argeo.eclipse.ui.TreeParent;
14 import org.argeo.eclipse.ui.dialogs.ErrorFeedback;
15 import org.argeo.eclipse.ui.dialogs.SingleValue;
16 import org.eclipse.e4.core.di.annotations.Execute;
17 import org.eclipse.e4.ui.model.application.ui.basic.MPart;
18 import org.eclipse.e4.ui.services.IServiceConstants;
19 import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
20
21 /**
22 * Adds a node of type nt:folder, only on {@link SingleJcrNodeElem} and
23 * {@link WorkspaceElem} TreeObject types.
24 *
25 * This handler assumes that a selection provider is available and picks only
26 * first selected item. It is UI's job to enable the command only when the
27 * selection contains one and only one element. Thus no parameter is passed
28 * through the command.
29 */
30 public class AddFolderNode {
31 @Execute
32 public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart part, ESelectionService selectionService) {
33 List<?> selection = (List<?>) selectionService.getSelection();
34 JcrBrowserView view = (JcrBrowserView) part.getObject();
35
36 if (selection != null && selection.size() == 1) {
37 TreeParent treeParentNode = null;
38 Node jcrParentNode = null;
39 Object obj = selection.get(0);
40
41 if (obj instanceof SingleJcrNodeElem) {
42 treeParentNode = (TreeParent) obj;
43 jcrParentNode = ((SingleJcrNodeElem) treeParentNode).getNode();
44 } else if (obj instanceof WorkspaceElem) {
45 treeParentNode = (TreeParent) obj;
46 jcrParentNode = ((WorkspaceElem) treeParentNode).getRootNode();
47 } else
48 return;
49
50 String folderName = SingleValue.ask("Folder name", "Enter folder name");
51 if (folderName != null) {
52 try {
53 jcrParentNode.addNode(folderName, NodeType.NT_FOLDER);
54 jcrParentNode.getSession().save();
55 view.nodeAdded(treeParentNode);
56 } catch (RepositoryException e) {
57 ErrorFeedback.show("Cannot create folder " + folderName + " under " + treeParentNode, e);
58 }
59 }
60 } else {
61 // ErrorFeedback.show(WorkbenchUiPlugin
62 // .getMessage("errorUnvalidNtFolderNodeType"));
63 ErrorFeedback.show("Invalid NT folder node type");
64 }
65 }
66
67 }