Work on items editors
authorBruno Sinou <bsinou@argeo.org>
Sun, 10 Nov 2013 11:18:45 +0000 (11:18 +0000)
committerBruno Sinou <bsinou@argeo.org>
Sun, 10 Nov 2013 11:18:45 +0000 (11:18 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@6609 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

12 files changed:
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/DeleteAkbNodes.java
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ItemTemplateTitleComposite.java
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/dialogs/AddItemDialog.java
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AbstractAkbNodeEditor.java
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AkbItemTemplateEditor.java
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/EnvTemplateEditor.java
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/JdbcQueryTemplateEditor.java
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshCommandTemplateEditor.java
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshFileTemplateEditor.java
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

index abc41382da84502d40c29add5f2e710d7b0fae7e..9889ae00e22cb3e758e2992ae2b9b79ed6944eed 100644 (file)
@@ -12,6 +12,7 @@ import org.argeo.slc.akb.ui.editors.AkbNodeEditorInput;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.handlers.HandlerUtil;
@@ -28,15 +29,14 @@ public class DeleteAkbNodes extends AbstractHandler {
 
        public final static String PARAM_NODE_JCR_ID = "param.nodeJcrId";
 
-       // public final static String PARAM_NODE_TYPE = "param.nodeType";
-
        public Object execute(ExecutionEvent event) throws ExecutionException {
 
-               // String nodeType = event.getParameter(PARAM_NODE_TYPE);
                String nodeJcrId = event.getParameter(PARAM_NODE_JCR_ID);
 
                Session session = null;
                try {
+                       session = repository.login();
+
                        // caches current Page
                        IWorkbenchPage currentPage = HandlerUtil.getActiveWorkbenchWindow(
                                        event).getActivePage();
@@ -47,14 +47,21 @@ public class DeleteAkbNodes extends AbstractHandler {
                        if (nodeJcrId != null)
                                node = session.getNodeByIdentifier(nodeJcrId);
 
-                       // no node has been found or created, return silently
-                       if (node == null)
-                               return null;
-
                        IEditorPart currPart = currentPage
                                        .findEditor(new AkbNodeEditorInput(nodeJcrId));
                        if (currPart != null)
                                currPart.dispose();
+
+                       if (node != null) {
+                               Boolean ok = MessageDialog.openConfirm(
+                                               HandlerUtil.getActiveShell(event), "Confirm deletion",
+                                               "Do you want to delete this item?");
+
+                               if (ok) {
+                                       node.remove();
+                                       session.save();
+                               }
+                       }
                } catch (RepositoryException e) {
                        throw new AkbException("JCR error while deleting node" + nodeJcrId
                                        + " editor", e);
index 86b5b23f4c49b849d47a76578e2dee3be76dc5f1..3b73d0939fbe9afe7f4288cb1d99b253368fd7fe 100644 (file)
@@ -4,17 +4,27 @@ import java.util.List;
 
 import javax.jcr.Node;
 import javax.jcr.Property;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
 
+import org.argeo.eclipse.ui.utils.CommandUtils;
+import org.argeo.slc.akb.AkbException;
+import org.argeo.slc.akb.AkbNames;
 import org.argeo.slc.akb.ui.AkbUiUtils;
+import org.argeo.slc.akb.ui.commands.OpenAkbNodeEditor;
 import org.argeo.slc.akb.utils.AkbJcrUtils;
+import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Link;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.forms.AbstractFormPart;
 import org.eclipse.ui.forms.IManagedForm;
@@ -32,6 +42,9 @@ public class ItemTemplateTitleComposite extends Composite {
 
        // To enable set focus
        private Text titleTxt;
+       private Combo typeCmb;
+
+       private List<Node> definedAliases;
 
        public ItemTemplateTitleComposite(Composite parent, int style,
                        FormToolkit toolkit, IManagedForm form, Node akbNode) {
@@ -47,37 +60,56 @@ public class ItemTemplateTitleComposite extends Composite {
                // Initialization
                Composite parent = this;
 
-               parent.setLayout(new GridLayout(4, false));
+               parent.setLayout(new GridLayout(5, false));
 
                // first line: Item name
                toolkit.createLabel(parent, "Name");
                titleTxt = toolkit.createText(parent, "", SWT.BORDER);
-               GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1);
+               GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false, 4, 1);
                titleTxt.setLayoutData(gd);
 
                // Second line: alias management
                toolkit.createLabel(parent, "Alias");
-               final Combo typeCmb = new Combo(parent, SWT.READ_ONLY);
-
-               // TODO enable live refresh
-               final List<Node> definedAliases = AkbJcrUtils
-                               .getDefinedAliasForNode(akbNode);
-
-               final String[] names = new String[definedAliases.size()];
-               int i = 0;
-               for (Node node : definedAliases)
-                       names[i++] = AkbJcrUtils.get(node, Property.JCR_TITLE);
-               typeCmb.setItems(names);
-
+               typeCmb = new Combo(parent, SWT.READ_ONLY);
+               toolkit.adapt(typeCmb, false, false);
                gd = new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1);
                typeCmb.setLayoutData(gd);
 
+               final Link openAliasLk = new Link(parent, SWT.NONE);
+               toolkit.adapt(openAliasLk, false, false);
+               openAliasLk.setText("<a> Edit Alias </a>");
+               openAliasLk.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(final SelectionEvent event) {
+                               int index = typeCmb.getSelectionIndex();
+                               if (index != -1) {
+                                       Node currAlias = definedAliases.get(index);
+                                       String id = AkbJcrUtils.getIdentifierQuietly(currAlias);
+                                       CommandUtils.callCommand(OpenAkbNodeEditor.ID,
+                                                       OpenAkbNodeEditor.PARAM_NODE_JCR_ID, id);
+                               } else
+                                       MessageDialog.openError(getShell(), "Error",
+                                                       "No selected alias");
+                       }
+               });
+               //
+               // final Link testAliasLk= new Link(parent, SWT.NONE);
+               // openAliasLk.setText("<a> Edit Alias </a>");
+               // openAliasLk.addSelectionListener(new SelectionAdapter() {
+               // private static final long serialVersionUID = 1L;
+               //
+               // @Override
+               // public void widgetSelected(final SelectionEvent event) {
+               // MessageDialog.openInformation(getShell(), "test", "test");
+               // }
+               // });
+
                // 3rd line: description
                Label lbl = toolkit.createLabel(parent, "Description");
                lbl.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false));
                final Text descTxt = toolkit.createText(parent, "", SWT.BORDER
                                | SWT.MULTI | SWT.WRAP);
-               gd = new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1);
+               gd = new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1);
                descTxt.setLayoutData(gd);
 
                // Part Management
