]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/EnvTemplateEditor.java
Fix environment editor
[gpl/argeo-slc.git] / plugins / org.argeo.slc.akb.ui / src / main / java / org / argeo / slc / akb / ui / editors / EnvTemplateEditor.java
index c7908f5fbaaa1805452cf8b4ff1e83b3945cf1a0..b97d1ec21ab10f5ff7bdc6f75d86569a8860bf02 100644 (file)
@@ -13,13 +13,17 @@ import javax.jcr.observation.Event;
 import javax.jcr.observation.ObservationManager;
 
 import org.argeo.eclipse.ui.jcr.AsyncUiEventListener;
+import org.argeo.eclipse.ui.utils.CommandUtils;
 import org.argeo.slc.akb.AkbException;
+import org.argeo.slc.akb.AkbNames;
 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.ForceRefresh;
 import org.argeo.slc.akb.ui.commands.OpenAkbNodeEditor;
-import org.argeo.slc.akb.ui.composites.ConnectorAliasSmallComposite;
+import org.argeo.slc.akb.ui.composites.AliasListItemComposite;
 import org.argeo.slc.akb.ui.composites.MixTitleComposite;
+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;
@@ -33,6 +37,7 @@ import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.forms.AbstractFormPart;
+import org.eclipse.ui.forms.IFormPart;
 import org.eclipse.ui.forms.IManagedForm;
 
 /**
@@ -78,13 +83,18 @@ public class EnvTemplateEditor extends AbstractAkbNodeEditor {
                menuManager.setRemoveAllWhenShown(true);
        }
 
-       private void aboutToShow(IMenuManager menu) {
+       protected void aboutToShow(IMenuManager menu) {
                try {
                        // initialization
-                       String submenuID = "subMenu.addAlias";
                        IWorkbenchWindow window = AkbUiPlugin.getDefault().getWorkbench()
                                        .getActiveWorkbenchWindow();
                        Node connectorParent = getAkbNode();
+
+                       // Refresh
+                       CommandUtils.refreshCommand(menu, window, ForceRefresh.ID,
+                                       "Refresh", null, true);
+
+                       String submenuID = "subMenu.addAlias";
                        IContributionItem ici = menu.find(submenuID);
                        if (ici != null)
                                menu.remove(ici);
@@ -120,7 +130,8 @@ public class EnvTemplateEditor extends AbstractAkbNodeEditor {
                        subMenu.add(AkbUiUtils.createContributionItem(subMenu, window,
                                        currItemId, OpenAkbNodeEditor.ID, "SSH", null, tmpParams));
 
-                       menu.add(subMenu);
+                       if (isTemplate())
+                               menu.add(subMenu);
 
                } catch (RepositoryException e) {
                        throw new AkbException("Unable to refresh context menu", e);
@@ -140,19 +151,39 @@ public class EnvTemplateEditor extends AbstractAkbNodeEditor {
                                try {
                                        super.refresh();
                                        // first: initialise composite for new connectors
+
                                        Node connectorPar = getAkbNode().getNode(
                                                        AkbTypes.AKB_CONNECTOR_FOLDER);
                                        NodeIterator ni = connectorPar.getNodes();
-                                       while (ni.hasNext()) {
+
+                                       boolean isTemplate = getEnvNode().isNodeType(
+                                                       AkbTypes.AKB_ENV_TEMPLATE);
+
+                                       aliases: while (ni.hasNext()) {
                                                Node currNode = ni.nextNode();
                                                String currJcrId = currNode.getIdentifier();
                                                if (!connectorsCmps.containsKey(currJcrId)) {
-                                                       Composite currCmp = new ConnectorAliasSmallComposite(
-                                                                       panel, SWT.NO_FOCUS, getToolkit(),
-                                                                       managedForm, currNode, getAkbService());
-                                                       currCmp.setLayoutData(new GridData(SWT.FILL,
-                                                                       SWT.TOP, true, false));
-                                                       connectorsCmps.put(currJcrId, currCmp);
+                                                       Composite currCmp;
+                                                       if (isTemplate)
+                                                               currCmp = new AliasListItemComposite(panel,
+                                                                               SWT.NO_FOCUS, getToolkit(),
+                                                                               managedForm, getAkbNode(),
+                                                                               currNode.getPath(), getAkbService());
+                                                       else {
+                                                               String aliasPath = AkbJcrUtils.get(currNode,
+                                                                               AkbNames.AKB_CONNECTOR_ALIAS_PATH);
+                                                               if (AkbJcrUtils.isEmptyString(aliasPath)
+                                                                               || !getSession().nodeExists(aliasPath))
+                                                                       continue aliases;
+
+                                                               currCmp = new AliasListItemComposite(panel,
+                                                                               SWT.NO_FOCUS, getToolkit(),
+                                                                               managedForm, getAkbNode(), aliasPath,
+                                                                               getAkbService());
+                                                               currCmp.setLayoutData(new GridData(SWT.FILL,
+                                                                               SWT.TOP, true, false));
+                                                               connectorsCmps.put(currJcrId, currCmp);
+                                                       }
                                                }
                                        }
 
@@ -181,7 +212,7 @@ public class EnvTemplateEditor extends AbstractAkbNodeEditor {
                        ObservationManager observationManager = getSession().getWorkspace()
                                        .getObservationManager();
                        connectorObserver = new ConnectorObserver(panel.getDisplay(),
-                                       formPart);
+                                       managedForm);
                        // observe tree changes under All results
                        observationManager.addEventListener(connectorObserver,
                                        Event.NODE_ADDED | Event.NODE_REMOVED, getAkbNode()
@@ -195,11 +226,11 @@ public class EnvTemplateEditor extends AbstractAkbNodeEditor {
 
        class ConnectorObserver extends AsyncUiEventListener {
 
-               private AbstractFormPart formPart;
+               private IManagedForm managedForm;
 
-               public ConnectorObserver(Display display, AbstractFormPart formPart) {
+               public ConnectorObserver(Display display, IManagedForm managedForm) {
                        super(display);
-                       this.formPart = formPart;
+                       this.managedForm = managedForm;
                }
 
                @Override
@@ -211,7 +242,8 @@ public class EnvTemplateEditor extends AbstractAkbNodeEditor {
                protected void onEventInUiThread(List<Event> events)
                                throws RepositoryException {
                        try {
-                               formPart.refresh();
+                               for (IFormPart part : managedForm.getParts())
+                                       part.refresh();
                        } catch (Exception e) {
                                // silently fail
                                e.printStackTrace();