X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=plugins%2Forg.argeo.slc.akb.ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fakb%2Fui%2Fcommands%2FOpenAkbNodeEditor.java;h=a04bde084265a38f7d51acb2dd80de88b7cf4a45;hb=44b4c78e6a082d51d0410c3995b5edf353d417b9;hp=c02f118b69d444444de9ef6a5bd3564ed9670b70;hpb=c5a5cb9a47fdafcc95f1b8902f31b62a0e6a9674;p=gpl%2Fargeo-slc.git diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/OpenAkbNodeEditor.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/OpenAkbNodeEditor.java index c02f118b6..a04bde084 100644 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/OpenAkbNodeEditor.java +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/OpenAkbNodeEditor.java @@ -1,20 +1,30 @@ package org.argeo.slc.akb.ui.commands; import javax.jcr.Node; +import javax.jcr.Property; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; +import org.argeo.eclipse.ui.dialogs.SingleValue; import org.argeo.jcr.JcrUtils; import org.argeo.slc.akb.AkbException; +import org.argeo.slc.akb.AkbService; import org.argeo.slc.akb.AkbTypes; +import org.argeo.slc.akb.ui.AkbMessages; import org.argeo.slc.akb.ui.AkbUiPlugin; -import org.argeo.slc.akb.ui.editors.AkbConnectorAliasEditor; -import org.argeo.slc.akb.ui.editors.AkbEnvTemplateEditor; +import org.argeo.slc.akb.ui.dialogs.AddItemDialog; import org.argeo.slc.akb.ui.editors.AkbNodeEditorInput; +import org.argeo.slc.akb.ui.editors.ConnectorAliasEditor; +import org.argeo.slc.akb.ui.editors.EnvTemplateEditor; +import org.argeo.slc.akb.ui.editors.JdbcQueryTemplateEditor; +import org.argeo.slc.akb.ui.editors.SshCommandTemplateEditor; +import org.argeo.slc.akb.ui.editors.SshFileTemplateEditor; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.handlers.HandlerUtil; @@ -35,19 +45,28 @@ public class OpenAkbNodeEditor extends AbstractHandler { /* DEPENDENCY INJECTION */ private Repository repository; + private AkbService akbService; public final static String PARAM_NODE_JCR_ID = "param.nodeJcrId"; public final static String PARAM_NODE_TYPE = "param.nodeType"; + public final static String PARAM_NODE_SUBTYPE = "param.nodeSubtype"; + public final static String PARAM_CURR_ENV_JCR_ID = "param.currEnvJcrId"; public final static String PARAM_PARENT_NODE_JCR_ID = "param.parentNodeJcrId"; public Object execute(ExecutionEvent event) throws ExecutionException { String nodeType = event.getParameter(PARAM_NODE_TYPE); + String nodeSubtype = event.getParameter(PARAM_NODE_SUBTYPE); + String currEnvJcrId = event.getParameter(PARAM_CURR_ENV_JCR_ID); String nodeJcrId = event.getParameter(PARAM_NODE_JCR_ID); String parentNodeJcrId = event.getParameter(PARAM_PARENT_NODE_JCR_ID); Session session = null; try { + // caches current Page + IWorkbenchPage currentPage = HandlerUtil.getActiveWorkbenchWindow( + event).getActivePage(); + session = repository.login(); Node node = null; @@ -56,17 +75,25 @@ public class OpenAkbNodeEditor extends AbstractHandler { throw new AkbException( "Define a parent node to create a new node"); else - node = createNewNode(session, nodeType, parentNodeJcrId); + node = createNewNode(session, nodeType, nodeSubtype, + parentNodeJcrId); else node = session.getNodeByIdentifier(nodeJcrId); + // no node has been found or created, return + if (node == null) + return null; + String editorId = getEditorForNode(node); - AkbNodeEditorInput eei = new AkbNodeEditorInput( + // no editor has been found, return silently + if (editorId == null) + return null; + + AkbNodeEditorInput eei = new AkbNodeEditorInput(currEnvJcrId, node.getIdentifier()); - HandlerUtil.getActiveWorkbenchWindow(event).getActivePage() - .openEditor(eei, editorId); + currentPage.openEditor(eei, editorId); } catch (PartInitException pie) { throw new AkbException( "Unexpected PartInitException while opening akb node editor", @@ -81,9 +108,42 @@ public class OpenAkbNodeEditor extends AbstractHandler { } private Node createNewNode(Session session, String nodeType, - String parentNodeJcrId) throws RepositoryException { - Node parentNode = session.getNodeByIdentifier(parentNodeJcrId); - Node node = parentNode.addNode("new", nodeType); + String nodeSubtype, String parentNodeJcrId) + throws RepositoryException { + Node node = null; + + if (AkbTypes.AKB_ITEM.equals(nodeType)) { + Node parNode = session.getNodeByIdentifier(parentNodeJcrId); + AddItemDialog dialog = new AddItemDialog(Display.getDefault() + .getActiveShell(), "Add new item", parNode); + dialog.open(); + node = dialog.getNewNode(); + } else { + String name = SingleValue + .ask("Create " + + AkbMessages + .getLabelForType(nodeSubtype == null ? nodeType + : nodeSubtype), + "Please enter a name for the corresponding " + + AkbMessages + .getLabelForType(nodeSubtype == null ? nodeType + : nodeSubtype)); + if (name == null) + return null; + if (AkbTypes.AKB_ENV_TEMPLATE.equals(nodeType)) { + node = akbService.createAkbTemplate( + session.getNodeByIdentifier(parentNodeJcrId), name); + } else if (AkbTypes.AKB_CONNECTOR_ALIAS.equals(nodeType)) { + // the Jcr ID of the corresponding template must be passed to + // create a new alias + node = session.getNodeByIdentifier(parentNodeJcrId); + akbService.createConnectorAlias(node, name, nodeSubtype); + } else { + Node parentNode = session.getNodeByIdentifier(parentNodeJcrId); + node = parentNode.addNode(name, nodeType); + node.setProperty(Property.JCR_TITLE, name); + } + } // corresponding node is saved but not checked in, in order to ease // cancel actions. session.save(); @@ -92,13 +152,18 @@ public class OpenAkbNodeEditor extends AbstractHandler { private String getEditorForNode(Node node) throws RepositoryException { String editorId = null; - if (node.isNodeType(AkbTypes.AKB_CONNECTOR_ALIAS)) - editorId = AkbConnectorAliasEditor.ID; + editorId = ConnectorAliasEditor.ID; else if (node.isNodeType(AkbTypes.AKB_ENV_TEMPLATE)) - editorId = AkbEnvTemplateEditor.ID; - else - throw new AkbException("Editor is undefined for node " + node); + editorId = EnvTemplateEditor.ID; + else if (node.isNodeType(AkbTypes.AKB_SSH_FILE)) + editorId = SshFileTemplateEditor.ID; + else if (node.isNodeType(AkbTypes.AKB_SSH_COMMAND)) + editorId = SshCommandTemplateEditor.ID; + else if (node.isNodeType(AkbTypes.AKB_JDBC_QUERY)) + editorId = JdbcQueryTemplateEditor.ID; + // else + // throw new AkbException("Editor is undefined for node " + node); return editorId; } @@ -106,4 +171,8 @@ public class OpenAkbNodeEditor extends AbstractHandler { public void setRepository(Repository repository) { this.repository = repository; } + + public void setAkbService(AkbService akbService) { + this.akbService = akbService; + } } \ No newline at end of file