View Javadoc
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  /** Dialog to simply configure a project */
30  public class ConfigureProjectWizard extends Wizard implements ModifyListener {
31  	private static final long serialVersionUID = -8365425809976445458L;
32  
33  	// Context
34  	final private UserAdminService userAdminService;
35  	final private TrackerService trackerService;
36  	final private Node project;
37  
38  	// UI controls
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 }