Work on the active environments
authorBruno Sinou <bsinou@argeo.org>
Fri, 15 Nov 2013 13:04:11 +0000 (13:04 +0000)
committerBruno Sinou <bsinou@argeo.org>
Fri, 15 Nov 2013 13:04:11 +0000 (13:04 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@6616 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveEnvsTreeContentProvider.java [new file with mode: 0644]
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveTreeItem.java [new file with mode: 0644]
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/TemplatesTreeContentProvider.java
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbActiveEnvsTreeView.java [new file with mode: 0644]
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbTemplatesTreeView.java
runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbNames.java
runtime/org.argeo.slc.akb/src/main/resources/org/argeo/slc/akb/akb.cnd

diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveEnvsTreeContentProvider.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveEnvsTreeContentProvider.java
new file mode 100644 (file)
index 0000000..ecb5c2d
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.argeo.slc.akb.ui.providers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.argeo.slc.akb.AkbException;
+import org.argeo.slc.akb.AkbNames;
+import org.argeo.slc.akb.AkbTypes;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * Content provider for a tree of active AKB environments. Displays
+ * <CODE>ActiveTreeItem</CODE> to be able to display subtrees of item without
+ * duplicating the information from the corresponding template.
+ */
+public class ActiveEnvsTreeContentProvider implements ITreeContentProvider {
+       // private final static Log log = LogFactory
+       // .getLog(ActiveEnvsTreeContentProvider.class);
+
+       /**
+        * @param parent
+        *            Pass current user home as parameter
+        * 
+        */
+       public Object[] getElements(Object parent) {
+               if (parent instanceof Object[])
+                       return (Object[]) parent;
+               else
+                       return null;
+       }
+
+       public Object getParent(Object child) {
+               return ((ActiveTreeItem) child).getParent();
+       }
+
+       public Object[] getChildren(Object parent) {
+               try {
+                       ActiveTreeItem currItem = (ActiveTreeItem) parent;
+                       Node parNode = currItem.getNode();
+                       Node envNode = currItem.getEnvironment();
+
+                       if (parNode.isNodeType(AkbTypes.AKB_ENV)) {
+                               Session session = parNode.getSession();
+                               if (parNode.hasProperty(AkbNames.AKB_ENV_TEMPLATE_PATH)
+                                               && session.nodeExists(parNode.getProperty(
+                                                               AkbNames.AKB_ENV_TEMPLATE_PATH).getString()))
+                                       parNode = session.getNode(parNode.getProperty(
+                                                       AkbNames.AKB_ENV_TEMPLATE_PATH).getString());
+                               else
+                                       return null;
+                       }
+
+                       NodeIterator ni = parNode.getNodes();
+                       List<ActiveTreeItem> children = new ArrayList<ActiveTreeItem>();
+                       while (ni.hasNext()) {
+                               Node currNode = ni.nextNode();
+                               if (!currNode.isNodeType(AkbTypes.AKB_CONNECTOR_FOLDER)) {
+                                       ActiveTreeItem currChild = new ActiveTreeItem(currItem,
+                                                       currNode, envNode);
+                                       children.add(currChild);
+                               }
+                       }
+                       return children.toArray();
+               } catch (RepositoryException e) {
+                       throw new AkbException("Error while getting children nodes", e);
+               }
+       }
+
+       public boolean hasChildren(Object parent) {
+               try {
+                       ActiveTreeItem currItem = (ActiveTreeItem) parent;
+                       Node parNode = currItem.getNode();
+
+                       if (parNode.isNodeType(AkbTypes.AKB_ENV)) {
+                               Session session = parNode.getSession();
+                               if (parNode.hasProperty(AkbNames.AKB_ENV_TEMPLATE_PATH)
+                                               && session.nodeExists(parNode.getProperty(
+                                                               AkbNames.AKB_ENV_TEMPLATE_PATH).getString()))
+                                       parNode = session.getNode(parNode.getProperty(
+                                                       AkbNames.AKB_ENV_TEMPLATE_PATH).getString());
+                               else
+                                       return false;
+                       }
+
+                       return parNode.hasNodes();
+               } catch (RepositoryException e) {
+                       throw new AkbException("Error while checking children nodes", e);
+               }
+       }
+
+       public void dispose() {
+               // FIXME implement if needed
+       }
+
+       public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+       }
+}
\ No newline at end of file
diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveTreeItem.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveTreeItem.java
new file mode 100644 (file)
index 0000000..efa94b4
--- /dev/null
@@ -0,0 +1,33 @@
+package org.argeo.slc.akb.ui.providers;
+
+import javax.jcr.Node;
+
+/**
+ * Simply wraps a JCR AKB Node to be able to also store corresponding current
+ * environment (active or template)
+ */
+public class ActiveTreeItem {
+
+       private final ActiveTreeItem parent;
+       private final Node akbNode;
+       private final Node akbEnvironment;
+
+       public ActiveTreeItem(ActiveTreeItem parent, Node akbNode,
+                       Node akbEnvironment) {
+               this.parent = parent;
+               this.akbNode = akbNode;
+               this.akbEnvironment = akbEnvironment;
+       }
+
+       public Node getNode() {
+               return akbNode;
+       }
+
+       public Node getEnvironment() {
+               return akbEnvironment;
+       }
+
+       public ActiveTreeItem getParent() {
+               return parent;
+       }
+}
index 14a8a63d008b89cec59b22d0c63ffa84af9daca4..9fe2df1ccccddcf63da447090fa14c5bf7e0afcd 100644 (file)
@@ -29,15 +29,13 @@ import org.argeo.slc.akb.AkbTypes;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.Viewer;
 
