From 83ab33f078ffc1e8d8bd8a34743090eff5d3b051 Mon Sep 17 00:00:00 2001 From: Bruno Sinou Date: Fri, 15 Nov 2013 13:04:11 +0000 Subject: [PATCH] Work on the active environments git-svn-id: https://svn.argeo.org/slc/trunk@6616 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../ActiveEnvsTreeContentProvider.java | 118 +++++ .../slc/akb/ui/providers/ActiveTreeItem.java | 33 ++ .../TemplatesTreeContentProvider.java | 9 +- .../akb/ui/views/AkbActiveEnvsTreeView.java | 411 ++++++++++++++++++ .../akb/ui/views/AkbTemplatesTreeView.java | 14 +- .../main/java/org/argeo/slc/akb/AkbNames.java | 1 + .../main/resources/org/argeo/slc/akb/akb.cnd | 7 +- 7 files changed, 577 insertions(+), 16 deletions(-) create mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveEnvsTreeContentProvider.java create mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveTreeItem.java create mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbActiveEnvsTreeView.java 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 index 000000000..ecb5c2d58 --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveEnvsTreeContentProvider.java @@ -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 + * ActiveTreeItem 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 children = new ArrayList(); + 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 index 000000000..efa94b4a0 --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/ActiveTreeItem.java @@ -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; + } +} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/TemplatesTreeContentProvider.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/TemplatesTreeContentProvider.java index 14a8a63d0..9fe2df1cc 100644 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/TemplatesTreeContentProvider.java +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/providers/TemplatesTreeContentProvider.java @@ -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 index 000000000..281f280b3 --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbActiveEnvsTreeView.java @@ -0,0 +1,411 @@ +/* + * 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.views; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.jcr.Node; +import javax.jcr.NodeIterator; +import javax.jcr.Repository; +import javax.jcr.RepositoryException; +import javax.jcr.Session; +import javax.jcr.observation.Event; + +import org.argeo.eclipse.ui.jcr.AsyncUiEventListener; +import org.argeo.eclipse.ui.utils.CommandUtils; +import org.argeo.jcr.JcrUtils; +import org.argeo.slc.akb.AkbException; +import org.argeo.slc.akb.AkbNames; +import org.argeo.slc.akb.AkbService; +import org.argeo.slc.akb.AkbTypes; +import org.argeo.slc.akb.ui.AkbUiPlugin; +import org.argeo.slc.akb.ui.AkbUiUtils; +import org.argeo.slc.akb.ui.commands.DeleteAkbNodes; +import org.argeo.slc.akb.ui.commands.OpenAkbNodeEditor; +import org.argeo.slc.akb.ui.providers.AkbTreeLabelProvider; +import org.argeo.slc.akb.ui.providers.TemplatesTreeContentProvider; +import org.argeo.slc.akb.ui.utils.Refreshable; +import org.argeo.slc.akb.utils.AkbJcrUtils; +import org.eclipse.jface.action.IContributionItem; +import org.eclipse.jface.action.IMenuListener; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.viewers.DoubleClickEvent; +import org.eclipse.jface.viewers.IDoubleClickListener; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.part.ViewPart; +import org.eclipse.ui.services.IServiceLocator; + +/** AKB Active environment tree view. */ +public class AkbActiveEnvsTreeView extends ViewPart implements Refreshable { + + public final static String ID = AkbUiPlugin.PLUGIN_ID + + ".akbActiveEnvsTreeView"; + + /* DEPENDENCY INJECTION */ + private Session session; + private AkbService akbService; + + // This page widgets + private TreeViewer envTreeViewer; + + // Usefull business objects + private Node activeEnvsParentNode; + + private void initialize() { + try { + activeEnvsParentNode = session + .getNode(AkbNames.AKB_ENVIRONMENTS_BASE_PATH); + } catch (RepositoryException e) { + throw new AkbException("unable to initialize AKB Browser view", e); + } + } + + @Override + public void createPartControl(Composite parent) { + initialize(); + envTreeViewer = createTreeViewer(parent); + envTreeViewer.setInput(initializeTree()); + } + + // The main tree viewer + protected TreeViewer createTreeViewer(Composite parent) { + parent.setLayout(AkbUiUtils.gridLayoutNoBorder()); + int style = SWT.BORDER | SWT.MULTI; + + TreeViewer viewer = new TreeViewer(parent, style); + viewer.getTree().setLayoutData( + new GridData(SWT.FILL, SWT.FILL, true, true)); + + viewer.setContentProvider(new TemplatesTreeContentProvider()); + viewer.setLabelProvider(new AkbTreeLabelProvider()); + viewer.addDoubleClickListener(new ViewDoubleClickListener()); + + getSite().setSelectionProvider(viewer); + + // context menu + MenuManager menuManager = new MenuManager(); + Menu menu = menuManager.createContextMenu(viewer.getTree()); + menuManager.addMenuListener(new IMenuListener() { + public void menuAboutToShow(IMenuManager manager) { + contextMenuAboutToShow(manager); + } + }); + viewer.getTree().setMenu(menu); + menuManager.setRemoveAllWhenShown(true); + getSite().registerContextMenu(menuManager, viewer); + + return viewer; + } + + private Node[] initializeTree() { + try { + NodeIterator ni = activeEnvsParentNode.getNodes(); + List envs = new ArrayList(); + while (ni.hasNext()) { + Node currNode = ni.nextNode(); + if (currNode.isNodeType(AkbTypes.AKB_ENV)) + envs.add(currNode); + } + Node[] envArr = envs.toArray(new Node[envs.size()]); + return envArr; + } catch (RepositoryException re) { + throw new AkbException("Error while initializing the " + + "tree of active environments.", re); + } + } + + ////////////////////// + /// LIFE CYCLE + + @Override + public void forceRefresh(Object object) { + envTreeViewer.setInput(initializeTree()); + } + + @Override + public void setFocus() { + } + + @Override + public void dispose() { + JcrUtils.logoutQuietly(session); + super.dispose(); + } + + // /////////////////////////// + // CONTEXT MENU MANAGEMENT + /** + * Defines the commands that will pop up in the context menu. + **/ + protected void contextMenuAboutToShow(IMenuManager menuManager) { + IWorkbenchWindow window = AkbUiPlugin.getDefault().getWorkbench() + .getActiveWorkbenchWindow(); + try { + // Build conditions + IStructuredSelection selection = (IStructuredSelection) envTreeViewer + .getSelection(); + + Node selected = (Node) selection.getFirstElement(); + Node currEnv = null; + + boolean hasSelection = selected != null; + + if (hasSelection) + currEnv = AkbJcrUtils.getCurrentTemplate(selected); + + boolean isTemplate = hasSelection ? selected + .isNodeType(AkbTypes.AKB_ENV_TEMPLATE) : false; + boolean isParentItemsFolder = hasSelection ? selected + .isNodeType(AkbTypes.AKB_ITEM_FOLDER) : false; + // boolean isParentConnectorsFolder = hasSelection ? selected + // .isNodeType(AkbTypes.AKB_CONNECTOR_FOLDER) : false; + boolean isDeletable = hasSelection ? true : false; + + // Add Connector Alias + Map params = new HashMap(); + if (hasSelection && isTemplate) { + params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID, + selected.getIdentifier()); + params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID, + currEnv.getIdentifier()); + } + params.put(OpenAkbNodeEditor.PARAM_NODE_TYPE, + AkbTypes.AKB_CONNECTOR_ALIAS); + + // Connector Alias submenu + refreshAliasesSubmenu(menuManager, window, "menu.aliasesSubmenu", + "Add Connector Alias", isTemplate, params); + + // Item Submenu + params = new HashMap(); + if (hasSelection) { + params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID, + selected.getIdentifier()); + params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID, + currEnv.getIdentifier()); + } + refreshItemsSubmenu(menuManager, window, "menu.itemsSubmenu", + "Add Item", isParentItemsFolder || isTemplate, params); + + // Add Item Folder + params = new HashMap(); + if (hasSelection) { + params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID, + selected.getIdentifier()); + params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID, + currEnv.getIdentifier()); + } + params.put(OpenAkbNodeEditor.PARAM_NODE_TYPE, + AkbTypes.AKB_ITEM_FOLDER); + + AkbUiUtils.refreshParameterizedCommand(menuManager, window, + "cmd.addItemFolder", OpenAkbNodeEditor.ID, + "Add item folder", null, isParentItemsFolder || isTemplate, + params); + + // Delete Item + params = new HashMap(); + if (hasSelection) + params.put(DeleteAkbNodes.PARAM_NODE_JCR_ID, + selected.getIdentifier()); + AkbUiUtils.refreshParameterizedCommand(menuManager, window, + "cmd.deleteItem", DeleteAkbNodes.ID, + "Delete selected item(s)", null, isDeletable, params); + + // create template + params = new HashMap(); + params.put(OpenAkbNodeEditor.PARAM_PARENT_NODE_JCR_ID, + activeEnvsParentNode.getIdentifier()); + params.put(OpenAkbNodeEditor.PARAM_NODE_TYPE, + AkbTypes.AKB_ENV_TEMPLATE); + AkbUiUtils.refreshParameterizedCommand(menuManager, window, + "cmd.createTemplate", OpenAkbNodeEditor.ID, + "Create new template...", null, + !hasSelection || isTemplate, params); + + } catch (RepositoryException re) { + throw new AkbException("Error while refreshing context menu", re); + } + } + + /** + * + * refreshes submenu with various connector types + * + * @param menuManager + * @param locator + * @param itemId + * @param label + * @param isVisible + * @param params + */ + private void refreshItemsSubmenu(IMenuManager menuManager, + IServiceLocator locator, String itemId, String label, + boolean isVisible, Map params) { + + // clean + IContributionItem ici = menuManager.find(itemId); + if (ici != null) + menuManager.remove(ici); + + MenuManager subMenu = new MenuManager(label, itemId); + + // JDBC Query + Map tmpParams = new HashMap(); + tmpParams.putAll(params); + tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_TYPE, + AkbTypes.AKB_JDBC_QUERY); + String currItemId = "cmd.createJDBCQuery"; + IContributionItem currItem = subMenu.find(currItemId); + if (currItem != null) + subMenu.remove(currItem); + subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator, + currItemId, OpenAkbNodeEditor.ID, "JDBC", null, tmpParams)); + + // SSH COMMAND + tmpParams = new HashMap(); + tmpParams.putAll(params); + tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_TYPE, + AkbTypes.AKB_SSH_COMMAND); + currItemId = "cmd.createSSHCommand"; + currItem = subMenu.find(currItemId); + if (currItem != null) + subMenu.remove(currItem); + subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator, + currItemId, OpenAkbNodeEditor.ID, "SSH Command", null, + tmpParams)); + + // SSH FILE + tmpParams = new HashMap(); + tmpParams.putAll(params); + tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_TYPE, AkbTypes.AKB_SSH_FILE); + currItemId = "cmd.createSSHFile"; + currItem = subMenu.find(currItemId); + if (currItem != null) + subMenu.remove(currItem); + subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator, + currItemId, OpenAkbNodeEditor.ID, "SSH File", null, tmpParams)); + + // refresh + menuManager.add(subMenu); + subMenu.setVisible(isVisible); + } + + /** + * + * refreshes submenu with various connector types + * + * @param menuManager + * @param locator + * @param itemId + * @param label + * @param isVisible + * @param params + */ + private void refreshAliasesSubmenu(IMenuManager menuManager, + IServiceLocator locator, String itemId, String label, + boolean isVisible, Map params) { + + // clean + IContributionItem ici = menuManager.find(itemId); + if (ici != null) + menuManager.remove(ici); + + // TODO use dynamic contribution to dynamically retrieve specific + // connector types + // CompoundContributionItem comConI = new MyCompoundCI(menuManager, + // locator, itemId); + MenuManager subMenu = new MenuManager(label, itemId); + + // JDBC + Map tmpParams = new HashMap(); + tmpParams.putAll(params); + tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_SUBTYPE, + AkbTypes.AKB_JDBC_CONNECTOR); + String currItemId = "cmd.createJDBCAlias"; + IContributionItem currItem = subMenu.find(currItemId); + if (currItem != null) + subMenu.remove(currItem); + subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator, + currItemId, OpenAkbNodeEditor.ID, "JDBC", null, tmpParams)); + + // SSH + tmpParams = new HashMap(); + tmpParams.putAll(params); + tmpParams.put(OpenAkbNodeEditor.PARAM_NODE_SUBTYPE, + AkbTypes.AKB_SSH_CONNECTOR); + currItemId = "cmd.createSSHAlias"; + currItem = subMenu.find(currItemId); + if (currItem != null) + subMenu.remove(currItem); + subMenu.add(AkbUiUtils.createContributionItem(menuManager, locator, + currItemId, OpenAkbNodeEditor.ID, "SSH", null, tmpParams)); + + // refresh + menuManager.add(subMenu); + subMenu.setVisible(isVisible); + } + + /* INNER CLASSES */ + class ViewDoubleClickListener implements IDoubleClickListener { + public void doubleClick(DoubleClickEvent evt) { + Object obj = ((IStructuredSelection) evt.getSelection()) + .getFirstElement(); + try { + if (obj instanceof Node) { + Node node = (Node) obj; + Node currEnv = AkbJcrUtils.getCurrentTemplate(node); + + // Add Connector Alias + Map params = new HashMap(); + params.put(OpenAkbNodeEditor.PARAM_NODE_JCR_ID, + node.getIdentifier()); + params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID, + currEnv.getIdentifier()); + + CommandUtils.callCommand(OpenAkbNodeEditor.ID, params); + } + } catch (RepositoryException e) { + throw new AkbException("Cannot open " + obj, e); + } + } + } + + /* DEPENDENCY INJECTION */ + public void setRepository(Repository repository) { + try { + session = repository.login(); + } catch (RepositoryException e) { + throw new AkbException("unable to log in for " + ID + " view"); + } + } + + public void setAkbService(AkbService akbService) { + this.akbService = akbService; + + } +} \ No newline at end of file diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbTemplatesTreeView.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbTemplatesTreeView.java index 0930701e7..f12a418b5 100644 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbTemplatesTreeView.java +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/views/AkbTemplatesTreeView.java @@ -61,7 +61,7 @@ import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.part.ViewPart; import org.eclipse.ui.services.IServiceLocator; -/** SLC generic JCR Result tree view. */ +/** AKB template tree view. */ public class AkbTemplatesTreeView extends ViewPart implements Refreshable { // private final static Log log = // LogFactory.getLog(AkbTemplatesTreeView.class); @@ -99,8 +99,8 @@ public class AkbTemplatesTreeView extends ViewPart implements Refreshable { public void createPartControl(Composite parent) { initialize(); - envTreeViewer = createResultsTreeViewer(parent); - envTreeViewer.setInput(initializeResultTree()); + envTreeViewer = createTreeViewer(parent); + envTreeViewer.setInput(initializeTree()); // parent.setLayout(new FillLayout()); // // Main layout @@ -137,7 +137,7 @@ public class AkbTemplatesTreeView extends ViewPart implements Refreshable { // } // The main tree viewer - protected TreeViewer createResultsTreeViewer(Composite parent) { + protected TreeViewer createTreeViewer(Composite parent) { parent.setLayout(AkbUiUtils.gridLayoutNoBorder()); int style = SWT.BORDER | SWT.MULTI; @@ -199,7 +199,7 @@ public class AkbTemplatesTreeView extends ViewPart implements Refreshable { public void setFocus() { } - private Node[] initializeResultTree() { + private Node[] initializeTree() { try { NodeIterator ni = templatesParentNode.getNodes(); List templates = new ArrayList(); @@ -218,7 +218,7 @@ public class AkbTemplatesTreeView extends ViewPart implements Refreshable { @Override public void forceRefresh(Object object) { - envTreeViewer.setInput(initializeResultTree()); + envTreeViewer.setInput(initializeTree()); } // /////////////////////////// @@ -492,7 +492,7 @@ public class AkbTemplatesTreeView extends ViewPart implements Refreshable { Object[] visibles = envTreeViewer.getExpandedElements(); if (fullRefresh) - envTreeViewer.setInput(initializeResultTree()); + envTreeViewer.setInput(initializeTree()); else envTreeViewer.refresh(); diff --git a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbNames.java b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbNames.java index db52ca7bc..79f622892 100644 --- a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbNames.java +++ b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/AkbNames.java @@ -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"; diff --git a/runtime/org.argeo.slc.akb/src/main/resources/org/argeo/slc/akb/akb.cnd b/runtime/org.argeo.slc.akb/src/main/resources/org/argeo/slc/akb/akb.cnd index cf1960d64..773fac49b 100644 --- a/runtime/org.argeo.slc.akb/src/main/resources/org/argeo/slc/akb/akb.cnd +++ b/runtime/org.argeo.slc.akb/src/main/resources/org/argeo/slc/akb/akb.cnd @@ -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 // -- 2.39.5