Edit connector wizard
authorBruno Sinou <bsinou@argeo.org>
Sat, 16 Nov 2013 10:26:15 +0000 (10:26 +0000)
committerBruno Sinou <bsinou@argeo.org>
Sat, 16 Nov 2013 10:26:15 +0000 (10:26 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@6618 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/ActiveItemHeaderComposite.java
plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/wizards/ActiveConnectorWizard.java [new file with mode: 0644]
runtime/org.argeo.slc.akb/src/main/java/org/argeo/slc/akb/core/AkbServiceImpl.java

index b067a66cee2932d9e0c24eff5d09db15aee41ecb..92e74694589fa81776dc2cf5e3877781eeebf9e2 100644 (file)
@@ -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<String, String> params = new HashMap<String, String>();
-                                       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<String, String> params = new HashMap<String,
+                                       // String>();
+                                       // 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 (file)
index 0000000..5d90727
--- /dev/null
@@ -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("<a>Save and test</a>");
+
+                       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
index 83de7294c8b96b0c8d7cdc49d92dcd87d8460a5b..df24ef108fc427f3a24cf7f6c95ea029956d3ee7 100644 (file)
@@ -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