1 package org.argeo.tracker.e4.parts;
2
3 import java.text.DateFormat;
4 import java.text.SimpleDateFormat;
5 import java.util.ArrayList;
6 import java.util.List;
7
8 import javax.inject.Inject;
9 import javax.jcr.Node;
10 import javax.jcr.Property;
11 import javax.jcr.RepositoryException;
12 import javax.jcr.Session;
13 import javax.jcr.nodetype.NodeType;
14 import javax.jcr.version.VersionManager;
15
16 import org.argeo.activities.ActivitiesService;
17 import org.argeo.cms.ui.CmsEditable;
18 import org.argeo.cms.ui.eclipse.forms.FormToolkit;
19 import org.argeo.cms.ui.eclipse.forms.IManagedForm;
20 import org.argeo.cms.ui.eclipse.forms.ManagedForm;
21 import org.argeo.connect.AppService;
22 import org.argeo.connect.ConnectConstants;
23 import org.argeo.connect.ConnectException;
24 import org.argeo.connect.SystemAppService;
25 import org.argeo.connect.e4.parts.AbstractConnectCTabEditor;
26 import org.argeo.connect.ui.AppWorkbenchService;
27 import org.argeo.connect.ui.IStatusLineProvider;
28 import org.argeo.connect.ui.Refreshable;
29 import org.argeo.connect.ui.SystemWorkbenchService;
30 import org.argeo.connect.util.ConnectJcrUtils;
31 import org.argeo.documents.DocumentsService;
32 import org.argeo.eclipse.ui.EclipseUiUtils;
33 import org.argeo.jcr.JcrUtils;
34 import org.argeo.tracker.TrackerService;
35 import org.eclipse.core.runtime.IProgressMonitor;
36 import org.eclipse.e4.ui.di.Persist;
37 import org.eclipse.swt.SWT;
38 import org.eclipse.swt.custom.CTabFolder;
39 import org.eclipse.swt.custom.CTabItem;
40 import org.eclipse.swt.custom.ScrolledComposite;
41 import org.eclipse.swt.layout.GridData;
42 import org.eclipse.swt.widgets.Composite;
43 import org.eclipse.swt.widgets.Label;
44
45
46
47
48
49 public abstract class AbstractTrackerEditor extends AbstractConnectCTabEditor
50 implements CmsEditable, Refreshable, IStatusLineProvider {
51
52
53
54
55
56
57
58
59
60 @Inject
61 private ActivitiesService activitiesService;
62 @Inject
63 private DocumentsService documentsService;
64 @Inject
65 private TrackerService trackerService;
66
67 @Inject
68 private SystemAppService appService;
69 @Inject
70 private SystemWorkbenchService appWorkbenchService;
71
72 List<AbstractEditorPage> pages = new ArrayList<>();
73
74
75
76
77
78
79
80 private final static DateFormat df = new SimpleDateFormat(ConnectConstants.DEFAULT_DATE_TIME_FORMAT);
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118 protected abstract void addPages();
119
120 @Override
121 protected void init() {
122 super.init();
123 addPages();
124 }
125
126 protected void addPage(AbstractEditorPage page) {
127 pages.add(page);
128 }
129
130 protected void commitPages(boolean b) {
131
132 }
133
134 protected AbstractEditorPage getActivePageInstance() {
135 return null;
136 }
137
138 @Override
139 protected void populateTabFolder(CTabFolder tabFolder) {
140 for (AbstractEditorPage page : pages) {
141
142
143
144
145
146 ScrolledComposite form = addScrolledTabToFolder(tabFolder, SWT.NONE, page.getLabel(), page.getPageId(),
147 null);
148 IManagedForm managedForm = new ManagedForm(getManagedForm().getToolkit(), form);
149
150
151
152
153
154
155
156
157
158
159 page.createUi(managedForm);
160
161
162 }
163
164 }
165
166 protected ScrolledComposite addScrolledTabToFolder(CTabFolder tabFolder, int style, String label, String id,
167 String tooltip) {
168 CTabItem item = new CTabItem(tabFolder, style);
169 item.setData(CTAB_INSTANCE_ID, id);
170 item.setText(label);
171 item.setToolTipText(tooltip);
172 ScrolledComposite innerPannel = getFormToolkit().createScrolledForm(tabFolder);
173
174 item.setControl(innerPannel);
175 return innerPannel;
176 }
177
178 @Override
179 protected void populateHeader(Composite parent) {
180
181
182 }
183
184 @Override
185 public String getStatusLineMessage() {
186 Node currNode = getNode();
187 StringBuilder builder = new StringBuilder();
188 try {
189 if (currNode.isNodeType(NodeType.MIX_TITLE)) {
190 builder.append(ConnectJcrUtils.get(currNode, Property.JCR_TITLE)).append(" - ");
191 }
192 if (currNode.isNodeType(NodeType.MIX_LAST_MODIFIED)) {
193 builder.append("Last updated on ");
194 builder.append(df.format(currNode.getProperty(Property.JCR_LAST_MODIFIED).getDate().getTime()));
195 builder.append(", by ");
196 String lstModByDn = currNode.getProperty(Property.JCR_LAST_MODIFIED_BY).getString();
197 builder.append(getUserAdminService().getUserDisplayName(lstModByDn));
198 builder.append(". ");
199 }
200 return builder.toString();
201 } catch (RepositoryException re) {
202 throw new ConnectException("Unable to create last " + "modified message for " + currNode, re);
203 }
204 }
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227 protected DocumentsService getDocumentsService() {
228 return documentsService;
229 }
230
231 protected ActivitiesService getActivitiesService() {
232 return activitiesService;
233 }
234
235 protected TrackerService getTrackerService() {
236 return trackerService;
237 }
238
239 protected AppWorkbenchService getAppWorkbenchService() {
240 return appWorkbenchService;
241 }
242
243 protected AppService getAppService() {
244 return appService;
245 }
246
247
248 @Persist
249 public void doSave(IProgressMonitor monitor) {
250
251 commitPages(true);
252
253 try {
254 boolean changed = false;
255 Session session = getNode().getSession();
256 if (session.hasPendingChanges()) {
257 JcrUtils.updateLastModified(getNode());
258 session.save();
259 changed = true;
260 }
261 if (changed && ConnectJcrUtils.isVersionable(getNode())) {
262 VersionManager vm = session.getWorkspace().getVersionManager();
263 String path = getNode().getPath();
264 vm.checkpoint(path);
265 }
266 } catch (RepositoryException re) {
267 throw new ConnectException("Unable to perform check point on " + getNode(), re);
268 }
269
270
271 }
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344 @Deprecated
345 protected Label createFormBoldLabel(FormToolkit toolkit, Composite parent, String value) {
346 return createFormBoldLabel(parent, value);
347 }
348
349 protected Label createFormBoldLabel(Composite parent, String value) {
350 Label label = new Label(parent, SWT.END);
351 label.setText(" " + value);
352 label.setFont(EclipseUiUtils.getBoldFont(parent));
353 GridData twd = new GridData(SWT.END, SWT.FILL, false, false);
354 label.setLayoutData(twd);
355 return label;
356 }
357
358 }