From 1a0e1b439c58df2f39495ed756df06ca00e384e1 Mon Sep 17 00:00:00 2001 From: Bruno Sinou Date: Sat, 16 Nov 2013 10:26:15 +0000 Subject: [PATCH 1/1] Edit connector wizard git-svn-id: https://svn.argeo.org/slc/trunk@6618 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../composites/ActiveItemHeaderComposite.java | 28 +-- .../akb/ui/wizards/ActiveConnectorWizard.java | 185 ++++++++++++++++++ .../argeo/slc/akb/core/AkbServiceImpl.java | 15 +- 3 files changed, 210 insertions(+), 18 deletions(-) create mode 100644 plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/wizards/ActiveConnectorWizard.java diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ActiveItemHeaderComposite.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ActiveItemHeaderComposite.java index b067a66ce..92e746945 100644 --- a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ActiveItemHeaderComposite.java +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ActiveItemHeaderComposite.java @@ -1,8 +1,5 @@ package org.argeo.slc.akb.ui.composites; -import java.util.HashMap; -import java.util.Map; - import javax.jcr.Node; import javax.jcr.Property; import javax.jcr.RepositoryException; @@ -12,8 +9,9 @@ import org.argeo.slc.akb.AkbException; import org.argeo.slc.akb.AkbNames; import org.argeo.slc.akb.AkbService; import org.argeo.slc.akb.ui.commands.ForceRefresh; -import org.argeo.slc.akb.ui.commands.OpenAkbNodeEditor; +import org.argeo.slc.akb.ui.wizards.ActiveConnectorWizard; import org.argeo.slc.akb.utils.AkbJcrUtils; +import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; @@ -113,14 +111,20 @@ public class ActiveItemHeaderComposite extends Composite { Node activeConnector = akbService .getActiveConnectorByAlias(envNode, pathId); - String id = AkbJcrUtils - .getIdentifierQuietly(activeConnector); - Map params = new HashMap(); - params.put(OpenAkbNodeEditor.PARAM_NODE_JCR_ID, id); - params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID, - AkbJcrUtils.getIdentifierQuietly(envNode)); - - CommandUtils.callCommand(OpenAkbNodeEditor.ID, params); + ActiveConnectorWizard wizard = new ActiveConnectorWizard( + akbService, activeConnector); + WizardDialog dialog = new WizardDialog(getShell(), wizard); + dialog.open(); + + // String id = AkbJcrUtils + // .getIdentifierQuietly(activeConnector); + // Map params = new HashMap(); + // params.put(OpenAkbNodeEditor.PARAM_NODE_JCR_ID, id); + // params.put(OpenAkbNodeEditor.PARAM_CURR_ENV_JCR_ID, + // AkbJcrUtils.getIdentifierQuietly(envNode)); + // + // CommandUtils.callCommand(OpenAkbNodeEditor.ID, params); } catch (RepositoryException e) { throw new AkbException("Error opening active connector", e); } diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/wizards/ActiveConnectorWizard.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/wizards/ActiveConnectorWizard.java new file mode 100644 index 000000000..5d907278e --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/wizards/ActiveConnectorWizard.java @@ -0,0 +1,185 @@ +package org.argeo.slc.akb.ui.wizards; + +import javax.jcr.Node; +import javax.jcr.Property; +import javax.jcr.PropertyType; +import javax.jcr.RepositoryException; + +import org.argeo.eclipse.ui.ErrorFeedback; +import org.argeo.slc.akb.AkbException; +import org.argeo.slc.akb.AkbNames; +import org.argeo.slc.akb.AkbService; +import org.argeo.slc.akb.ui.AkbUiUtils; +import org.argeo.slc.akb.utils.AkbJcrUtils; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.wizard.Wizard; +import org.eclipse.jface.wizard.WizardPage; +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.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Link; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; + +/** Creates or edit a connector instance */ +public class ActiveConnectorWizard extends Wizard { + + // private Session session; + private AkbService akbService; + private Node activeConnector; + // private Node createdNode; + + // pages + private EditConnectorPage editConnectorPage; + + public ActiveConnectorWizard(AkbService akbService, Node activeConnector) { + this.akbService = akbService; + this.activeConnector = activeConnector; + } + + @Override + public void addPages() { + editConnectorPage = new EditConnectorPage(); + addPage(editConnectorPage); + } + + @Override + public boolean performFinish() { + return doUpdate(); + } + + private boolean doUpdate() { + if (!canFinish()) + return false; + try { + boolean changed = true; + changed &= AkbUiUtils.setJcrProperty(activeConnector, + AkbNames.AKB_CONNECTOR_URL, PropertyType.STRING, + editConnectorPage.getUrl()); + changed &= AkbUiUtils.setJcrProperty(activeConnector, + AkbNames.AKB_CONNECTOR_USER, PropertyType.STRING, + editConnectorPage.getUser()); + if (changed) + activeConnector.getSession().save(); + return changed; + } catch (RepositoryException re) { + throw new AkbException("Unable to update active connector", re); + } + } + + private boolean doTest() { + boolean testSuccesfull; + try { + testSuccesfull = akbService.testConnector(activeConnector); + } catch (Exception e1) { + testSuccesfull = false; + ErrorFeedback.show("Cannot test connection", e1); + } + String name = AkbJcrUtils.get(activeConnector, Property.JCR_TITLE); + String url = AkbJcrUtils.get(activeConnector, + AkbNames.AKB_CONNECTOR_URL); + String msg = " to " + name + " (" + url + ")"; + Shell shell = ActiveConnectorWizard.this.getShell(); + if (testSuccesfull) { + MessageDialog.openInformation(shell, "Test successful", + "Successfully connected " + msg); + } else + MessageDialog.openError(shell, "Test failure", "Unable to connect" + + msg); + return testSuccesfull; + } + + public boolean canFinish() { + if (AkbJcrUtils.isEmptyString(editConnectorPage.getUrl()) + || AkbJcrUtils.isEmptyString(editConnectorPage.getUser())) + return true; + else + return false; + } + + // ////////////////////// + // Pages definition + /** + * Displays a combo box that enables user to choose which action to perform + */ + private class EditConnectorPage extends WizardPage { + private Text urlTxt; + private Text userTxt; + + public EditConnectorPage() { + super("Edit connector"); + setTitle("Edit connector"); + setDescription("Edit or create an active connector"); + } + + @Override + public void createControl(Composite parent) { + Composite container = new Composite(parent, SWT.NO_FOCUS); + GridLayout gl = new GridLayout(2, false); + container.setLayout(gl); + + new Label(container, NONE).setText("URL"); + urlTxt = new Text(container, SWT.NONE); + urlTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + AkbUiUtils.refreshFormTextWidget(urlTxt, activeConnector, + AkbNames.AKB_CONNECTOR_URL); + urlTxt.addModifyListener(new ModifyListener() { + @Override + public void modifyText(ModifyEvent e) { + // TODO implement here name validation. + getWizard().getContainer().updateButtons(); + } + }); + + new Label(container, NONE).setText("User"); + userTxt = new Text(container, SWT.NONE); + userTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + AkbUiUtils.refreshFormTextWidget(userTxt, activeConnector, + AkbNames.AKB_CONNECTOR_USER); + userTxt.addModifyListener(new ModifyListener() { + @Override + public void modifyText(ModifyEvent e) { + // TODO implement here name validation. + getWizard().getContainer().updateButtons(); + } + }); + + new Label(container, SWT.SEPARATOR | SWT.SHADOW_OUT + | SWT.HORIZONTAL).setLayoutData(new GridData(SWT.FILL, + SWT.FILL, false, false, 2, 1)); + + Link testBtn = new Link(container, SWT.NONE); + testBtn.setText("Save and test"); + + testBtn.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + doUpdate(); + doTest(); + } + }); + + setControl(container); + } + + protected String getUrl() { + return + // String url = + urlTxt.getText(); + // if (AkbJcrUtils.isEmptyString(url)) + // return null; + // else + // return url; + } + + protected String getUser() { + return userTxt.getText(); + } + } +} \ No newline at end of file diff --git a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/core/AkbServiceImpl.java b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/core/AkbServiceImpl.java index 83de7294c..df24ef108 100644 --- a/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/core/AkbServiceImpl.java +++ b/runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/core/AkbServiceImpl.java @@ -114,12 +114,8 @@ public class AkbServiceImpl implements AkbService, AkbNames { throws RepositoryException { Node newTemplate = parentNode.addNode(name, AkbTypes.AKB_ENV_TEMPLATE); newTemplate.setProperty(Property.JCR_TITLE, name); - - // Node connectorParent = newTemplate.addNode(AkbTypes.AKB_CONNECTOR_FOLDER, AkbTypes.AKB_CONNECTOR_FOLDER); - // connectorParent.setProperty(Property.JCR_TITLE, connectorParentName); - return newTemplate; } @@ -140,11 +136,18 @@ public class AkbServiceImpl implements AkbService, AkbNames { NodeIterator ni = template.getNode(AkbTypes.AKB_CONNECTOR_FOLDER) .getNodes(); - while (ni.hasNext()) { + activeConns: while (ni.hasNext()) { Node currNode = ni.nextNode(); if (currNode.isNodeType(AkbTypes.AKB_CONNECTOR_ALIAS)) { + String connType = currNode.getProperty(AKB_CONNECTOR_TYPE) + .getString(); + + if (AkbJcrUtils.isEmptyString(connType)) + // Cannot create an instance if the type is undefined + continue activeConns; + Node newConnector = connectorParent.addNode(currNode.getName(), - AkbTypes.AKB_CONNECTOR); + connType); newConnector.setProperty(AKB_CONNECTOR_ALIAS_PATH, currNode.getPath()); if (copyDefaultConnectors -- 2.39.2