X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=plugins%2Forg.argeo.slc.akb.ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fakb%2Fui%2Feditors%2FConnectorAliasEditor.java;fp=plugins%2Forg.argeo.slc.akb.ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fakb%2Fui%2Feditors%2FConnectorAliasEditor.java;h=b272a38f4763dac331a799ecd7739d7a56b5601b;hb=da17a59fb316462126c56099d3670a7cd38a8906;hp=0000000000000000000000000000000000000000;hpb=cce1ca8a555b41f6ca0a77ab549a5e1461f2bb15;p=gpl%2Fargeo-slc.git 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 index 000000000..b272a38f4 --- /dev/null +++ b/plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/ConnectorAliasEditor.java @@ -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