-/** Basic content provider for a tree of AKB environment templates */
+/** Basic content provider for a tree of active AKB environments */
 public class TemplatesTreeContentProvider implements ITreeContentProvider {
        private final static Log log = LogFactory
                        .getLog(TemplatesTreeContentProvider.class);
 
        /**
         * @param parent
-        *            Pass current user home as parameter
-        * 
         */
        public Object[] getElements(Object parent) {
                if (parent instanceof Object[])
@@ -50,7 +48,7 @@ public class TemplatesTreeContentProvider implements ITreeContentProvider {
                try {
                        Node node = (Node) child;
 
-                       // Manual sanity check to avoid exception when tryin to refresh an
+                       // Manual sanity check to avoid exception when trying to refresh an
                        // element that displays a node which has been removed
                        try {
                                String id = node.getIdentifier();
@@ -102,4 +100,7 @@ public class TemplatesTreeContentProvider implements ITreeContentProvider {
 
        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        }
+       
+       
+       
 }
\ No newline at end of file
diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbActiveEnvsTreeView.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbActiveEnvsTreeView.java
new file mode 100644 (file)
index 0000000..281f280
--- /dev/null
@@ -0,0 +1,411 @@
+/*\r
+ * Copyright (C) 2007-2012 Argeo GmbH\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *         http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+package org.argeo.slc.akb.ui.views;\r
+\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import javax.jcr.Node;\r
+import javax.jcr.NodeIterator;\r
+import javax.jcr.Repository;\r
+import javax.jcr.RepositoryException;\r
+import javax.jcr.Session;\r
+import javax.jcr.observation.Event;\r
+\r
+import org.argeo.eclipse.ui.jcr.AsyncUiEventListener;\r
+import org.argeo.eclipse.ui.utils.CommandUtils;\r
+import org.argeo.jcr.JcrUtils;\r
+import org.argeo.slc.akb.AkbException;\r
+import org.argeo.slc.akb.AkbNames;\r
+import org.argeo.slc.akb.AkbService;\r
+import org.argeo.slc.akb.AkbTypes;\r
+import org.argeo.slc.akb.ui.AkbUiPlugin;\r
+import org.argeo.slc.akb.ui.AkbUiUtils;\r
+import org.argeo.slc.akb.ui.commands.DeleteAkbNodes;\r
+import org.argeo.slc.akb.ui.commands.OpenAkbNodeEditor;\r
+import org.argeo.slc.akb.ui.providers.AkbTreeLabelProvider;\r
+import org.argeo.slc.akb.ui.providers.TemplatesTreeContentProvider;\r
+import org.argeo.slc.akb.ui.utils.Refreshable;\r
+import org.argeo.slc.akb.utils.AkbJcrUtils;\r
+import org.eclipse.jface.action.IContributionItem;\r
+import org.eclipse.jface.action.IMenuListener;\r
+import org.eclipse.jface.action.IMenuManager;\r
+import org.eclipse.jface.action.MenuManager;\r
+import org.eclipse.jface.viewers.DoubleClickEvent;\r
+import org.eclipse.jface.viewers.IDoubleClickListener;\r
+import org.eclipse.jface.viewers.IStructuredSelection;\r
+import org.eclipse.jface.viewers.TreeViewer;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.layout.GridData;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.Display;\r
+import org.eclipse.swt.widgets.Menu;\r
+import org.eclipse.ui.IWorkbenchWindow;\r
+import org.eclipse.ui.part.ViewPart;\r
+import org.eclipse.ui.services.IServiceLocator;\r
+\r
+/** AKB Active environment tree view. */\r
+public class AkbActiveEnvsTreeView extends ViewPart implements Refreshable {\r
+\r
+       public final static String ID = AkbUiPlugin.PLUGIN_ID\r
+                       + ".akbActiveEnvsTreeView";\r
+\r
+       /* DEPENDENCY INJECTION */\r
+       private Session session;\r
+       private AkbService akbService;\r
+\r
+       // This page widgets\r
+       private TreeViewer envTreeViewer;\r
+\r
+       // Usefull business objects\r
+       private Node activeEnvsParentNode;\r
+\r
+       private void initialize() {\r
+               try {\r
+                       activeEnvsParentNode = session\r
+                                       .getNode(AkbNames.AKB_ENVIRONMENTS_BASE_PATH);\r
+               } catch (RepositoryException e) {\r
+                       throw new AkbException("unable to initialize AKB Browser view", e);\r
+               }\r
+       }\r
+\r
+       @Override\r
+       public void createPartControl(Composite parent) {\r
+               initialize();\r
+               envTreeViewer = createTreeViewer(parent);\r
+               envTreeViewer.setInput(initializeTree());\r
+       }\r
+\r
+       // The main tree viewer\r
+       protected TreeViewer createTreeViewer(Composite parent) {\r
+               parent.setLayout(AkbUiUtils.gridLayoutNoBorder());\r
+               int style = SWT.BORDER | SWT.MULTI;\r
+\r
+               TreeViewer viewer = new TreeViewer(parent, style);\r
+               viewer.getTree().setLayoutData(\r
+                               new GridData(SWT.FILL, SWT.FILL, true, true));\r
+\r
+               viewer.setContentProvider(new TemplatesTreeContentProvider());\r
+               viewer.setLabelProvider(new AkbTreeLabelProvider());\r
+               viewer.addDoubleClickListener(new ViewDoubleClickListener());\r
+\r
+               getSite().setSelectionProvider(viewer);\r
+\r
+               // context menu\r
+               MenuManager menuManager = new MenuManager();\r
+               Menu menu = menuManager.createContextMenu(viewer.getTree());\r
+               menuManager.addMenuListener(new IMenuListener() {\r
+                       public void menuAboutToShow(IMenuManager manager) {\r
+                               contextMenuAboutToShow(manager);\r
+                       }\r
+               });\r
+               viewer.getTree().setMenu(menu);\r
+               menuManager.setRemoveAllWhenShown(true);\r
+               getSite().registerContextMenu(menuManager, viewer);\r
+\r
+               return viewer;\r
+       }\r
+\r
+       private Node[] initializeTree() {\r
+               try {\r
+                       NodeIterator ni = activeEnvsParentNode.getNodes();\r
+                       List<Node> envs = new ArrayList<Node>();\r
+                       while (ni.hasNext()) {\r
+                               Node currNode = ni.nextNode();\r
+                               if (currNode.isNodeType(AkbTypes.AKB_ENV))\r
+                                       envs.add(currNode);\r
+                       }\r
+                       Node[] envArr = envs.toArray(new Node[envs.size()]);\r
+                       return envArr;\r
+               } catch (RepositoryException re) {\r
+                       throw new AkbException("Error while initializing the "\r
+                                       + "tree of active environments.", re);\r
+               }\r
+       }\r
+\r
+       //////////////////////\r
+       /// LIFE CYCLE\r
+       \r
+       @Override\r
+       public void forceRefresh(Object object) {\r
+               envTreeViewer.setInput(initializeTree());\r
+       }\r
+       \r
+       @Override\r
+       public void setFocus() {\r
+       }\r
+\r
+       @Override\r
+       public void dispose() {\r
+               JcrUtils.logoutQuietly(session);\r
+               super.dispose();\r
+       }\r
+       \r
+       // ///////////////////////////\r
+       // CONTEXT MENU MANAGEMENT\r
+       /**\r
+        * Defines the commands that will pop up in the context menu.\r
+        **/\r
+       protected void contextMenuAboutToShow(IMenuManager menuManager) {\r
+               IWorkbenchWindow window = AkbUiPlugin.getDefault().getWorkbench()\r
+                               .getActiveWorkbenchWindow();\r
+               try {\r
+                       // Build conditions\r
+                       IStructuredSelection selection = (IStructuredSelection) envTreeViewer\r
+                                       .getSelection();\r
+\r
+                       Node selected = (Node) selection.getFirstElement();\r
+                       Node currEnv = null;\r
+\r
+                       boolean hasSelection = selected != null;\r
+\r
+                       if (hasSelection)\r
+                               currEnv = AkbJcrUtils.getCurrentTemplate(selected);\r
+\r
+                       boolean isTemplate = hasSelection ? selected\r
+                                       .isNodeType(AkbTypes.AKB_ENV_TEMPLATE) : false;\r
+                       boolean isParentItemsFolder = hasSelection ? selected\r
+                                       .isNodeType(AkbTypes.AKB_ITEM_FOLDER) : false;\r
+                       // boolean isParentConnectorsFolder = hasSelection ? selected\r
+                       // .isNodeType(AkbTypes.AKB_CONNECTOR_FOLDER) : false;\r
+                       boolean isDeletable = hasSelection ? true : false;\r
+\r
+                       // Add Connector Alias\r
+                       Map<String, String> params = new HashMap<String, String>();\r
+                       if (hasSelection && isTemplate) {\r
+                               params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID,\r
+                                               selected.getIdentifier());\r
+                               params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID,\r
+                                               currEnv.getIdentifier());\r
+                       }\r
+                       params.put(OpenAkbNodeEditor.PARAM_NODE_TYPE,\r
+                                       AkbTypes.AKB_CONNECTOR_ALIAS);\r
+\r
+                       // Connector Alias submenu\r
+                       refreshAliasesSubmenu(menuManager, window, "menu.aliasesSubmenu",\r
+                                       "Add Connector Alias", isTemplate, params);\r
+\r
+                       // Item Submenu\r
+                       params = new HashMap<String, String>();\r
+                       if (hasSelection) {\r
+                               params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID,\r
+                                               selected.getIdentifier());\r
+                               params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID,\r
+                                               currEnv.getIdentifier());\r
+                       }\r
+                       refreshItemsSubmenu(menuManager, window, "menu.itemsSubmenu",\r
+                                       "Add Item", isParentItemsFolder || isTemplate, params);\r
+\r
+                       // Add Item Folder\r
+                       params = new HashMap<String, String>();\r
+                       if (hasSelection) {\r
+                               params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID,\r
+                                               selected.getIdentifier());\r
+                               params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID,\r
+                                               currEnv.getIdentifier());\r
+                       }\r
+                       params.put(OpenAkbNodeEditor.PARAM_NODE_TYPE,\r
+                                       AkbTypes.AKB_ITEM_FOLDER);\r
+\r
+                       AkbUiUtils.refreshParameterizedCommand(menuManager, window,\r
+                                       "cmd.addItemFolder", OpenAkbNodeEditor.ID,\r
+                                       "Add item folder", null, isParentItemsFolder || isTemplate,\r
+                                       params);\r
+\r
+                       // Delete Item\r
+                       params = new HashMap<String, String>();\r
+                       if (hasSelection)\r
+                               params.put(DeleteAkbNodes.PARAM_NODE_JCR_ID,\r
+                                               selected.getIdentifier());\r
+                       AkbUiUtils.refreshParameterizedCommand(menuManager, window,\r
+                                       "cmd.deleteItem", DeleteAkbNodes.ID,\r
+                                       "Delete selected item(s)", null, isDeletable, params);\r
+\r
+                       // create template\r
+                       params = new HashMap<String, String>();\r
+                       params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID,\r
+                                       activeEnvsParentNode.getIdentifier());\r
+                       params.put(OpenAkbNodeEditor.PARAM_NODE_TYPE,\r
+                                       AkbTypes.AKB_ENV_TEMPLATE);\r
+                       AkbUiUtils.refreshParameterizedCommand(menuManager, window,\r
+                                       "cmd.createTemplate", OpenAkbNodeEditor.ID,\r
+                                       "Create new template...", null,\r
+                                       !hasSelection || isTemplate, params);\r
+\r
+               } catch (RepositoryException re) {\r
+                       throw new AkbException("Error while refreshing context menu", re);\r
+               }\r
+       }\r
+\r
+       /**\r
+        * \r
+        * refreshes submenu with various connector types\r
+        * \r
+        * @param menuManager\r
+        * @param locator\r
+        * @param itemId\r
+        * @param label\r
+        * @param isVisible\r
+        * @param params\r
+        */\r
+       private void refreshItemsSubmenu(IMenuManager menuManager,\r
+                       IServiceLocator locator, String itemId, String label,\r
+                       boolean isVisible, Map<String, String> params) {\r
+\r
+               // clean\r
+               IContributionItem ici = menuManager.find(itemId);\r
+               if (ici != null)\r
+                       menuManager.remove(ici);\r
+\r
+               MenuManager subMenu = new MenuManager(label, itemId);\r
+\r
+               // JDBC Query\r
+               Map<String, String> tmpParams = new HashMap<String, String>();\r
+               tmpParams.putAll(params);\r
+               tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_TYPE,\r
+                               AkbTypes.AKB_JDBC_QUERY);\r
+               String currItemId = "cmd.createJDBCQuery";\r
+               IContributionItem currItem = subMenu.find(currItemId);\r
+               if (currItem != null)\r
+                       subMenu.remove(currItem);\r
+               subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator,\r
+                               currItemId, OpenAkbNodeEditor.ID, "JDBC", null, tmpParams));\r
+\r
+               // SSH COMMAND\r
+               tmpParams = new HashMap<String, String>();\r
+               tmpParams.putAll(params);\r
+               tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_TYPE,\r
+                               AkbTypes.AKB_SSH_COMMAND);\r
+               currItemId = "cmd.createSSHCommand";\r
+               currItem = subMenu.find(currItemId);\r
+               if (currItem != null)\r
+                       subMenu.remove(currItem);\r
+               subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator,\r
+                               currItemId, OpenAkbNodeEditor.ID, "SSH Command", null,\r
+                               tmpParams));\r
+\r
+               // SSH FILE\r
+               tmpParams = new HashMap<String, String>();\r
+               tmpParams.putAll(params);\r
+               tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_TYPE, AkbTypes.AKB_SSH_FILE);\r
+               currItemId = "cmd.createSSHFile";\r
+               currItem = subMenu.find(currItemId);\r
+               if (currItem != null)\r
+                       subMenu.remove(currItem);\r
+               subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator,\r
+                               currItemId, OpenAkbNodeEditor.ID, "SSH File", null, tmpParams));\r
+\r
+               // refresh\r
+               menuManager.add(subMenu);\r
+               subMenu.setVisible(isVisible);\r
+       }\r
+\r
+       /**\r
+        * \r
+        * refreshes submenu with various connector types\r
+        * \r
+        * @param menuManager\r
+        * @param locator\r
+        * @param itemId\r
+        * @param label\r
+        * @param isVisible\r
+        * @param params\r
+        */\r
+       private void refreshAliasesSubmenu(IMenuManager menuManager,\r
+                       IServiceLocator locator, String itemId, String label,\r
+                       boolean isVisible, Map<String, String> params) {\r
+\r
+               // clean\r
+               IContributionItem ici = menuManager.find(itemId);\r
+               if (ici != null)\r
+                       menuManager.remove(ici);\r
+\r
+               // TODO use dynamic contribution to dynamically retrieve specific\r
+               // connector types\r
+               // CompoundContributionItem comConI = new MyCompoundCI(menuManager,\r
+               // locator, itemId);\r
+               MenuManager subMenu = new MenuManager(label, itemId);\r
+\r
+               // JDBC\r
+               Map<String, String> tmpParams = new HashMap<String, String>();\r
+               tmpParams.putAll(params);\r
+               tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_SUBTYPE,\r
+                               AkbTypes.AKB_JDBC_CONNECTOR);\r
+               String currItemId = "cmd.createJDBCAlias";\r
+               IContributionItem currItem = subMenu.find(currItemId);\r
+               if (currItem != null)\r
+                       subMenu.remove(currItem);\r
+               subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator,\r
+                               currItemId, OpenAkbNodeEditor.ID, "JDBC", null, tmpParams));\r
+\r
+               // SSH\r
+               tmpParams = new HashMap<String, String>();\r
+               tmpParams.putAll(params);\r
+               tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_SUBTYPE,\r
+                               AkbTypes.AKB_SSH_CONNECTOR);\r
+               currItemId = "cmd.createSSHAlias";\r
+               currItem = subMenu.find(currItemId);\r
+               if (currItem != null)\r
+                       subMenu.remove(currItem);\r
+               subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator,\r
+                               currItemId, OpenAkbNodeEditor.ID, "SSH", null, tmpParams));\r
+\r
+               // refresh\r
+               menuManager.add(subMenu);\r
+               subMenu.setVisible(isVisible);\r
+       }\r
+\r
+       /* INNER CLASSES */\r
+       class ViewDoubleClickListener implements IDoubleClickListener {\r
+               public void doubleClick(DoubleClickEvent evt) {\r
+                       Object obj = ((IStructuredSelection) evt.getSelection())\r
+                                       .getFirstElement();\r
+                       try {\r
+                               if (obj instanceof Node) {\r
+                                       Node node = (Node) obj;\r
+                                       Node currEnv = AkbJcrUtils.getCurrentTemplate(node);\r
+\r
+                                       // Add Connector Alias\r
+                                       Map<String, String> params = new HashMap<String, String>();\r
+                                       params.put(OpenAkbNodeEditor.PARAM_NODE_JCR_ID,\r
+                                                       node.getIdentifier());\r
+                                       params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID,\r
+                                                       currEnv.getIdentifier());\r
+\r
+                                       CommandUtils.callCommand(OpenAkbNodeEditor.ID, params);\r
+                               }\r
+                       } catch (RepositoryException e) {\r
+                               throw new AkbException("Cannot open " + obj, e);\r
+                       }\r
+               }\r
+       }\r
+\r
+       /* DEPENDENCY INJECTION */\r
+       public void setRepository(Repository repository) {\r
+               try {\r
+                       session = repository.login();\r
+               } catch (RepositoryException e) {\r
+                       throw new AkbException("unable to log in for " + ID + " view");\r
+               }\r
+       }\r
+\r
+       public void setAkbService(AkbService akbService) {\r
+               this.akbService = akbService;\r
+\r
+       }\r
+}
\ No newline at end of file
index 0930701e7b9f656516e3a9dd8ca53be5311cbe47..f12a418b584a0972354f49194afd9582a848ba4a 100644 (file)
@@ -61,7 +61,7 @@ import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.part.ViewPart;\r
 import org.eclipse.ui.services.IServiceLocator;\r
 \r
