]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/ConnectorAliasEditor.java
First unfinished drafts for items editors
[gpl/argeo-slc.git] / plugins / org.argeo.slc.akb.ui / src / main / java / org / argeo / slc / akb / ui / editors / ConnectorAliasEditor.java
diff --git a/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/ConnectorAliasEditor.java b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/ConnectorAliasEditor.java
new file mode 100644 (file)
index 0000000..b272a38
--- /dev/null
@@ -0,0 +1,213 @@
+package org.argeo.slc.akb.ui.editors;
+
+import javax.jcr.Property;
+import javax.jcr.RepositoryException;
+
+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.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.Button;
+import org.eclipse.swt.widgets.Combo;
+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
+ */
+public class ConnectorAliasEditor extends AbstractAkbNodeEditor {
+       // private final static Log log = LogFactory
+       // .getLog(AkbConnectorAliasEditor.class);
+
+       public final static String ID = AkbUiPlugin.PLUGIN_ID
+                       + ".connectorAliasEditor";
+
+       private String[] connectorTypesLbl = new String[] { "JDBC", "SSH", "JCR" };
+       private String[] connectorTypes = new String[] {
+                       AkbTypes.AKB_JDBC_CONNECTOR, AkbTypes.AKB_SSH_CONNECTOR,
+                       AkbTypes.AKB_JCR_CONNECTOR };
+
+       private IManagedForm managedForm;
+
+       /* CONTENT CREATION */
+       @Override
+       public void populateMainPage(Composite parent, IManagedForm managedForm) {
+               parent.setLayout(AkbUiUtils.gridLayoutNoBorder());
+               this.managedForm = managedForm;
+
+               // First line main info
+               Composite firstLine = getToolkit()
+                               .createComposite(parent, SWT.NO_FOCUS);
+               firstLine.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+               createConnectorAliasInfoCmp(firstLine);
+
+               // Second line define defaut connector and test abilities
+               Composite secondLine = getToolkit().createComposite(parent,
+                               SWT.NO_FOCUS);
+               secondLine.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+               createDefaultTestConnectorCmp(secondLine);
+
+       }
+
+       private void createConnectorAliasInfoCmp(Composite parent) {
+               parent.setLayout(new GridLayout(4, false));
+
+               // first line: connector type and name
+               getToolkit().createLabel(parent, "Connector Type");
+               final Combo typeCmb = new Combo(parent, SWT.READ_ONLY);
+               typeCmb.setItems(connectorTypesLbl);
+
+               getToolkit().createLabel(parent, "Name");
+               final Text titleTxt = getToolkit().createText(parent, "", SWT.BORDER);
+               GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false);
+               titleTxt.setLayoutData(gd);
+
+               // 2nd line: description
+               getToolkit().createLabel(parent, "Short Description");
+               final Text descTxt = getToolkit().createText(parent, "", SWT.BORDER);
+               gd = new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1);
+               descTxt.setLayoutData(gd);
+
+               // Part Management
+               final AbstractFormPart part = new AbstractFormPart() {
+                       public void refresh() {
+                               super.refresh();
+                               // update display value
+                               AkbUiUtils.refreshFormTextWidget(titleTxt, getAkbNode(),
+                                               Property.JCR_TITLE);
+                               AkbUiUtils.refreshFormTextWidget(descTxt, getAkbNode(),
+                                               Property.JCR_DESCRIPTION);
+                               typeCmb.select(getCurrTypeIndex());
+                               typeCmb.setEnabled(AkbJcrUtils
+                                               .isNodeCheckedOutByMe(getAkbNode()));
+                       }
+               };
+               // Listeners
+               AkbUiUtils.addTextModifyListener(titleTxt, getAkbNode(),
+                               Property.JCR_TITLE, part);
+               AkbUiUtils.addTextModifyListener(descTxt, getAkbNode(),
+                               Property.JCR_DESCRIPTION, part);
+
+               typeCmb.addModifyListener(new ModifyListener() {
+                       @Override
+                       public void modifyText(ModifyEvent event) {
+
+                               try { // TODO enhance this
+                                       // retrieve old and new node type
+                                       int oldIndex = getCurrTypeIndex();
+                                       int selIndex = typeCmb.getSelectionIndex();
+
+                                       // insure something has really been modified
+                                       if (selIndex < 0 || oldIndex == selIndex)
+                                               return;
+
+                                       // remove old mixin, add new and notify form
+                                       if (oldIndex > -1)
+                                               getAkbNode().removeMixin(connectorTypes[oldIndex]);
+                                       getAkbNode().addMixin(connectorTypes[selIndex]);
+                                       part.markDirty();
+                               } catch (RepositoryException e) {
+                                       throw new AkbException(
+                                                       "Error while updating connector type", e);
+                               }
+                       }
+               });
+               managedForm.addPart(part);
+       }
+
+       private int getCurrTypeIndex() {
+               try {
+                       int oldIndex = -1;
+                       for (int i = 0; i < connectorTypes.length; i++) {
+                               if (getAkbNode().isNodeType(connectorTypes[i])) {
+                                       oldIndex = i;
+                                       break;
+
+                               }
+                       }
+                       return oldIndex;
+               } catch (RepositoryException e) {
+                       throw new AkbException("Error while getting connector type", e);
+               }
+
+       }
+
+       private void createDefaultTestConnectorCmp(Composite parent) {
+               String groupTitle = "Default test instance";
+               parent.setLayout(new GridLayout());
+               Group group = new Group(parent, SWT.NONE);
+               group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+               getToolkit().adapt(group, false, false);
+
+               group.setText(groupTitle);
+               group.setLayout(AkbUiUtils.gridLayoutNoBorder());
+               // 1st line: the URL
+
+               Composite firstLine = getToolkit().createComposite(group);
+               firstLine.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+               firstLine.setLayout(new GridLayout(3, false));
+
+               getToolkit().createLabel(firstLine, "URL");
+               final Text urlTxt = getToolkit().createText(firstLine, "", SWT.BORDER);
+               urlTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+
+               final Button testBtn = getToolkit().createButton(firstLine,
+                               "Test connection", SWT.PUSH);
+               // testBtn.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false,
+               // false));
+
+               // Part Management
+               final AbstractFormPart part = new AbstractFormPart() {
+                       public void refresh() {
+                               super.refresh();
+                               // update display value
+                               AkbUiUtils.refreshFormTextWidget(urlTxt, getAkbNode(),
+                                               AkbNames.AKB_CONNECTOR_URL);
+                       }
+               };
+               // Listeners
+               AkbUiUtils.addTextModifyListener(urlTxt, getAkbNode(),
+                               AkbNames.AKB_CONNECTOR_URL, part);
+
+               testBtn.addSelectionListener(new SelectionAdapter() {
+                       @Override
+                       public void widgetSelected(SelectionEvent e) {
+                               boolean testSuccesfull = getAkbService().testConnector(
+                                               getAkbNode());
+
+                               String name = AkbJcrUtils.get(getAkbNode(), Property.JCR_TITLE);
+                               String url = AkbJcrUtils.get(getAkbNode(),
+                                               AkbNames.AKB_CONNECTOR_URL);
+
+                               String msg = "to " + name + " (" + url + ")";
+                               if (testSuccesfull)
+                                       MessageDialog.openInformation(getSite().getShell(),
+                                                       "Test successful", "Successfully connected " + msg);
+                               else
+                                       MessageDialog.openError(getSite().getShell(),
+                                                       "Test failure", "Unable to connect" + msg);
+                       }
+               });
+
+               managedForm.addPart(part);
+
+       }
+
+       @Override
+       protected String getEditorId() {
+               return ID;
+       }
+}
\ No newline at end of file