]> git.argeo.org Git - gpl/argeo-slc.git/blob - plugins/org.argeo.slc.akb.ui/src/main/java/org/argeo/slc/akb/ui/wizards/ActiveConnectorWizard.java
5d907278e261acf663183253467b366f6ed7cad4
[gpl/argeo-slc.git] / plugins / org.argeo.slc.akb.ui / src / main / java / org / argeo / slc / akb / ui / wizards / ActiveConnectorWizard.java
1 package org.argeo.slc.akb.ui.wizards;
2
3 import javax.jcr.Node;
4 import javax.jcr.Property;
5 import javax.jcr.PropertyType;
6 import javax.jcr.RepositoryException;
7
8 import org.argeo.eclipse.ui.ErrorFeedback;
9 import org.argeo.slc.akb.AkbException;
10 import org.argeo.slc.akb.AkbNames;
11 import org.argeo.slc.akb.AkbService;
12 import org.argeo.slc.akb.ui.AkbUiUtils;
13 import org.argeo.slc.akb.utils.AkbJcrUtils;
14 import org.eclipse.jface.dialogs.MessageDialog;
15 import org.eclipse.jface.wizard.Wizard;
16 import org.eclipse.jface.wizard.WizardPage;
17 import org.eclipse.swt.SWT;
18 import org.eclipse.swt.events.ModifyEvent;
19 import org.eclipse.swt.events.ModifyListener;
20 import org.eclipse.swt.events.SelectionAdapter;
21 import org.eclipse.swt.events.SelectionEvent;
22 import org.eclipse.swt.layout.GridData;
23 import org.eclipse.swt.layout.GridLayout;
24 import org.eclipse.swt.widgets.Composite;
25 import org.eclipse.swt.widgets.Label;
26 import org.eclipse.swt.widgets.Link;
27 import org.eclipse.swt.widgets.Shell;
28 import org.eclipse.swt.widgets.Text;
29
30 /** Creates or edit a connector instance */
31 public class ActiveConnectorWizard extends Wizard {
32
33 // private Session session;
34 private AkbService akbService;
35 private Node activeConnector;
36 // private Node createdNode;
37
38 // pages
39 private EditConnectorPage editConnectorPage;
40
41 public ActiveConnectorWizard(AkbService akbService, Node activeConnector) {
42 this.akbService = akbService;
43 this.activeConnector = activeConnector;
44 }
45
46 @Override
47 public void addPages() {
48 editConnectorPage = new EditConnectorPage();
49 addPage(editConnectorPage);
50 }
51
52 @Override
53 public boolean performFinish() {
54 return doUpdate();
55 }
56
57 private boolean doUpdate() {
58 if (!canFinish())
59 return false;
60 try {
61 boolean changed = true;
62 changed &= AkbUiUtils.setJcrProperty(activeConnector,
63 AkbNames.AKB_CONNECTOR_URL, PropertyType.STRING,
64 editConnectorPage.getUrl());
65 changed &= AkbUiUtils.setJcrProperty(activeConnector,
66 AkbNames.AKB_CONNECTOR_USER, PropertyType.STRING,
67 editConnectorPage.getUser());
68 if (changed)
69 activeConnector.getSession().save();
70 return changed;
71 } catch (RepositoryException re) {
72 throw new AkbException("Unable to update active connector", re);
73 }
74 }
75
76 private boolean doTest() {
77 boolean testSuccesfull;
78 try {
79 testSuccesfull = akbService.testConnector(activeConnector);
80 } catch (Exception e1) {
81 testSuccesfull = false;
82 ErrorFeedback.show("Cannot test connection", e1);
83 }
84 String name = AkbJcrUtils.get(activeConnector, Property.JCR_TITLE);
85 String url = AkbJcrUtils.get(activeConnector,
86 AkbNames.AKB_CONNECTOR_URL);
87 String msg = " to " + name + " (" + url + ")";
88 Shell shell = ActiveConnectorWizard.this.getShell();
89 if (testSuccesfull) {
90 MessageDialog.openInformation(shell, "Test successful",
91 "Successfully connected " + msg);
92 } else
93 MessageDialog.openError(shell, "Test failure", "Unable to connect"
94 + msg);
95 return testSuccesfull;
96 }
97
98 public boolean canFinish() {
99 if (AkbJcrUtils.isEmptyString(editConnectorPage.getUrl())
100 || AkbJcrUtils.isEmptyString(editConnectorPage.getUser()))
101 return true;
102 else
103 return false;
104 }
105
106 // //////////////////////
107 // Pages definition
108 /**
109 * Displays a combo box that enables user to choose which action to perform
110 */
111 private class EditConnectorPage extends WizardPage {
112 private Text urlTxt;
113 private Text userTxt;
114
115 public EditConnectorPage() {
116 super("Edit connector");
117 setTitle("Edit connector");
118 setDescription("Edit or create an active connector");
119 }
120
121 @Override
122 public void createControl(Composite parent) {
123 Composite container = new Composite(parent, SWT.NO_FOCUS);
124 GridLayout gl = new GridLayout(2, false);
125 container.setLayout(gl);
126
127 new Label(container, NONE).setText("URL");
128 urlTxt = new Text(container, SWT.NONE);
129 urlTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
130 AkbUiUtils.refreshFormTextWidget(urlTxt, activeConnector,
131 AkbNames.AKB_CONNECTOR_URL);
132 urlTxt.addModifyListener(new ModifyListener() {
133 @Override
134 public void modifyText(ModifyEvent e) {
135 // TODO implement here name validation.
136 getWizard().getContainer().updateButtons();
137 }
138 });
139
140 new Label(container, NONE).setText("User");
141 userTxt = new Text(container, SWT.NONE);
142 userTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
143 AkbUiUtils.refreshFormTextWidget(userTxt, activeConnector,
144 AkbNames.AKB_CONNECTOR_USER);
145 userTxt.addModifyListener(new ModifyListener() {
146 @Override
147 public void modifyText(ModifyEvent e) {
148 // TODO implement here name validation.
149 getWizard().getContainer().updateButtons();
150 }
151 });
152
153 new Label(container, SWT.SEPARATOR | SWT.SHADOW_OUT
154 | SWT.HORIZONTAL).setLayoutData(new GridData(SWT.FILL,
155 SWT.FILL, false, false, 2, 1));
156
157 Link testBtn = new Link(container, SWT.NONE);
158 testBtn.setText("<a>Save and test</a>");
159
160 testBtn.addSelectionListener(new SelectionAdapter() {
161 @Override
162 public void widgetSelected(SelectionEvent e) {
163 doUpdate();
164 doTest();
165 }
166 });
167
168 setControl(container);
169 }
170
171 protected String getUrl() {
172 return
173 // String url =
174 urlTxt.getText();
175 // if (AkbJcrUtils.isEmptyString(url))
176 // return null;
177 // else
178 // return url;
179 }
180
181 protected String getUser() {
182 return userTxt.getText();
183 }
184 }
185 }