]> 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
Fix keyring on active environments and a few bugs
[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 if (!canFinish())
55 return false;
56 doUpdate();
57 return true;
58 }
59
60 private void doUpdate() {
61 try {
62 boolean changed = false;
63 changed |= AkbUiUtils.setJcrProperty(activeConnector,
64 AkbNames.AKB_CONNECTOR_URL, PropertyType.STRING,
65 editConnectorPage.getUrl());
66 changed |= AkbUiUtils.setJcrProperty(activeConnector,
67 AkbNames.AKB_CONNECTOR_USER, PropertyType.STRING,
68 editConnectorPage.getUser());
69 if (changed)
70 activeConnector.getSession().save();
71 // return changed;
72 } catch (RepositoryException re) {
73 throw new AkbException("Unable to update active connector", re);
74 }
75 }
76
77 private boolean doTest() {
78 boolean testSuccesfull;
79 try {
80 testSuccesfull = akbService.testConnector(activeConnector);
81 } catch (Exception e1) {
82 testSuccesfull = false;
83 ErrorFeedback.show("Cannot test connection", e1);
84 }
85 String name = AkbJcrUtils.get(activeConnector, Property.JCR_TITLE);
86 String url = AkbJcrUtils.get(activeConnector,
87 AkbNames.AKB_CONNECTOR_URL);
88 String msg = " to " + name + " (" + url + ")";
89 Shell shell = ActiveConnectorWizard.this.getShell();
90 if (testSuccesfull) {
91 MessageDialog.openInformation(shell, "Test successful",
92 "Successfully connected " + msg);
93 } else
94 MessageDialog.openError(shell, "Test failure", "Unable to connect"
95 + msg);
96 return testSuccesfull;
97 }
98
99 public boolean canFinish() {
100 if (AkbJcrUtils.isEmptyString(editConnectorPage.getUrl())
101 || AkbJcrUtils.isEmptyString(editConnectorPage.getUser()))
102 return false;
103 else
104 return true;
105 }
106
107 // //////////////////////
108 // Pages definition
109 /**
110 * Displays a combo box that enables user to choose which action to perform
111 */
112 private class EditConnectorPage extends WizardPage {
113 private Text urlTxt;
114 private Text userTxt;
115
116 public EditConnectorPage() {
117 super("Edit connector");
118 setTitle("Edit connector");
119 setDescription("Edit or create an active connector");
120 }
121
122 @Override
123 public void createControl(Composite parent) {
124 Composite container = new Composite(parent, SWT.NO_FOCUS);
125 GridLayout gl = new GridLayout(2, false);
126 container.setLayout(gl);
127
128 new Label(container, NONE).setText("URL");
129 urlTxt = new Text(container, SWT.NONE);
130 urlTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
131 AkbUiUtils.refreshFormTextWidget(urlTxt, activeConnector,
132 AkbNames.AKB_CONNECTOR_URL);
133 urlTxt.addModifyListener(new ModifyListener() {
134 @Override
135 public void modifyText(ModifyEvent e) {
136 // TODO implement here name validation.
137 getWizard().getContainer().updateButtons();
138 }
139 });
140
141 new Label(container, NONE).setText("User");
142 userTxt = new Text(container, SWT.NONE);
143 userTxt.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
144 AkbUiUtils.refreshFormTextWidget(userTxt, activeConnector,
145 AkbNames.AKB_CONNECTOR_USER);
146 userTxt.addModifyListener(new ModifyListener() {
147 @Override
148 public void modifyText(ModifyEvent e) {
149 // TODO implement here name validation.
150 getWizard().getContainer().updateButtons();
151 }
152 });
153
154 new Label(container, SWT.SEPARATOR | SWT.SHADOW_OUT
155 | SWT.HORIZONTAL).setLayoutData(new GridData(SWT.FILL,
156 SWT.FILL, false, false, 2, 1));
157
158 Link testBtn = new Link(container, SWT.NONE);
159 testBtn.setText("<a>Save and test</a>");
160
161 testBtn.addSelectionListener(new SelectionAdapter() {
162 @Override
163 public void widgetSelected(SelectionEvent e) {
164 doUpdate();
165 doTest();
166 }
167 });
168
169 setControl(container);
170 }
171
172 protected String getUrl() {
173 return
174 // String url =
175 urlTxt.getText();
176 // if (AkbJcrUtils.isEmptyString(url))
177 // return null;
178 // else
179 // return url;
180 }
181
182 protected String getUser() {
183 return userTxt.getText();
184 }
185 }
186 }