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%2Fviews%2FAkbTemplatesTreeView.java;h=7028663b54e9aa0ae95585442372df4da5f0491a;hb=017de29cd6d3902a739eab828ae589c1530943fb;hp=9e82b4bebcfbeed546fbcdc79eadaa870dad1c57;hpb=c5a5cb9a47fdafcc95f1b8902f31b62a0e6a9674;p=gpl%2Fargeo-slc.git 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 9e82b4beb..7028663b5 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 @@ -15,22 +15,37 @@ */ 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 javax.jcr.observation.EventListener; +import javax.jcr.observation.ObservationManager; +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.AkbItemsComparator; +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; @@ -41,46 +56,36 @@ 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; -/** SLC generic JCR Result tree view. */ -public class AkbTemplatesTreeView extends ViewPart { +/** AKB template tree view. */ +public class AkbTemplatesTreeView extends ViewPart implements Refreshable { // private final static Log log = - // LogFactory.getLog(JcrResultTreeView.class); + // LogFactory.getLog(AkbTemplatesTreeView.class); public final static String ID = AkbUiPlugin.PLUGIN_ID + ".akbTemplatesTreeView"; /* DEPENDENCY INJECTION */ private Session session; + private AkbService akbService; // This page widgets - private TreeViewer resultTreeViewer; + private TreeViewer envTreeViewer; // Usefull business objects private Node templatesParentNode; - // private EventListener myResultsObserver = null; - // private EventListener allResultsObserver = null; - // - // // under My Results - // private final static String[] observedNodeTypesUnderMyResult = { - // SlcTypes.SLC_TEST_RESULT, SlcTypes.SLC_RESULT_FOLDER, - // SlcTypes.SLC_MY_RESULT_ROOT_FOLDER }; - // - // private final static String[] observedNodeTypesUnderAllResults = { - // SlcTypes.SLC_TEST_RESULT, NodeType.NT_UNSTRUCTURED }; - // - // private boolean isResultFolder = false; - - // /** - // * To be overridden to adapt size of form and result frames. - // */ - // protected int[] getWeights() { - // return new int[] { 70, 30 }; - // } + // Observer + private EventListener akbNodesObserver = null; + private final static String[] observedNodeTypes = { + AkbTypes.AKB_ENV_TEMPLATE, AkbTypes.AKB_CONNECTOR_ALIAS, + AkbTypes.AKB_ITEM, AkbTypes.AKB_ITEM_FOLDER, + AkbTypes.AKB_CONNECTOR_FOLDER }; private void initialize() { try { @@ -95,67 +100,14 @@ public class AkbTemplatesTreeView extends ViewPart { public void createPartControl(Composite parent) { initialize(); - createResultsTreeViewer(parent); - - // parent.setLayout(new FillLayout()); - // // Main layout - // SashForm sashForm = new SashForm(parent, SWT.VERTICAL); - // sashForm.setSashWidth(4); - // sashForm.setLayout(new FillLayout()); - - // Create the tree on top of the view - // Composite top = new Composite(sashForm, SWT.NONE); - // GridLayout gl = new GridLayout(1, false); - // top.setLayout(gl); - // resultTreeViewer = createResultsTreeViewer(top); - - // // Create the property viewer on the bottom - // Composite bottom = new Composite(sashForm, SWT.NONE); - // bottom.setLayout(new GridLayout(1, false)); - // propertiesViewer = createPropertiesViewer(bottom); - // - // sashForm.setWeights(getWeights()); - - // setOrderedInput(resultTreeViewer); - - // Initialize observer - // try { - // ObservationManager observationManager = session.getWorkspace() - // .getObservationManager(); - // myResultsObserver = new MyResultsObserver(resultTreeViewer - // .getTree().getDisplay()); - // allResultsObserver = new AllResultsObserver(resultTreeViewer - // .getTree().getDisplay()); - // - // // observe tree changes under MyResults - // observationManager.addEventListener(myResultsObserver, - // Event.NODE_ADDED | Event.NODE_REMOVED, - // SlcJcrResultUtils.getMyResultsBasePath(session), true, - // null, observedNodeTypesUnderMyResult, false); - // // observe tree changes under All results - // observationManager.addEventListener(allResultsObserver, - // Event.NODE_ADDED | Event.NODE_REMOVED, - // SlcJcrResultUtils.getSlcResultsBasePath(session), true, - // null, observedNodeTypesUnderAllResults, false); - // } catch (RepositoryException e) { - // throw new SlcException("Cannot register listeners", e); - // } + envTreeViewer = createTreeViewer(parent); + envTreeViewer.setInput(initializeTree()); + envTreeViewer.setComparator(new AkbItemsComparator()); } - /** - * Override default behaviour so that default defined order remains - * unchanged on first level of the tree - */ - // private void setOrderedInput(TreeViewer viewer) { - // // Add specific ordering - // viewer.setInput(null); - // viewer.setComparator(null); - // viewer.setInput(initializeResultTree()); - // viewer.setComparator(new ResultItemsComparator()); - // } - // The main tree viewer - protected TreeViewer createResultsTreeViewer(Composite parent) { + protected TreeViewer createTreeViewer(Composite parent) { + parent.setLayout(AkbUiUtils.gridLayoutNoBorder()); int style = SWT.BORDER | SWT.MULTI; TreeViewer viewer = new TreeViewer(parent, style); @@ -173,12 +125,6 @@ public class AkbTemplatesTreeView extends ViewPart { // .getDecoratorManager().getLabelDecorator(); // viewer.setLabelProvider(new DecoratingLabelProvider(rtLblProvider, // decorator)); - // viewer.addDoubleClickListener(new ViewDoubleClickListener()); - - // Override default behaviour to insure that 2 distincts results that - // have the same name will be correctly and distincly returned by - // corresponding TreeViewer.getSelection() method. - // viewer.setComparer(new ResultItemsComparer()); getSite().setSelectionProvider(viewer); @@ -201,81 +147,52 @@ public class AkbTemplatesTreeView extends ViewPart { getSite().registerContextMenu(menuManager, viewer); - // add change listener to display TestResult information in the property - // viewer - // viewer.addSelectionChangedListener(new MySelectionChangedListener()); + // Initialize observer + try { + ObservationManager observationManager = session.getWorkspace() + .getObservationManager(); + + akbNodesObserver = new AkbNodesObserver(viewer.getTree() + .getDisplay()); + observationManager.addEventListener(akbNodesObserver, + Event.NODE_ADDED | Event.NODE_REMOVED, + templatesParentNode.getPath(), true, null, + observedNodeTypes, false); + } catch (RepositoryException e) { + throw new AkbException("Cannot register listeners", e); + } return viewer; } - // Detailed property viewer - // protected TableViewer createPropertiesViewer(Composite parent) { - // } - @Override public void setFocus() { } - // private ResultParent[] initializeResultTree() { - // try { - // // Force initialization of the tree structure if needed - // SlcJcrResultUtils.getSlcResultsParentNode(session); - // SlcJcrResultUtils.getMyResultParentNode(session); - // // Remove yesterday and last 7 days virtual folders - // // ResultParent[] roots = new ResultParent[5]; - // ResultParent[] roots = new ResultParent[3]; - // - // // My results - // roots[0] = new ParentNodeFolder(null, - // SlcJcrResultUtils.getMyResultParentNode(session), - // SlcUiConstants.DEFAULT_MY_RESULTS_FOLDER_LABEL); - // - // // today - // Calendar cal = Calendar.getInstance(); - // String relPath = JcrUtils.dateAsPath(cal); - // List datePathes = new ArrayList(); - // datePathes.add(relPath); - // roots[1] = new VirtualFolder(null, - // ResultParentUtils.getResultsForDates(session, datePathes), - // "Today"); - // - // // // Yesterday - // // cal = Calendar.getInstance(); - // // cal.add(Calendar.DAY_OF_YEAR, -1); - // // relPath = JcrUtils.dateAsPath(cal); - // // datePathes = new ArrayList(); - // // datePathes.add(relPath); - // // roots[2] = new VirtualFolder(null, - // // ResultParentUtils.getResultsForDates(session, datePathes), - // // "Yesterday"); - // // // Last 7 days - // // - // // cal = Calendar.getInstance(); - // // datePathes = new ArrayList(); - // // - // // for (int i = 0; i < 7; i++) { - // // cal.add(Calendar.DAY_OF_YEAR, -i); - // // relPath = JcrUtils.dateAsPath(cal); - // // datePathes.add(relPath); - // // } - // // roots[3] = new VirtualFolder(null, - // // ResultParentUtils.getResultsForDates(session, datePathes), - // // "Last 7 days"); - // - // // All results - // Node otherResultsPar = session.getNode(SlcJcrResultUtils - // .getSlcResultsBasePath(session)); - // // roots[4] = new ParentNodeFolder(null, otherResultsPar, - // // "All results"); - // roots[2] = new ParentNodeFolder(null, otherResultsPar, - // "All results"); - // return roots; - // } catch (RepositoryException re) { - // throw new ArgeoException( - // "Unexpected error while initializing ResultTree.", re); - // } - // } + private Node[] initializeTree() { + try { + NodeIterator ni = templatesParentNode.getNodes(); + List templates = new ArrayList(); + while (ni.hasNext()) { + Node currNode = ni.nextNode(); + if (currNode.isNodeType(AkbTypes.AKB_ENV_TEMPLATE)) + templates.add(currNode); + } + Node[] templateArr = templates.toArray(new Node[templates.size()]); + return templateArr; + } catch (RepositoryException re) { + throw new AkbException("Error while initializing templates Tree.", + re); + } + } + + @Override + public void forceRefresh(Object object) { + envTreeViewer.setInput(initializeTree()); + } + + // /////////////////////////// + // CONTEXT MENU MANAGEMENT - // Manage context menu /** * Defines the commands that will pop up in the context menu. **/ @@ -283,104 +200,275 @@ public class AkbTemplatesTreeView extends ViewPart { IWorkbenchWindow window = AkbUiPlugin.getDefault().getWorkbench() .getActiveWorkbenchWindow(); try { - // IStructuredSelection selection = (IStructuredSelection) - // resultTreeViewer - // .getSelection(); - // boolean canAddSubfolder = false; - // boolean canRenamefolder = false; - // boolean isSingleResultNode = false; - // boolean isUnderMyResult = false; - // boolean validMultipleDelete = false; - // - // // Building conditions - // if (selection.size() == 1) { - // Object obj = selection.getFirstElement(); - // if (obj instanceof SingleResultNode) - // isSingleResultNode = true; - // else if (obj instanceof ParentNodeFolder) { - // Node cNode = ((ParentNodeFolder) obj).getNode(); - // if (cNode.isNodeType(SlcTypes.SLC_RESULT_FOLDER)) { - // canAddSubfolder = true; - // canRenamefolder = true; - // isUnderMyResult = true; - // } else if (cNode - // .isNodeType(SlcTypes.SLC_MY_RESULT_ROOT_FOLDER)) { - // canAddSubfolder = true; - // } - // } - // } else { - // @SuppressWarnings("rawtypes") - // Iterator it = selection.iterator(); - // multicheck: while (it.hasNext()) { - // validMultipleDelete = true; - // Object obj = it.next(); - // if (obj instanceof SingleResultNode) - // continue multicheck; - // else if (obj instanceof ParentNodeFolder) { - // Node cNode = ((ParentNodeFolder) obj).getNode(); - // if (cNode.isNodeType(SlcTypes.SLC_RESULT_FOLDER)) - // continue multicheck; - // else { - // validMultipleDelete = false; - // break multicheck; - // } - // } else { - // validMultipleDelete = false; - // break multicheck; - // } - // } - // } + // 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, templatesParentNode.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); - // Effective Refresh - CommandUtils.refreshParametrizedCommand(menuManager, window, - OpenAkbNodeEditor.ID, "Create new template...", null, true, - params); - - // - // CommandUtils.refreshCommand(menuManager, window, DeleteItems.ID, - // DeleteItems.DEFAULT_LABEL, DeleteItems.DEFAULT_IMG_DESCRIPTOR, - // isUnderMyResult || isSingleResultNode || validMultipleDelete); - // - // CommandUtils.refreshCommand(menuManager, window, - // AddResultFolder.ID, - // AddResultFolder.DEFAULT_LABEL, - // ClientUiPlugin.getDefault().getWorkbench().getSharedImages() - // .getImageDescriptor(ISharedImages.IMG_OBJ_ADD), - // canAddSubfolder); - // - // CommandUtils.refreshCommand(menuManager, window, - // RenameResultFolder.ID, - // RenameResultFolder.DEFAULT_LABEL, - // RenameResultFolder.DEFAULT_IMG_DESCRIPTOR, canRenamefolder); - // - // // Command removed for the time being. - // CommandUtils.refreshCommand(menuManager, window, - // RenameResultNode.ID, - // RenameResultNode.DEFAULT_LABEL, - // RenameResultNode.DEFAULT_IMG_DESCRIPTOR, false); - // - // // Test to be removed - // // If you use this pattern, do not forget to call - // // menuManager.setRemoveAllWhenShown(true); - // // when creating the menuManager - // - // // menuManager.add(new Action("Test") { - // // public void run() { - // // log.debug("do something"); - // // } - // // }); } 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); + } + + // private class MyCompoundCI extends CompoundContributionItem { + // private IMenuManager menuManager; + // private IServiceLocator locator; + // + // public MyCompoundCI(IMenuManager menuManager, IServiceLocator locator, + // String itemId) { + // super(itemId); + // this.menuManager = menuManager; + // this.locator = locator; + // } + // + // @Override + // protected IContributionItem[] getContributionItems() { + // + // CommandContributionItem[] submenu = new CommandContributionItem[2]; + // submenu[0] = createContributionItem(menuManager, locator, "uid.1", + // OpenAkbNodeEditor.ID, "test1" + System.currentTimeMillis(), + // null, null); + // submenu[1] = createContributionItem(menuManager, locator, "uid.2", + // OpenAkbNodeEditor.ID, "test2", null, null); + // return submenu; + // } + // } + /* INNER CLASSES */ + private class AkbNodesObserver extends AsyncUiEventListener { + + public AkbNodesObserver(Display display) { + super(display); + } + + @Override + protected Boolean willProcessInUiThread(List events) + throws RepositoryException { + // unfiltered for the time being + return true; + } + + protected void onEventInUiThread(List events) + throws RepositoryException { + boolean fullRefresh = false; + + eventLoop: for (Event event : events) { + String currPath = event.getPath(); + if (session.nodeExists(currPath)) { + Node node = session.getNode(currPath); + if (node.isNodeType(AkbTypes.AKB_ENV_TEMPLATE)) { + fullRefresh = true; + break eventLoop; + } + } + } + + Object[] visibles = envTreeViewer.getExpandedElements(); + if (fullRefresh) + envTreeViewer.setInput(initializeTree()); + else + envTreeViewer.refresh(); + + envTreeViewer.setExpandedElements(visibles); + } + } + class ViewDoubleClickListener implements IDoubleClickListener { public void doubleClick(DoubleClickEvent evt) { Object obj = ((IStructuredSelection) evt.getSelection()) @@ -388,9 +476,16 @@ public class AkbTemplatesTreeView extends ViewPart { try { if (obj instanceof Node) { Node node = (Node) obj; - CommandUtils.callCommand(OpenAkbNodeEditor.ID, - OpenAkbNodeEditor.PARAM_NODE_JCR_ID, + 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); @@ -398,60 +493,11 @@ public class AkbTemplatesTreeView extends ViewPart { } } - // class MyResultsObserver extends AsyncUiEventListener { - // - // public MyResultsObserver(Display display) { - // super(display); - // } - // - // @Override - // protected Boolean willProcessInUiThread(List events) - // throws RepositoryException { - // // unfiltered for the time being - // return true; - // } - // - // protected void onEventInUiThread(List events) - // throws RepositoryException { - // List nodesToRefresh = new ArrayList(); - // - // for (Event event : events) { - // String parPath = JcrUtils.parentPath(event.getPath()); - // if (session.nodeExists(parPath)) { - // Node node = session.getNode(parPath); - // if (!nodesToRefresh.contains(node)) { - // nodesToRefresh.add(node); - // } - // } - // } - // - // // Update check nodes - // for (Node node : nodesToRefresh) - // jcrRefresh(node); - // refresh(null); - // } - // } - - // class AllResultsObserver extends AsyncUiEventListener { - // - // public AllResultsObserver(Display display) { - // super(display); - // } - // - // @Override - // protected Boolean willProcessInUiThread(List events) - // throws RepositoryException { - // // unfiltered for the time being - // return true; - // } - // - // protected void onEventInUiThread(List events) - // throws RepositoryException { - // refresh(null); - // // if (lastSelectedSourceElementParent != null) - // // refresh(lastSelectedSourceElementParent); - // } - // } + @Override + public void dispose() { + JcrUtils.logoutQuietly(session); + super.dispose(); + } /* DEPENDENCY INJECTION */ public void setRepository(Repository repository) { @@ -461,4 +507,9 @@ public class AkbTemplatesTreeView extends ViewPart { throw new AkbException("unable to log in for " + ID + " view"); } } + + public void setAkbService(AkbService akbService) { + this.akbService = akbService; + + } } \ No newline at end of file