1 package org.argeo.activities.e4.parts;
2
3 import javax.annotation.PostConstruct;
4 import javax.inject.Inject;
5 import javax.jcr.Node;
6 import javax.jcr.Property;
7
8 import org.apache.commons.logging.Log;
9 import org.apache.commons.logging.LogFactory;
10 import org.argeo.activities.ActivitiesNames;
11 import org.argeo.activities.ActivitiesService;
12 import org.argeo.activities.ui.LinkListPart;
13 import org.argeo.cms.ui.eclipse.forms.AbstractFormPart;
14 import org.argeo.cms.ui.eclipse.forms.FormToolkit;
15 import org.argeo.cms.ui.eclipse.forms.IManagedForm;
16 import org.argeo.connect.UserAdminService;
17 import org.argeo.connect.e4.parts.AbstractConnectEditor;
18 import org.argeo.connect.ui.ConnectUiUtils;
19 import org.argeo.connect.ui.ConnectWorkbenchUtils;
20 import org.argeo.connect.ui.parts.DateTextPart;
21 import org.argeo.connect.util.ConnectJcrUtils;
22 import org.argeo.eclipse.ui.EclipseUiUtils;
23 import org.eclipse.swt.SWT;
24 import org.eclipse.swt.layout.GridData;
25 import org.eclipse.swt.layout.GridLayout;
26 import org.eclipse.swt.widgets.Composite;
27 import org.eclipse.swt.widgets.Label;
28 import org.eclipse.swt.widgets.Text;
29
30
31 public class ActivityEditor extends AbstractConnectEditor {
32 final static Log log = LogFactory.getLog(ActivityEditor.class);
33
34
35
36
37
38 private Node activity;
39
40 @Inject
41 private ActivitiesService activitiesService;
42
43
44 private int firstColWHint = 85;
45
46 @PostConstruct
47 public void init() {
48 super.init();
49 activity = getNode();
50 }
51
52 @Override
53 protected void updatePartName() {
54 String name = activitiesService.getActivityLabel(getNode());
55 if (EclipseUiUtils.notEmpty(name))
56 setPartName(name);
57 }
58
59 protected void populateHeader(Composite parent) {
60 parent.setLayout(EclipseUiUtils.noSpaceGridLayout());
61 Composite headerCmp = new ActivityHeader(getFormToolkit(), getManagedForm(), parent, SWT.NO_FOCUS,
62 getUserAdminService(), activitiesService, activity);
63 headerCmp.setLayoutData(EclipseUiUtils.fillWidth());
64 }
65
66 @Override
67 protected void populateBody(Composite parent) {
68 parent.setLayout(new GridLayout(2, false));
69
70 FormToolkit toolkit = getFormToolkit();
71
72 Label label = ConnectUiUtils.createBoldLabel(toolkit, parent, "Title");
73 GridData gd = new GridData(SWT.RIGHT, SWT.CENTER, false, false);
74 gd.widthHint = firstColWHint;
75 label.setLayoutData(gd);
76 final Text titleTxt = toolkit.createText(parent, "", SWT.BORDER | SWT.SINGLE);
77 titleTxt.setLayoutData(EclipseUiUtils.fillWidth());
78
79
80 label = ConnectUiUtils.createBoldLabel(toolkit, parent, "Description");
81 gd = new GridData(SWT.RIGHT, SWT.TOP, false, false);
82 gd.widthHint = firstColWHint;
83 gd.verticalIndent = 2;
84 label.setLayoutData(gd);
85 final Text descTxt = toolkit.createText(parent, "", SWT.BORDER | SWT.MULTI | SWT.WRAP);
86 descTxt.setLayoutData(EclipseUiUtils.fillAll());
87
88 final AbstractFormPart formPart = new AbstractFormPart() {
89 public void refresh() {
90 super.refresh();
91 ConnectWorkbenchUtils.refreshFormTextWidget(ActivityEditor.this, titleTxt, activity,
92 Property.JCR_TITLE);
93 ConnectWorkbenchUtils.refreshFormTextWidget(ActivityEditor.this, descTxt, activity,
94 Property.JCR_DESCRIPTION);
95 }
96 };
97
98 ConnectWorkbenchUtils.addModifyListener(titleTxt, activity, Property.JCR_TITLE, formPart);
99 ConnectWorkbenchUtils.addModifyListener(descTxt, activity, Property.JCR_DESCRIPTION, formPart);
100
101 formPart.initialize(getManagedForm());
102 getManagedForm().addPart(formPart);
103 }
104
105 private class ActivityHeader extends Composite {
106 private static final long serialVersionUID = 6434106955847719839L;
107
108 private final ActivitiesService activityService;
109 private final UserAdminService userAdminService;
110 private final Node activity;
111
112
113 private final MyFormPart myFormPart;
114 private final FormToolkit toolkit;
115
116
117 private Label typeLbl;
118 private Label managerLbl;
119 private DateTextPart dateComposite;
120 private LinkListPart relatedCmp;
121
122 public ActivityHeader(FormToolkit toolkit, IManagedForm form, Composite parent, int style,
123 UserAdminService userAdminService, ActivitiesService activityService, Node activity) {
124 super(parent, style);
125 this.userAdminService = userAdminService;
126 this.activityService = activityService;
127 this.toolkit = toolkit;
128 this.activity = activity;
129
130
131 myFormPart = new MyFormPart();
132 myFormPart.initialize(form);
133 form.addPart(myFormPart);
134 }
135
136 private class MyFormPart extends AbstractFormPart {
137
138 @Override
139 public void refresh() {
140 if (ActivityHeader.this.isDisposed())
141 return;
142
143 if (ActivityHeader.this.getChildren().length == 0)
144 populate(ActivityHeader.this);
145
146 typeLbl.setText(activityService.getActivityLabel(activity));
147 String manager = ConnectJcrUtils.get(activity, ActivitiesNames.ACTIVITIES_REPORTED_BY);
148 if (EclipseUiUtils.notEmpty(manager))
149 managerLbl.setText(userAdminService.getUserDisplayName(manager));
150
151 dateComposite.refresh();
152
153
154
155
156 if (relatedCmp != null && !relatedCmp.isDisposed()) {
157 EclipseUiUtils.clear(relatedCmp);
158 relatedCmp.refresh();
159 }
160 ActivityHeader.this.layout(true, true);
161 }
162
163 private void populate(Composite parent) {
164 parent.setLayout(new GridLayout(6, false));
165
166
167
168
169 Label label = ConnectUiUtils.createBoldLabel(toolkit, parent, "Type");
170 GridData gd = new GridData(SWT.RIGHT, SWT.CENTER, false, false);
171 gd.widthHint = firstColWHint;
172 label.setLayoutData(gd);
173 typeLbl = toolkit.createLabel(parent, "");
174
175 gd = EclipseUiUtils.fillWidth();
176 gd.verticalIndent = 3;
177 typeLbl.setLayoutData(gd);
178
179 ConnectUiUtils.createBoldLabel(toolkit, parent, "Reported by");
180 managerLbl = toolkit.createLabel(parent, "");
181
182 gd = EclipseUiUtils.fillWidth();
183 gd.verticalIndent = 3;
184 managerLbl.setLayoutData(gd);
185
186
187 ConnectUiUtils.createBoldLabel(toolkit, parent, "Date");
188 dateComposite = new DateTextPart(ActivityEditor.this, parent, SWT.NO_FOCUS, myFormPart, activity,
189 ActivitiesNames.ACTIVITIES_ACTIVITY_DATE);
190 dateComposite.setLayoutData(EclipseUiUtils.fillWidth());
191
192
193 label = ConnectUiUtils.createBoldLabel(toolkit, parent, "Related to");
194 gd = new GridData(SWT.RIGHT, SWT.CENTER, false, false);
195 gd.verticalIndent = 2;
196 label.setLayoutData(gd);
197 relatedCmp = new LinkListPart(ActivityEditor.this, myFormPart, parent, SWT.NO_FOCUS,
198 getSystemWorkbenchService(), activity, ActivitiesNames.ACTIVITIES_RELATED_TO);
199 relatedCmp.setLayoutData(EclipseUiUtils.fillWidth(5));
200 }
201 }
202 }
203
204
205 public void setActivitiesService(ActivitiesService activitiesService) {
206 this.activitiesService = activitiesService;
207 }
208 }