1 package org
.argeo
.slc
.akb
.ui
.commands
;
4 import javax
.jcr
.Property
;
5 import javax
.jcr
.Repository
;
6 import javax
.jcr
.RepositoryException
;
7 import javax
.jcr
.Session
;
9 import org
.argeo
.eclipse
.ui
.dialogs
.SingleValue
;
10 import org
.argeo
.jcr
.JcrUtils
;
11 import org
.argeo
.slc
.akb
.AkbException
;
12 import org
.argeo
.slc
.akb
.AkbService
;
13 import org
.argeo
.slc
.akb
.AkbTypes
;
14 import org
.argeo
.slc
.akb
.ui
.AkbUiPlugin
;
15 import org
.argeo
.slc
.akb
.ui
.dialogs
.AddItemDialog
;
16 import org
.argeo
.slc
.akb
.ui
.editors
.AkbNodeEditorInput
;
17 import org
.argeo
.slc
.akb
.ui
.editors
.ConnectorAliasEditor
;
18 import org
.argeo
.slc
.akb
.ui
.editors
.EnvTemplateEditor
;
19 import org
.argeo
.slc
.akb
.ui
.editors
.JdbcQueryTemplateEditor
;
20 import org
.argeo
.slc
.akb
.ui
.editors
.SshCommandTemplateEditor
;
21 import org
.argeo
.slc
.akb
.ui
.editors
.SshFileTemplateEditor
;
22 import org
.eclipse
.core
.commands
.AbstractHandler
;
23 import org
.eclipse
.core
.commands
.ExecutionEvent
;
24 import org
.eclipse
.core
.commands
.ExecutionException
;
25 import org
.eclipse
.swt
.widgets
.Display
;
26 import org
.eclipse
.ui
.IWorkbenchPage
;
27 import org
.eclipse
.ui
.PartInitException
;
28 import org
.eclipse
.ui
.handlers
.HandlerUtil
;
31 * Opens or show an AKB specific node in a single repository / single workspace
32 * environment given some parameters, namely :
34 * <li>PARAM_NODE_JCR_ID: the corresponding JCR ID might be null to create a new
36 * <li>PARAM_NODE_TYPE: jcr type of the node to create</li>
37 * <li>PARAM_PARENT_NODE_JCR_ID: Only used in the case of the creation of a new
41 public class OpenAkbNodeEditor
extends AbstractHandler
{
42 public final static String ID
= AkbUiPlugin
.PLUGIN_ID
43 + ".openAkbNodeEditor";
45 /* DEPENDENCY INJECTION */
46 private Repository repository
;
47 private AkbService akbService
;
49 public final static String PARAM_NODE_JCR_ID
= "param.nodeJcrId";
50 public final static String PARAM_NODE_TYPE
= "param.nodeType";
51 public final static String PARAM_PARENT_NODE_JCR_ID
= "param.parentNodeJcrId";
53 public Object
execute(ExecutionEvent event
) throws ExecutionException
{
55 String nodeType
= event
.getParameter(PARAM_NODE_TYPE
);
56 String nodeJcrId
= event
.getParameter(PARAM_NODE_JCR_ID
);
57 String parentNodeJcrId
= event
.getParameter(PARAM_PARENT_NODE_JCR_ID
);
59 Session session
= null;
61 // caches current Page
62 IWorkbenchPage currentPage
= HandlerUtil
.getActiveWorkbenchWindow(
63 event
).getActivePage();
65 session
= repository
.login();
68 if (nodeJcrId
== null)
69 if (parentNodeJcrId
== null)
70 throw new AkbException(
71 "Define a parent node to create a new node");
73 node
= createNewNode(session
, nodeType
, parentNodeJcrId
);
75 node
= session
.getNodeByIdentifier(nodeJcrId
);
77 // no node has been found or created, return
81 String editorId
= getEditorForNode(node
);
83 // no editor has been found, return silently
87 AkbNodeEditorInput eei
= new AkbNodeEditorInput(
88 node
.getIdentifier());
90 currentPage
.openEditor(eei
, editorId
);
91 } catch (PartInitException pie
) {
92 throw new AkbException(
93 "Unexpected PartInitException while opening akb node editor",
95 } catch (RepositoryException e
) {
96 throw new AkbException("unexpected JCR error while opening "
97 + nodeType
+ " editor", e
);
99 JcrUtils
.logoutQuietly(session
);
104 private Node
createNewNode(Session session
, String nodeType
,
105 String parentNodeJcrId
) throws RepositoryException
{
108 if (AkbTypes
.AKB_ITEM
.equals(nodeType
)) {
109 Node parNode
= session
.getNodeByIdentifier(parentNodeJcrId
);
110 AddItemDialog dialog
= new AddItemDialog(Display
.getDefault()
111 .getActiveShell(), "Add new item", parNode
);
113 node
= dialog
.getNewNode();
115 String name
= SingleValue
.ask("New name", "Create AKB item");
118 if (AkbTypes
.AKB_ENV_TEMPLATE
.equals(nodeType
)) {
119 node
= akbService
.createAkbTemplate(
120 session
.getNodeByIdentifier(parentNodeJcrId
), name
);
122 Node parentNode
= session
.getNodeByIdentifier(parentNodeJcrId
);
123 node
= parentNode
.addNode(name
, nodeType
);
124 node
.setProperty(Property
.JCR_TITLE
, name
);
127 // corresponding node is saved but not checked in, in order to ease
133 private String
getEditorForNode(Node node
) throws RepositoryException
{
134 String editorId
= null;
135 if (node
.isNodeType(AkbTypes
.AKB_CONNECTOR_ALIAS
))
136 editorId
= ConnectorAliasEditor
.ID
;
137 else if (node
.isNodeType(AkbTypes
.AKB_ENV_TEMPLATE
))
138 editorId
= EnvTemplateEditor
.ID
;
139 else if (node
.isNodeType(AkbTypes
.AKB_SSH_FILE
))
140 editorId
= SshFileTemplateEditor
.ID
;
141 else if (node
.isNodeType(AkbTypes
.AKB_SSH_COMMAND
))
142 editorId
= SshCommandTemplateEditor
.ID
;
143 else if (node
.isNodeType(AkbTypes
.AKB_JDBC_QUERY
))
144 editorId
= JdbcQueryTemplateEditor
.ID
;
146 // throw new AkbException("Editor is undefined for node " + node);
150 /* DEPENDENCY INJECTION */
151 public void setRepository(Repository repository
) {
152 this.repository
= repository
;
155 public void setAkbService(AkbService akbService
) {
156 this.akbService
= akbService
;