]> git.argeo.org Git - gpl/argeo-slc.git/blob - plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/editors/AkbConnectorAliasEditor.java
Add first draft for Connector Alias and Template environment editors.
[gpl/argeo-slc.git] / plugins / org.argeo.slc.akb.ui / src / main / java / org / argeo / slc / akb / ui / editors / AkbConnectorAliasEditor.java
1 package org.argeo.slc.akb.ui.editors;
2
3 import javax.jcr.Property;
4 import javax.jcr.RepositoryException;
5
6 import org.argeo.slc.akb.AkbException;
7 import org.argeo.slc.akb.AkbNames;
8 import org.argeo.slc.akb.AkbTypes;
9 import org.argeo.slc.akb.ui.AkbUiPlugin;
10 import org.argeo.slc.akb.ui.AkbUiUtils;
11 import org.argeo.slc.akb.utils.AkbJcrUtils;
12 import org.eclipse.jface.dialogs.MessageDialog;
13 import org.eclipse.swt.SWT;
14 import org.eclipse.swt.events.ModifyEvent;
15 import org.eclipse.swt.events.ModifyListener;
16 import org.eclipse.swt.events.SelectionAdapter;
17 import org.eclipse.swt.events.SelectionEvent;
18 import org.eclipse.swt.layout.GridData;
19 import org.eclipse.swt.layout.GridLayout;
20 import org.eclipse.swt.widgets.Button;
21 import org.eclipse.swt.widgets.Combo;
22 import org.eclipse.swt.widgets.Composite;
23 import org.eclipse.swt.widgets.Group;
24 import org.eclipse.swt.widgets.Text;
25 import org.eclipse.ui.forms.AbstractFormPart;
26 import org.eclipse.ui.forms.IManagedForm;
27
28 /**
29 * Display and edit a connector Alias
30 */
31 public class AkbConnectorAliasEditor extends AbstractAkbNodeEditor {
32 // private final static Log log = LogFactory
33 // .getLog(AkbConnectorAliasEditor.class);
34
35 public final static String ID = AkbUiPlugin.PLUGIN_ID
36 + ".akbConnectorAliasEditor";
37
38 private String[] connectorTypesLbl = new String[] { "JDBC", "SSH", "JCR" };
39 private String[] connectorTypes = new String[] {
40 AkbTypes.AKB_JDBC_CONNECTOR, AkbTypes.AKB_SSH_CONNECTOR,
41 AkbTypes.AKB_JCR_CONNECTOR };
42
43 private IManagedForm managedForm;
44
45 /* CONTENT CREATION */
46 @Override
47 public void populateMainPage(Composite parent, IManagedForm managedForm) {
48 parent.setLayout(AkbUiUtils.gridLayoutNoBorder());
49 this.managedForm = managedForm;
50
51 // First line main info
52 Composite firstLine = getToolkit()
53 .createComposite(parent, SWT.NO_FOCUS);
54 firstLine.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
55 createConnectorAliasInfoCmp(firstLine);
56
57 // Second line define defaut connector and test abilities
58 Composite secondLine = getToolkit().createComposite(parent,
59 SWT.NO_FOCUS);
60 secondLine.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
61 createDefaultTestConnectorCmp(secondLine);
62
63 }
64
65 private void createConnectorAliasInfoCmp(Composite parent) {
66 parent.setLayout(new GridLayout(4, false));
67
68 // first line: connector type and name
69 getToolkit().createLabel(parent, "Connector Type");
70 final Combo typeCmb = new Combo(parent, SWT.READ_ONLY);
71 typeCmb.setItems(connectorTypesLbl);
72
73 getToolkit().createLabel(parent, "Name");
74 final Text titleTxt = getToolkit().createText(parent, "", SWT.BORDER);
75 GridData gd = new GridData(SWT.FILL, SWT.TOP, true, false);
76 titleTxt.setLayoutData(gd);
77
78 // 2nd line: description
79 getToolkit().createLabel(parent, "Short Description");
80 final Text descTxt = getToolkit().createText(parent, "", SWT.BORDER);
81 gd = new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1);
82 descTxt.setLayoutData(gd);
83
84 // Part Management
85 final AbstractFormPart part = new AbstractFormPart() {
86 public void refresh() {
87 super.refresh();
88 // update display value
89 AkbUiUtils.refreshFormTextWidget(titleTxt, getAkbNode(),
90 Property.JCR_TITLE);
91 AkbUiUtils.refreshFormTextWidget(descTxt, getAkbNode(),
92 Property.JCR_DESCRIPTION);
93 }
94 };
95 // Listeners
96 AkbUiUtils.addTextModifyListener(titleTxt, getAkbNode(),
97 Property.JCR_TITLE, part);
98 AkbUiUtils.addTextModifyListener(descTxt, getAkbNode(),
99 Property.JCR_DESCRIPTION, part);
100
101 typeCmb.addModifyListener(new ModifyListener() {
102 @Override
103 public void modifyText(ModifyEvent event) {
104
105 try { // TODO enhance this
106
107 // retrieve old and new node type
108 int oldIndex = -1;
109 for (int i = 0; i < connectorTypes.length; i++) {
110 if (getAkbNode().isNodeType(connectorTypes[i])) {
111 oldIndex = i;
112 break;
113 }
114 }
115 int selIndex = typeCmb.getSelectionIndex();
116
117 // insure something has really been modified
118 if (selIndex < 0 || oldIndex == selIndex)
119 return;
120
121 // remove old mixin, add new and notify form
122 if (oldIndex > -1)
123 getAkbNode().removeMixin(connectorTypes[oldIndex]);
124 getAkbNode().addMixin(connectorTypes[selIndex]);
125 part.markDirty();
126 } catch (RepositoryException e) {
127 throw new AkbException(
128 "Error while updating connector type", e);
129 }
130 }
131 });
132
133 managedForm.addPart(part);
134 }
135
136 private void createDefaultTestConnectorCmp(Composite parent) {
137 String groupTitle = "Default test instance";
138 parent.setLayout(new GridLayout());
139 Group group = new Group(parent, SWT.NONE);
140 group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
141 getToolkit().adapt(group, false, false);
142
143 group.setText(groupTitle);
144 group.setLayout(AkbUiUtils.gridLayoutNoBorder());
145 // 1st line: the URL
146
147 Composite firstLine = getToolkit().createComposite(group);
148 firstLine.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
149 firstLine.setLayout(new GridLayout(3, false));
150
151 getToolkit().createLabel(firstLine, "URL");
152 final Text urlTxt = getToolkit().createText(firstLine, "", SWT.BORDER);
153 urlTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
154
155 final Button testBtn = getToolkit().createButton(firstLine,
156 "Test connection", SWT.PUSH);
157 // testBtn.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false,
158 // false));
159
160 // Part Management
161 final AbstractFormPart part = new AbstractFormPart() {
162 public void refresh() {
163 super.refresh();
164 // update display value
165 AkbUiUtils.refreshFormTextWidget(urlTxt, getAkbNode(),
166 AkbNames.AKB_CONNECTOR_URL);
167 }
168 };
169 // Listeners
170 AkbUiUtils.addTextModifyListener(urlTxt, getAkbNode(),
171 AkbNames.AKB_CONNECTOR_URL, part);
172
173 testBtn.addSelectionListener(new SelectionAdapter() {
174 @Override
175 public void widgetSelected(SelectionEvent e) {
176 boolean testSuccesfull = getAkbService().testConnector(
177 getAkbNode());
178
179 String name = AkbJcrUtils.get(getAkbNode(), Property.JCR_TITLE);
180 String url = AkbJcrUtils.get(getAkbNode(),
181 AkbNames.AKB_CONNECTOR_URL);
182
183 String msg = "to " + name + " (" + url + ")";
184 if (testSuccesfull)
185 MessageDialog.openInformation(getSite().getShell(),
186 "Test successful", "Successfully connected " + msg);
187 else
188 MessageDialog.openError(getSite().getShell(),
189 "Test failure", "Unable to connect" + msg);
190 }
191 });
192
193 managedForm.addPart(part);
194
195 }
196
197 @Override
198 protected String getEditorId() {
199 return ID;
200 }
201 }