From: Bruno Sinou Date: Sun, 10 Nov 2013 11:18:45 +0000 (+0000) Subject: Work on items editors X-Git-Tag: argeo-slc-2.1.7~289 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=20f77667758d42da2ff45aa005738cf678990e06;p=gpl%2Fargeo-slc.git Work on items editors git-svn-id: https://svn.argeo.org/slc/trunk@6609 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/DeleteAkbNodes.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/DeleteAkbNodes.java index abc41382d..9889ae00e 100644 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/DeleteAkbNodes.java +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/commands/DeleteAkbNodes.java @@ -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); diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ItemTemplateTitleComposite.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ItemTemplateTitleComposite.java index 86b5b23f4..3b73d0939 100644 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ItemTemplateTitleComposite.java +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ItemTemplateTitleComposite.java @@ -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 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 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(" Edit Alias "); + 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(" Edit Alias "); + // 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 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 AkbNames.AKB_USED_CONNECTOR 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(); diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/dialogs/AddItemDialog.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/dialogs/AddItemDialog.java index 00d0b43c5..d54606fef 100644 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/dialogs/AddItemDialog.java +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/dialogs/AddItemDialog.java @@ -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 }; diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AbstractAkbNodeEditor.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AbstractAkbNodeEditor.java index 572e52301..164dd5cb9 100644 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AbstractAkbNodeEditor.java +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AbstractAkbNodeEditor.java @@ -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; diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AkbItemTemplateEditor.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AkbItemTemplateEditor.java index 272a88f45..dbe0b684c 100644 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AkbItemTemplateEditor.java +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AkbItemTemplateEditor.java @@ -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 diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/EnvTemplateEditor.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/EnvTemplateEditor.java index f7cfa438f..53beb7460 100644 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/EnvTemplateEditor.java +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/EnvTemplateEditor.java @@ -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 { diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/JdbcQueryTemplateEditor.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/JdbcQueryTemplateEditor.java index e8e445bfe..aea5f0aea 100644 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/JdbcQueryTemplateEditor.java +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/JdbcQueryTemplateEditor.java @@ -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 + +} diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshCommandTemplateEditor.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshCommandTemplateEditor.java index 2e45cdc70..7c730502c 100644 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshCommandTemplateEditor.java +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshCommandTemplateEditor.java @@ -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 diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshFileTemplateEditor.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshFileTemplateEditor.java index 7d47de854..d4712bcc8 100644 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshFileTemplateEditor.java +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/SshFileTemplateEditor.java @@ -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 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 004e151c5..399f128f5 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 @@ -36,6 +36,7 @@ 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.DeleteAkbNodes; import org.argeo.slc.akb.ui.commands.OpenAkbNodeEditor; import org.argeo.slc.akb.ui.providers.AkbTreeLabelProvider; @@ -81,7 +82,8 @@ public class AkbTemplatesTreeView extends ViewPart { private EventListener allResultsObserver = null; private final static String[] observedNodeTypesUnderAllResults = { AkbTypes.AKB_ENV_TEMPLATE, AkbTypes.AKB_CONNECTOR_ALIAS, - AkbTypes.AKB_ITEM, AkbTypes.AKB_ITEM_FOLDER }; + AkbTypes.AKB_ITEM, AkbTypes.AKB_ITEM_FOLDER, + AkbTypes.AKB_CONNECTOR_FOLDER }; // private EventListener myResultsObserver = null; // private EventListener allResultsObserver = null; @@ -139,29 +141,6 @@ public class AkbTemplatesTreeView extends ViewPart { // 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); - // } } /** @@ -178,6 +157,7 @@ public class AkbTemplatesTreeView extends ViewPart { // The main tree viewer protected TreeViewer createResultsTreeViewer(Composite parent) { + parent.setLayout(AkbUiUtils.gridLayoutNoBorder()); int style = SWT.BORDER | SWT.MULTI; TreeViewer viewer = new TreeViewer(parent, style); @@ -255,9 +235,26 @@ public class AkbTemplatesTreeView extends ViewPart { protected void onEventInUiThread(List events) throws RepositoryException { - resultTreeViewer.setInput(initializeResultTree()); - // if (lastSelectedSourceElementParent != null) - // refresh(lastSelectedSourceElementParent); + 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 = resultTreeViewer.getExpandedElements(); + if (fullRefresh) + resultTreeViewer.setInput(initializeResultTree()); + else + resultTreeViewer.refresh(); + + resultTreeViewer.setExpandedElements(visibles); } } @@ -271,7 +268,6 @@ public class AkbTemplatesTreeView extends ViewPart { private Node[] initializeResultTree() { try { - NodeIterator ni = templatesParentNode.getNodes(); List templates = new ArrayList(); @@ -282,7 +278,6 @@ public class AkbTemplatesTreeView extends ViewPart { } Node[] templateArr = templates.toArray(new Node[templates.size()]); - return templateArr; } catch (RepositoryException re) { throw new AkbException("Error while initializing templates Tree.", 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 7ba191a42..018f094a3 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 @@ -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 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 ad1067348..474fb4798 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 @@ -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) + //