]> git.argeo.org Git - gpl/argeo-slc.git/blob - plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/composites/AliasListItemComposite.java
Prepare SLC v1.1.15 release
[gpl/argeo-slc.git] / plugins / org.argeo.slc.akb.ui / src / main / java / org / argeo / slc / akb / ui / composites / AliasListItemComposite.java
1 package org.argeo.slc.akb.ui.composites;
2
3 import javax.jcr.Node;
4 import javax.jcr.Property;
5 import javax.jcr.RepositoryException;
6 import javax.jcr.Session;
7
8 import org.argeo.eclipse.ui.ErrorFeedback;
9 import org.argeo.eclipse.ui.utils.CommandUtils;
10 import org.argeo.slc.akb.AkbException;
11 import org.argeo.slc.akb.AkbNames;
12 import org.argeo.slc.akb.AkbService;
13 import org.argeo.slc.akb.AkbTypes;
14 import org.argeo.slc.akb.ui.AkbImages;
15 import org.argeo.slc.akb.ui.AkbUiUtils;
16 import org.argeo.slc.akb.ui.commands.DeleteAkbNodes;
17 import org.argeo.slc.akb.ui.wizards.ActiveConnectorWizard;
18 import org.argeo.slc.akb.utils.AkbJcrUtils;
19 import org.eclipse.jface.dialogs.MessageDialog;
20 import org.eclipse.jface.wizard.WizardDialog;
21 import org.eclipse.swt.SWT;
22 import org.eclipse.swt.events.SelectionAdapter;
23 import org.eclipse.swt.events.SelectionEvent;
24 import org.eclipse.swt.layout.GridData;
25 import org.eclipse.swt.layout.GridLayout;
26 import org.eclipse.swt.widgets.Composite;
27 import org.eclipse.swt.widgets.Label;
28 import org.eclipse.swt.widgets.Link;
29 import org.eclipse.swt.widgets.Text;
30 import org.eclipse.ui.forms.AbstractFormPart;
31 import org.eclipse.ui.forms.IFormPart;
32 import org.eclipse.ui.forms.IManagedForm;
33 import org.eclipse.ui.forms.widgets.FormToolkit;
34
35 /** Default composite to display a connector alias. */
36 public class AliasListItemComposite extends Composite {
37
38 private final AkbService akbService;
39 private final Node connectorAlias;
40 private final Node activeEnv;
41 private final boolean isActive;
42 private final Node activeConnector;
43 private final FormToolkit toolkit;
44 private final IManagedForm form;
45
46 // Don't forget to unregister on dispose
47 private AbstractFormPart formPart;
48
49 // To enable set focus
50 private Text titleTxt;
51
52 public AliasListItemComposite(Composite parent, int style,
53 FormToolkit toolkit, IManagedForm form, Node envNode,
54 String aliasPath, AkbService akbService) {
55 super(parent, style);
56 this.activeEnv = envNode;
57 try {
58 isActive = activeEnv.isNodeType(AkbTypes.AKB_ENV);
59 this.activeConnector = akbService.getActiveConnectorByAlias(
60 envNode, aliasPath);
61 this.connectorAlias = activeEnv.getSession().getNode(aliasPath);
62 } catch (RepositoryException e) {
63 throw new AkbException("Unable to get activeConnector for node", e);
64 }
65 this.toolkit = toolkit;
66 this.form = form;
67 this.akbService = akbService;
68 populate();
69 toolkit.adapt(this);
70 }
71
72 private void populate() {
73 // Initialization
74 Composite parent = this;
75 createConnectorAliasInfoCmp(parent);
76 }
77
78 private void createConnectorAliasInfoCmp(Composite parent) {
79 GridLayout gl = AkbUiUtils.gridLayoutNoBorder();
80 gl.marginBottom = 5;
81
82 parent.setLayout(gl);
83 Composite firstLine = toolkit.createComposite(parent, SWT.NO_FOCUS);
84 firstLine.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
85 firstLine.setLayout(new GridLayout(6, false));
86
87 // Image
88 final Label image = toolkit.createLabel(firstLine, "", SWT.NONE);
89 GridData gd = new GridData(SWT.LEFT, SWT.CENTER, false, false);
90 try {
91 image.setImage(AkbImages.getImageForAkbNodeType(activeConnector
92 .getPrimaryNodeType().getName()));
93 } catch (RepositoryException e2) {
94 // silent
95 }
96 image.setLayoutData(gd);
97
98 // Name
99 final Text titleTxt = toolkit.createText(firstLine, "", SWT.NONE);
100 gd = new GridData(SWT.LEFT, SWT.CENTER, false, false);
101 gd.widthHint = 150;
102 titleTxt.setLayoutData(gd);
103
104 // Description
105 final Text descTxt = toolkit.createText(firstLine, "", SWT.NONE);
106 gd = new GridData(SWT.LEFT, SWT.CENTER, false, false);
107 gd.widthHint = 220;
108 descTxt.setLayoutData(gd);
109
110 final Link testBtn = new Link(firstLine, SWT.NONE);
111 toolkit.adapt(testBtn, false, false);
112 testBtn.setText("<a>Test</a>");
113 testBtn.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false));
114
115 final Link editActiveConnLk = new Link(firstLine, SWT.NONE);
116 toolkit.adapt(editActiveConnLk, false, false);
117 // editActiveConnLk.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER,
118 // true, false));
119
120 // Part Management
121 formPart = new AbstractFormPart() {
122 public void refresh() {
123 super.refresh();
124 if (titleTxt.isDisposed())
125 return;
126 // update display value
127 AkbUiUtils.refreshFormTextWidget(titleTxt, connectorAlias,
128 Property.JCR_TITLE, "Name");
129 AkbUiUtils.refreshFormTextWidget(descTxt, connectorAlias,
130 Property.JCR_DESCRIPTION, "Short description");
131
132 if (isActive) {
133 titleTxt.setEditable(false);
134 descTxt.setEditable(false);
135 editActiveConnLk.setText("<a>Edit connector instance</a>");
136 } else {
137 titleTxt.setEditable(true);
138 descTxt.setEditable(true);
139 editActiveConnLk.setText("<a>Edit default connector</a>");
140 }
141 }
142 };
143
144 if (!isActive) {
145 final Link removeBtn = new Link(firstLine, SWT.NONE);
146 toolkit.adapt(removeBtn, false, false);
147 removeBtn.setText("<a>Delete</a>");
148 removeBtn.addSelectionListener(new SelectionAdapter() {
149 @Override
150 public void widgetSelected(SelectionEvent e) {
151 try {
152
153 try {
154 connectorAlias.getPath();
155 } catch (Exception ex) {
156 // node has been removed.
157 // silent
158 return;
159 }
160
161 // Manually check if corresponding node was really
162 // removed
163 Session session = connectorAlias.getSession();
164 String absPath = connectorAlias.getPath();
165
166 form.removePart(formPart);
167
168 CommandUtils.CallCommandWithOneParameter(
169 DeleteAkbNodes.ID,
170 DeleteAkbNodes.PARAM_NODE_JCR_ID, AkbJcrUtils
171 .getIdentifierQuietly(connectorAlias));
172
173 if (session.nodeExists(absPath)) {
174 form.addPart(formPart);
175 } else {
176 for (IFormPart cpart : form.getParts())
177 cpart.refresh();
178 }
179
180 } catch (RepositoryException re) {
181 throw new AkbException(
182 "Error while removing connector Alias ", re);
183 }
184 }
185 });
186 }
187
188 // Listeners
189 AkbUiUtils.addTextModifyListener(titleTxt, connectorAlias,
190 Property.JCR_TITLE, formPart);
191 AkbUiUtils.addTextModifyListener(descTxt, connectorAlias,
192 Property.JCR_DESCRIPTION, formPart);
193
194 testBtn.addSelectionListener(new SelectionAdapter() {
195 @Override
196 public void widgetSelected(SelectionEvent e) {
197 boolean testSuccesfull;
198 try {
199 testSuccesfull = akbService.testConnector(activeConnector);
200 } catch (Exception e1) {
201 testSuccesfull = false;
202 ErrorFeedback.show("Cannot test connection", e1);
203 }
204 String name = AkbJcrUtils.get(activeConnector,
205 Property.JCR_TITLE);
206 String url = AkbJcrUtils.get(activeConnector,
207 AkbNames.AKB_CONNECTOR_URL);
208 String msg = " to " + name + " (" + url + ")";
209 if (testSuccesfull)
210 MessageDialog.openInformation(
211 getDisplay().getActiveShell(), "Test successful",
212 "Successfully connected " + msg);
213 else
214 MessageDialog.openError(getDisplay().getActiveShell(),
215 "Test failure", "Unable to connect" + msg);
216 }
217 });
218
219 editActiveConnLk.addSelectionListener(new SelectionAdapter() {
220 @Override
221 public void widgetSelected(final SelectionEvent event) {
222 ActiveConnectorWizard wizard = new ActiveConnectorWizard(
223 akbService, activeConnector);
224 WizardDialog dialog = new WizardDialog(getShell(), wizard);
225 dialog.open();
226 }
227 });
228
229 // force refresh to initialize various fields on creation
230 formPart.refresh();
231 form.addPart(formPart);
232 }
233
234 @Override
235 public boolean setFocus() {
236 if (titleTxt != null)
237 return titleTxt.setFocus();
238 return false;
239 }
240
241 protected void disposePart(AbstractFormPart part) {
242 if (part != null) {
243 form.removePart(part);
244 part.dispose();
245 }
246 }
247
248 @Override
249 public void dispose() {
250 disposePart(formPart);
251 super.dispose();
252 }
253 }