-/** SLC generic JCR Result tree view. */\r
+/** AKB template tree view. */\r
 public class AkbTemplatesTreeView extends ViewPart implements Refreshable {\r
        // private final static Log log =\r
        // LogFactory.getLog(AkbTemplatesTreeView.class);\r
@@ -99,8 +99,8 @@ public class AkbTemplatesTreeView extends ViewPart implements Refreshable {
        public void createPartControl(Composite parent) {\r
                initialize();\r
 \r
-               envTreeViewer = createResultsTreeViewer(parent);\r
-               envTreeViewer.setInput(initializeResultTree());\r
+               envTreeViewer = createTreeViewer(parent);\r
+               envTreeViewer.setInput(initializeTree());\r
 \r
                // parent.setLayout(new FillLayout());\r
                // // Main layout\r
@@ -137,7 +137,7 @@ public class AkbTemplatesTreeView extends ViewPart implements Refreshable {
        // }\r
 \r
        // The main tree viewer\r
-       protected TreeViewer createResultsTreeViewer(Composite parent) {\r
+       protected TreeViewer createTreeViewer(Composite parent) {\r
                parent.setLayout(AkbUiUtils.gridLayoutNoBorder());\r
                int style = SWT.BORDER | SWT.MULTI;\r
 \r
@@ -199,7 +199,7 @@ public class AkbTemplatesTreeView extends ViewPart implements Refreshable {
        public void setFocus() {\r
        }\r
 \r
-       private Node[] initializeResultTree() {\r
+       private Node[] initializeTree() {\r
                try {\r
                        NodeIterator ni = templatesParentNode.getNodes();\r
                        List<Node> templates = new ArrayList<Node>();\r
@@ -218,7 +218,7 @@ public class AkbTemplatesTreeView extends ViewPart implements Refreshable {
 \r
        @Override\r
        public void forceRefresh(Object object) {\r
-               envTreeViewer.setInput(initializeResultTree());\r
+               envTreeViewer.setInput(initializeTree());\r
        }\r
 \r
        // ///////////////////////////\r
@@ -492,7 +492,7 @@ public class AkbTemplatesTreeView extends ViewPart implements Refreshable {
 \r
                        Object[] visibles = envTreeViewer.getExpandedElements();\r
                        if (fullRefresh)\r
-                               envTreeViewer.setInput(initializeResultTree());\r
+                               envTreeViewer.setInput(initializeTree());\r
                        else\r
                                envTreeViewer.refresh();\r
 \r
index db52ca7bc826d4986f365e7913fdda23f3427188..79f622892c790db5395052f7ee57b783a9cb7e61 100644 (file)
@@ -14,6 +14,7 @@ public interface AkbNames {
                        + "akb:environments";
 
        /* ENVIRONMENT PROPERTIES */
+       public final static String AKB_ENV_TEMPLATE_PATH = "akb:envTemplatePath";
 
        /* CONNECTOR PROPERTIES */
        public final static String AKB_CONNECTOR_URL = "akb:connectorUrl";
index cf1960d64ddd2a1706fa18660c66cfd4c2f8326d..773fac49bf819a143fa67ac1e01b69b304241639 100644 (file)
@@ -6,7 +6,6 @@
 [argeo:note] > mix:title, mix:versionable, mix:created, mix:lastModified
 mixin
 
-
 //
 // TEMPLATES AND ENVIRONMENTS 
 // 
@@ -16,7 +15,8 @@ mixin
 
 // An environment template (1..1 relationship) applied to a real environment
 [akb:env] > nt:unstructured, mix:title
-
+// the path to the corresponding template
+- akb:envTemplatePath (STRING)
 
 //
 // CONNECTORS
@@ -46,11 +46,8 @@ mixin
 
 [akb:jdbcConnector] > akb:connector 
 
-
 [akb:jcrConnector] > akb:connector  
 
-
-    
 //
 // GENERIC ITEM
 //