@@ -90,8 +122,8 @@ public class ItemTemplateTitleComposite extends Composite {
                                AkbUiUtils.refreshFormTextWidget(descTxt, akbNode,
                                                Property.JCR_DESCRIPTION);
 
-                               // TODO implement this
-                               // typeCmb.select(getCurrTypeIndex());
+                               refreshTypeCmbValues();
+                               typeCmb.select(getCurrAliasIndex());
                                typeCmb.setEnabled(AkbJcrUtils.isNodeCheckedOutByMe(akbNode));
                        }
                };
@@ -105,26 +137,87 @@ public class ItemTemplateTitleComposite extends Composite {
                typeCmb.addModifyListener(new ModifyListener() {
                        @Override
                        public void modifyText(ModifyEvent event) {
-                               // try {
-                               int oldIndex = -1; // getCurrTypeIndex();
-                               int selIndex = typeCmb.getSelectionIndex();
-
-                               // insure something has really been modified
-                               if (selIndex < 0 || oldIndex == selIndex)
-                                       return;
-
-                               // TODO set new alias
-                               part.markDirty();
-                               // } catch (RepositoryException e) {
-                               // throw new AkbException(
-                               // "Error while updating connector alias", e);
-                               // }
+                               try {
+                                       int oldIndex = getCurrAliasIndex();
+                                       int selIndex = typeCmb.getSelectionIndex();
+
+                                       // insure something has really been modified
+                                       if (selIndex < 0 || oldIndex == selIndex)
+                                               return;
+
+                                       // set new alias
+                                       Node newAlias = definedAliases.get(selIndex);
+                                       akbNode.setProperty(AkbNames.AKB_USED_CONNECTOR,
+                                                       newAlias.getPath());
+                                       part.markDirty();
+                               } catch (RepositoryException e) {
+                                       throw new AkbException(
+                                                       "Error while updating connector alias", e);
+                               }
                        }
                });
 
                form.addPart(part);
        }
 
