1 package org.argeo.tracker.ui.dialogs;
2
3 import static javax.jcr.Property.JCR_DESCRIPTION;
4 import static javax.jcr.Property.JCR_TITLE;
5 import static org.argeo.connect.util.ConnectJcrUtils.get;
6
7 import javax.jcr.Node;
8 import javax.jcr.RepositoryException;
9
10 import org.argeo.connect.UserAdminService;
11 import org.argeo.connect.core.OfficeRole;
12 import org.argeo.connect.ui.widgets.GroupDropDown;
13 import org.argeo.eclipse.ui.EclipseUiUtils;
14 import org.argeo.tracker.TrackerException;
15 import org.argeo.tracker.TrackerNames;
16 import org.argeo.tracker.TrackerService;
17 import org.eclipse.jface.dialogs.MessageDialog;
18 import org.eclipse.jface.wizard.Wizard;
19 import org.eclipse.jface.wizard.WizardPage;
20 import org.eclipse.swt.SWT;
21 import org.eclipse.swt.events.ModifyEvent;
22 import org.eclipse.swt.events.ModifyListener;
23 import org.eclipse.swt.layout.GridData;
24 import org.eclipse.swt.layout.GridLayout;
25 import org.eclipse.swt.widgets.Composite;
26 import org.eclipse.swt.widgets.Label;
27 import org.eclipse.swt.widgets.Text;
28
29
30 public class ConfigureProjectWizard extends Wizard implements ModifyListener {
31 private static final long serialVersionUID = -8365425809976445458L;
32
33
34 final private UserAdminService userAdminService;
35 final private TrackerService trackerService;
36 final private Node project;
37
38
39 private Text titleTxt;
40 private GroupDropDown managerDD;
41 private Text descTxt;
42
43 public ConfigureProjectWizard(UserAdminService userAdminService, TrackerService trackerService, Node project) {
44 this.userAdminService = userAdminService;
45 this.trackerService = trackerService;
46 this.project = project;
47 }
48
49 @Override
50 public void addPages() {
51 setWindowTitle("Project configuration");
52 addPage(new MainPage("Main page"));
53 }
54
55 @Override
56 public boolean performFinish() {
57 String title = titleTxt.getText();
58 if (EclipseUiUtils.isEmpty(title)) {
59 MessageDialog.openError(getShell(), "Compulsory title", "Project title cannot be empty");
60 return false;
61 }
62 try {
63 trackerService.configureProject(project, title, descTxt.getText(), managerDD.getText());
64 } catch (RepositoryException e1) {
65 throw new TrackerException("Unable to create project with title " + title, e1);
66 }
67 return true;
68 }
69
70 @Override
71 public boolean canFinish() {
72 if (EclipseUiUtils.isEmpty(titleTxt.getText()))
73 return false;
74 else
75 return true;
76 }
77
78 @Override
79 public boolean performCancel() {
80 return true;
81 }
82
83 protected class MainPage extends WizardPage {
84 private static final long serialVersionUID = 3061153468301727903L;
85
86 public MainPage(String pageName) {
87 super(pageName);
88 setMessage("Please complete following information.");
89 }
90
91 public void createControl(Composite parent) {
92 parent.setLayout(new GridLayout(2, false));
93
94 createLabel(parent, "Name", SWT.CENTER);
95 titleTxt = new Text(parent, SWT.BORDER);
96 titleTxt.setMessage("A short name for this project");
97 titleTxt.setLayoutData(EclipseUiUtils.fillWidth());
98 titleTxt.addModifyListener(ConfigureProjectWizard.this);
99
100 createLabel(parent, "Manager", SWT.CENTER);
101 Text managerTxt = new Text(parent, SWT.BORDER);
102 managerTxt.setMessage("Choose a group");
103 managerTxt.setLayoutData(EclipseUiUtils.fillWidth());
104 managerDD = new GroupDropDown(managerTxt, userAdminService, OfficeRole.coworker.dn());
105
106 createLabel(parent, "Description", SWT.TOP);
107 descTxt = new Text(parent, SWT.BORDER | SWT.MULTI | SWT.WRAP);
108 GridData gd = EclipseUiUtils.fillWidth();
109 gd.heightHint = 150;
110 descTxt.setLayoutData(gd);
111 descTxt.setMessage("An optional description for this component");
112
113 titleTxt.setText(get(project, JCR_TITLE));
114 descTxt.setText(get(project, JCR_DESCRIPTION));
115 managerDD.resetDN(get(project, TrackerNames.TRACKER_MANAGER));
116 setControl(titleTxt);
117 }
118 }
119
120 private Label createLabel(Composite parent, String label, int verticalAlign) {
121 Label lbl = new Label(parent, SWT.NONE);
122 lbl.setText(label);
123 lbl.setFont(EclipseUiUtils.getBoldFont(parent));
124 lbl.setLayoutData(new GridData(SWT.LEAD, verticalAlign, false, false));
125 return lbl;
126 }
127
128 @Override
129 public void modifyText(ModifyEvent event) {
130 getContainer().updateButtons();
131 }
132 }