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=cdd7dd5bdc1fa99f5c240f4a939aab778f329599;hb=0df0d1a404a545baf2fe1e90d67f8235f6c6b47b;hp=46de0c3d16377fc2fab8478e16f9581e12b18128;hpb=93ad856792ccb84b534b2226e602c6b652799933;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 46de0c3d1..cdd7dd5bd 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,6 +1,7 @@ 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; @@ -10,13 +11,19 @@ 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; @@ -42,11 +49,15 @@ public class OpenAkbNodeEditor extends AbstractHandler { 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); @@ -64,7 +75,8 @@ 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); @@ -74,11 +86,11 @@ public class OpenAkbNodeEditor extends AbstractHandler { String editorId = getEditorForNode(node); - // no editor has been found, return + // no editor has been found, return silently if (editorId == null) return null; - AkbNodeEditorInput eei = new AkbNodeEditorInput( + AkbNodeEditorInput eei = new AkbNodeEditorInput(currEnvJcrId, node.getIdentifier()); currentPage.openEditor(eei, editorId); @@ -96,19 +108,41 @@ public class OpenAkbNodeEditor extends AbstractHandler { } private Node createNewNode(Session session, String nodeType, - String parentNodeJcrId) throws RepositoryException { + String nodeSubtype, String parentNodeJcrId) + throws RepositoryException { Node node = null; - if (AkbTypes.AKB_ENV_TEMPLATE.equals(nodeType)) { - String name = SingleValue.ask("Template name", - "Please give a name to the template to create"); - if (name != 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 - return null; - } else { - Node parentNode = session.getNodeByIdentifier(parentNodeJcrId); - node = parentNode.addNode("new", nodeType); + } 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. @@ -119,11 +153,17 @@ 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; - else if (node.isNodeType(AkbTypes.AKB_ENV_TEMPLATE)) - editorId = AkbEnvTemplateEditor.ID; - else - throw new AkbException("Editor is undefined for node " + node); + editorId = ConnectorAliasEditor.ID; + else if (node.isNodeType(AkbTypes.AKB_ENV_TEMPLATE) || node.isNodeType(AkbTypes.AKB_ENV)) + 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; }