+       private void refreshTypeCmbValues() {
+               List<Node> newAliases = AkbJcrUtils.getDefinedAliasForNode(akbNode);
+               boolean hasChanged = false;
+               // manually ckeck if something has changed
+               if (definedAliases == null
+                               || newAliases.size() != definedAliases.size())
+                       hasChanged = true;
+               else {
+
+                       for (int i = 0; i < newAliases.size(); i++) {
+                               if (!newAliases.get(i).equals(definedAliases.get(i))) {
+                                       hasChanged = true;
+                                       break;
+                               }
+                       }
+               }
+
+               if (hasChanged) {
+                       definedAliases = newAliases;
+                       final String[] names = new String[definedAliases.size()];
+                       int i = 0;
+                       for (Node node : definedAliases)
+                               names[i++] = AkbJcrUtils.get(node, Property.JCR_TITLE);
+                       typeCmb.setItems(names);
+               }
+       }
+
+       /**
+        * Returns the index in definedAliases list of the CURRENT defined alias as
+        * set in the item node <CODE>AkbNames.AKB_USED_CONNECTOR</CODE> if defined,
+        * -1 otherwise
+        */
+       private int getCurrAliasIndex() {
+               try {
+                       String path = null;
+                       int currAliasIndex = -1;
+                       if (akbNode.hasProperty(AkbNames.AKB_USED_CONNECTOR))
+                               path = akbNode.getProperty(AkbNames.AKB_USED_CONNECTOR)
+                                               .getString();
+
+                       Session session = akbNode.getSession();
+                       if (path != null && session.nodeExists(path)) {
+                               for (int i = 0; i < definedAliases.size(); i++) {
+                                       if (path.equals(definedAliases.get(i).getPath())) {
+                                               currAliasIndex = i;
+                                               break;
+                                       }
+                               }
+                               // does not work
+                               // Node chosenAlias = session.getNode(path);
+                               // currAliasIndex = definedAliases.indexOf(chosenAlias);
+                       }
+                       return currAliasIndex;
+               } catch (RepositoryException re) {
+                       throw new AkbException("Unable to retrieve current Alias", re);
+               }
+       }
+
        @Override
        public boolean setFocus() {
                return titleTxt.setFocus();
index 00d0b43c5197b75b924d483d5fb225ff3a558fc9..d54606fef77d94c6e4801a172773ec89f017da9c 100644 (file)
@@ -27,7 +27,7 @@ public class AddItemDialog extends TrayDialog {
        private final String title;
 
        private String[] itemTypesLbl = new String[] { "SSH File", "SSH Command",
-                       "JDBC Connection" };
+                       "JDBC Query" };
        private String[] itemTypes = new String[] { AkbTypes.AKB_SSH_FILE,
                        AkbTypes.AKB_SSH_COMMAND, AkbTypes.AKB_JDBC_QUERY };
 
index 572e5230144af4f49dd0d6c5bc2001c8fd04e0ee..164dd5cb926e8a747907e50fa807594147b4fe87 100644 (file)
@@ -9,6 +9,7 @@ import javax.jcr.Session;
 import org.argeo.jcr.JcrUtils;
 import org.argeo.slc.akb.AkbException;
 import org.argeo.slc.akb.AkbService;
+import org.argeo.slc.akb.ui.AkbUiUtils;
 import org.argeo.slc.akb.utils.AkbJcrUtils;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.swt.SWT;
@@ -90,8 +91,9 @@ public abstract class AbstractAkbNodeEditor extends FormEditor {
        protected void addPages() {
                try {
                        addPage(new ConnectorAliasPage(this, "mainPage", "Main"));
-                       // TODO Add history page
-                       // addPage(new ConnectorAliasPage(this, "mainPage", "Main"));
+                       // Add AKB Type specific pages
+                       addOtherPages();
+                       addPage(new HistoryPage(this, "historyPage", "History"));
                } catch (PartInitException e) {
                        throw new AkbException("Unable to initialise pages for editor "
                                        + getEditorId(), e);
@@ -115,6 +117,26 @@ public abstract class AbstractAkbNodeEditor extends FormEditor {
                }
        }
 
+       /**
+        * Display history
+        */
+       private class HistoryPage extends FormPage {
+
+               public HistoryPage(FormEditor editor, String id, String title) {
+                       super(editor, id, title);
+               }
+
+               protected void createFormContent(IManagedForm managedForm) {
+                       super.createFormContent(managedForm);
+                       ScrolledForm form = managedForm.getForm();
+                       form.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+                       Composite parent = form.getBody();
+                       parent.setLayout(AkbUiUtils.gridLayoutNoBorder());
+                       getToolkit().createLabel(parent,
+                                       "This page will display history " + "for current AKB Node");
+               }
+       }
+
        /* EXPOSES TO CHILDREN CLASSES */
        protected Session getSession() {
                return session;
index 272a88f457f14504fa42e31a30ec1c8dcf5d7717..dbe0b684c2fcb4a0e0fae46095dd661174373f14 100644 (file)
@@ -7,9 +7,13 @@ import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.forms.editor.FormPage;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
 
 /**
- * Display and edit a connector Alias
+ * Parent class for most akb items editor. Factorizes UI parts that are common
+ * in various item types.
  */
 public abstract class AkbItemTemplateEditor extends AbstractAkbNodeEditor {
 
@@ -27,14 +31,42 @@ public abstract class AkbItemTemplateEditor extends AbstractAkbNodeEditor {
                Composite bottomCmp = getToolkit().createComposite(parent);
                gd = new GridData(SWT.FILL, SWT.FILL, true, true);
                bottomCmp.setLayoutData(gd);
-               populateBottomPart(bottomCmp);
+               populateBottomPart(bottomCmp, managedForm);
        }
 
        @Override
        protected void addOtherPages() throws PartInitException {
-               // TODO implement addition of the test page
+               addPage(new TestPage(this, "testPage", "Test"));
        }
 
        /** Overwrite to add specific bottom part depending on the item type */
-       abstract protected void populateBottomPart(Composite parent);
+       abstract protected void populateBottomPart(Composite parent,
+                       IManagedForm managedForm);
+
+       /**
+        * Display history
+        */
+       private class TestPage extends FormPage {
+
+               public TestPage(FormEditor editor, String id, String title) {
+                       super(editor, id, title);
+               }
+
+               protected void createFormContent(IManagedForm managedForm) {
+                       super.createFormContent(managedForm);
+                       ScrolledForm form = managedForm.getForm();
+                       form.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+                       Composite parent = form.getBody();
+                       populateTestPage(parent);
+               }
+       }
+
+       protected void populateTestPage(Composite parent) {
+               parent.setLayout(AkbUiUtils.gridLayoutNoBorder());
+               getToolkit().createLabel(
+                               parent,
+                               "This page will display a test page "
+                                               + "using default connection for the chosen alias");
+       }
+
 }
\ No newline at end of file
index f7cfa438fda96f6f3b2db9d501ab22881f47ae85..53beb7460af936442aabdcbaf3a33235ab10c19d 100644 (file)
@@ -9,7 +9,7 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.forms.IManagedForm;
 
 /**
- * Display and edit a connector Alias
+ * Display and edit an environment template
  */
 public class EnvTemplateEditor extends AbstractAkbNodeEditor {
 
index e8e445bfe94fe902a5802a8a93f3eb83d84c1806..aea5f0aea1a665b604ca5d110a5092532dea7236 100644 (file)
@@ -1,11 +1,19 @@
 package org.argeo.slc.akb.ui.editors;
 
+import org.argeo.slc.akb.AkbNames;
 import org.argeo.slc.akb.ui.AkbUiPlugin;
 import org.argeo.slc.akb.ui.AkbUiUtils;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.AbstractFormPart;
+import org.eclipse.ui.forms.IManagedForm;
 
 /**
- * Display and edit a connector Alias
+ * Display and edit a jdbc query
  */
 public class JdbcQueryTemplateEditor extends AkbItemTemplateEditor {
 
@@ -18,8 +26,36 @@ public class JdbcQueryTemplateEditor extends AkbItemTemplateEditor {
        }
 
        @Override
-       protected void populateBottomPart(Composite parent) {
+       protected void populateBottomPart(Composite parent, IManagedForm managedForm) {
                parent.setLayout(AkbUiUtils.gridLayoutNoBorder());
-               getToolkit().createLabel(parent, "Implement this");
+               Group group = new Group(parent, SWT.NO_FOCUS);
+               getToolkit().adapt(group, false, false);
+               group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+               group.setLayout(new GridLayout(1, false));
+
+               // first line: Description
+               getToolkit().createLabel(group, "Enter below a valid JDBC Query");
+
+               // 2nd line: the query
+               final Text queryTxt = getToolkit().createText(group, "",
+                               SWT.BORDER | SWT.MULTI | SWT.WRAP);
+               GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
+               queryTxt.setLayoutData(gd);
+
+               // Part Management
+               final AbstractFormPart part = new AbstractFormPart() {
+                       public void refresh() {
+                               super.refresh();
+                               // update display value
+                               AkbUiUtils.refreshFormTextWidget(queryTxt, getAkbNode(),
+                                               AkbNames.AKB_QUERY_TEXT);
+                       }
+               };
+               // Listeners
+               AkbUiUtils.addTextModifyListener(queryTxt, getAkbNode(),
+                               AkbNames.AKB_QUERY_TEXT, part);
+               managedForm.addPart(part);
        }
-}
\ No newline at end of file
+
+}
index 2e45cdc70bb4415808851c24bcced73aa9b2e4c4..7c730502c3895aca63f68102e5baac27301c7bc3 100644 (file)
@@ -1,11 +1,19 @@
 package org.argeo.slc.akb.ui.editors;
 
+import org.argeo.slc.akb.AkbNames;
 import org.argeo.slc.akb.ui.AkbUiPlugin;
 import org.argeo.slc.akb.ui.AkbUiUtils;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.AbstractFormPart;
+import org.eclipse.ui.forms.IManagedForm;
 
 /**
- * Display and edit a connector Alias
+ * Display and edit a SSH Command Template ITEM
  */
 public class SshCommandTemplateEditor extends AkbItemTemplateEditor {
 
@@ -18,8 +26,35 @@ public class SshCommandTemplateEditor extends AkbItemTemplateEditor {
        }
 
        @Override
-       protected void populateBottomPart(Composite parent) {
+       protected void populateBottomPart(Composite parent, IManagedForm managedForm) {
                parent.setLayout(AkbUiUtils.gridLayoutNoBorder());
-               getToolkit().createLabel(parent, "Implement this");
+               Group group = new Group(parent, SWT.NO_FOCUS);
+               getToolkit().adapt(group, false, false);
+               group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+               
+               group.setLayout(new GridLayout(1, false));
+
+               // first line: Description
+               getToolkit().createLabel(group, "Enter below a valid SSH command");
+
+               // 2nd line: the query
+               final Text queryTxt = getToolkit().createText(group, "",
+                               SWT.BORDER | SWT.MULTI | SWT.WRAP);
+               GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
+               queryTxt.setLayoutData(gd);
+
+               // Part Management
+               final AbstractFormPart part = new AbstractFormPart() {
+                       public void refresh() {
+                               super.refresh();
+                               // update display value
+                               AkbUiUtils.refreshFormTextWidget(queryTxt, getAkbNode(),
+                                               AkbNames.AKB_COMMAND_TEXT);
+                       }
+               };
+               // Listeners
+               AkbUiUtils.addTextModifyListener(queryTxt, getAkbNode(),
+                               AkbNames.AKB_COMMAND_TEXT, part);
+               managedForm.addPart(part);
        }
 }
\ No newline at end of file
index 7d47de854ca3882932780c6d5daa2b6b665509e9..d4712bcc894d36ba21829a00226c7466fc802a64 100644 (file)
@@ -1,11 +1,19 @@
 package org.argeo.slc.akb.ui.editors;
 
+import org.argeo.slc.akb.AkbNames;
 import org.argeo.slc.akb.ui.AkbUiPlugin;
 import org.argeo.slc.akb.ui.AkbUiUtils;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.AbstractFormPart;
+import org.eclipse.ui.forms.IManagedForm;
 
 /**
- * Display and edit a connector Alias
+ * Display and edit a connection to a file on a distant accessible by SSH server
  */
 public class SshFileTemplateEditor extends AkbItemTemplateEditor {
 
@@ -18,8 +26,36 @@ public class SshFileTemplateEditor extends AkbItemTemplateEditor {
        }
 
        @Override
-       protected void populateBottomPart(Composite parent) {
+       protected void populateBottomPart(Composite parent, IManagedForm managedForm) {
                parent.setLayout(AkbUiUtils.gridLayoutNoBorder());
-               getToolkit().createLabel(parent, "Implement this");
+               Group group = new Group(parent, SWT.NO_FOCUS);
+               getToolkit().adapt(group, false, false);
+               group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+               group.setLayout(new GridLayout(1, false));
+
+               // first line: Description
+               getToolkit().createLabel(group,
+                               "Enter below a valid path in the target server");
+
+               // 2nd line: the path
+               final Text pathTxt = getToolkit().createText(group, "",
+                               SWT.BORDER | SWT.SINGLE);
+               GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false);
+               pathTxt.setLayoutData(gd);
+
+               // Part Management
+               final AbstractFormPart part = new AbstractFormPart() {
+                       public void refresh() {
+                               super.refresh();
+                               // update display value
+                               AkbUiUtils.refreshFormTextWidget(pathTxt, getAkbNode(),
+                                               AkbNames.AKB_FILE_PATH);
+                       }
+               };
+               // Listeners
+               AkbUiUtils.addTextModifyListener(pathTxt, getAkbNode(),
+                               AkbNames.AKB_FILE_PATH, part);
+               managedForm.addPart(part);
        }
 }
\ No newline at end of file
index 004e151c51485ab95bf241d952368a94b4ec6966..399f128f5388cb10924fbe505342ab0266ab2ecc 100644 (file)
@@ -36,6 +36,7 @@ import org.argeo.slc.akb.AkbException;
 import org.argeo.slc.akb.AkbNames;\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
@@ -81,7 +82,8 @@ public class AkbTemplatesTreeView extends ViewPart {
        private EventListener allResultsObserver = null;\r
        private final static String[] observedNodeTypesUnderAllResults = {\r
                        AkbTypes.AKB_ENV_TEMPLATE, AkbTypes.AKB_CONNECTOR_ALIAS,\r
-                       AkbTypes.AKB_ITEM, AkbTypes.AKB_ITEM_FOLDER };\r
+                       AkbTypes.AKB_ITEM, AkbTypes.AKB_ITEM_FOLDER,\r
+                       AkbTypes.AKB_CONNECTOR_FOLDER };\r
 \r
        // private EventListener myResultsObserver = null;\r
        // private EventListener allResultsObserver = null;\r
@@ -139,29 +141,6 @@ public class AkbTemplatesTreeView extends ViewPart {
                // sashForm.setWeights(getWeights());\r
 \r
                // setOrderedInput(resultTreeViewer);\r
-\r
-               // Initialize observer\r
-               // try {\r
-               // ObservationManager observationManager = session.getWorkspace()\r
-               // .getObservationManager();\r
-               // myResultsObserver = new MyResultsObserver(resultTreeViewer\r
-               // .getTree().getDisplay());\r
-               // allResultsObserver = new AllResultsObserver(resultTreeViewer\r
-               // .getTree().getDisplay());\r
-               //\r
-               // // observe tree changes under MyResults\r
-               // observationManager.addEventListener(myResultsObserver,\r
-               // Event.NODE_ADDED | Event.NODE_REMOVED,\r
-               // SlcJcrResultUtils.getMyResultsBasePath(session), true,\r
-               // null, observedNodeTypesUnderMyResult, false);\r
-               // // observe tree changes under All results\r
-               // observationManager.addEventListener(allResultsObserver,\r
-               // Event.NODE_ADDED | Event.NODE_REMOVED,\r
-               // SlcJcrResultUtils.getSlcResultsBasePath(session), true,\r
-               // null, observedNodeTypesUnderAllResults, false);\r
-               // } catch (RepositoryException e) {\r
-               // throw new SlcException("Cannot register listeners", e);\r
-               // }\r
        }\r
 \r
        /**\r
@@ -178,6 +157,7 @@ public class AkbTemplatesTreeView extends ViewPart {
 \r
        // The main tree viewer\r
        protected TreeViewer createResultsTreeViewer(Composite parent) {\r
+               parent.setLayout(AkbUiUtils.gridLayoutNoBorder());\r
                int style = SWT.BORDER | SWT.MULTI;\r
 \r
                TreeViewer viewer = new TreeViewer(parent, style);\r
@@ -255,9 +235,26 @@ public class AkbTemplatesTreeView extends ViewPart {
 \r
                protected void onEventInUiThread(List<Event> events)\r
                                throws RepositoryException {\r
-                       resultTreeViewer.setInput(initializeResultTree());\r
-                       // if (lastSelectedSourceElementParent != null)\r
-                       // refresh(lastSelectedSourceElementParent);\r
+                       boolean fullRefresh = false;\r
+\r
+                       eventLoop: for (Event event : events) {\r
+                               String currPath = event.getPath();\r
+                               if (session.nodeExists(currPath)) {\r
+                                       Node node = session.getNode(currPath);\r
+                                       if (node.isNodeType(AkbTypes.AKB_ENV_TEMPLATE)) {\r
+                                               fullRefresh = true;\r
+                                               break eventLoop;\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       Object[] visibles = resultTreeViewer.getExpandedElements();\r
+                       if (fullRefresh)\r
+                               resultTreeViewer.setInput(initializeResultTree());\r
+                       else\r
+                               resultTreeViewer.refresh();\r
+\r
+                       resultTreeViewer.setExpandedElements(visibles);\r
                }\r
        }\r
 \r
@@ -271,7 +268,6 @@ public class AkbTemplatesTreeView extends ViewPart {
 \r
        private Node[] initializeResultTree() {\r
                try {\r
-\r
                        NodeIterator ni = templatesParentNode.getNodes();\r
                        List<Node> templates = new ArrayList<Node>();\r
 \r
@@ -282,7 +278,6 @@ public class AkbTemplatesTreeView extends ViewPart {
                        }\r
 \r
                        Node[] templateArr = templates.toArray(new Node[templates.size()]);\r
-\r
                        return templateArr;\r
                } catch (RepositoryException re) {\r
                        throw new AkbException("Error while initializing templates Tree.",\r
index 7ba191a421a3fe8849bdd50afc57cfe6067a49e8..018f094a3376e240cee7762b34621d59305a4d83 100644 (file)
@@ -19,5 +19,10 @@ public interface AkbNames {
        public final static String AKB_CONNECTOR_URL = "akb:connectorUrl";
 
        /* ITEMS PROPERTIES */
+       public final static String AKB_USED_CONNECTOR = "akb:usedConnector";
+
+       public final static String AKB_FILE_PATH = "akb:filePath";
+       public final static String AKB_COMMAND_TEXT = "akb:commandText";
+       public final static String AKB_QUERY_TEXT = "akb:queryText";
 
 }
\ No newline at end of file
index ad10673484605de8d8f87f745dd054b19f22dd88..474fb4798eb2b562309839a35151166af21f3872 100644 (file)
@@ -54,6 +54,9 @@ mixin
 // GENERIC ITEM
 //
 [akb:item] > nt:unstructured
+// a path to the corresponding connector
+- akb:usedConnector (STRING)
+
 
 //
 // GENERIC ITEM FOLDER
@@ -66,16 +69,20 @@ mixin
 // SSH FILE
 // 
 [akb:sshFile] > akb:item
+- akb:filePath (STRING)
 
 //
 // SSH COMMAND
 // 
 [akb:sshCommand] > akb:item
+- akb:commandText (STRING)
 
 //
 // JDBC QUERY
 // 
 [akb:jdbcQuery] > akb:item
+- akb:queryText (STRING)
+
 
 
 //