1 package org.argeo.activities.ui;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import javax.jcr.Node;
7 import javax.jcr.Property;
8 import javax.jcr.Session;
9
10 import org.argeo.activities.ActivitiesNames;
11 import org.argeo.activities.ActivitiesService;
12 import org.argeo.connect.ConnectConstants;
13 import org.argeo.connect.util.ConnectJcrUtils;
14 import org.argeo.connect.util.ConnectUtils;
15 import org.argeo.eclipse.ui.EclipseUiUtils;
16 import org.eclipse.jface.viewers.LabelProvider;
17
18
19 public class ActivityListLabelProvider extends LabelProvider {
20 private static final long serialVersionUID = -8261171417328758985L;
21
22 private final ActivitiesService activitiesService;
23
24 public ActivityListLabelProvider(ActivitiesService activitiesService) {
25 this.activitiesService = activitiesService;
26 }
27
28 @Override
29 public String getText(Object element) {
30 Node node = (Node) element;
31 StringBuilder builder = new StringBuilder();
32 builder.append("<b>");
33 builder.append(ConnectJcrUtils.get(node, Property.JCR_TITLE));
34 builder.append("</b>");
35 String dv = ConnectJcrUtils.getDateFormattedAsString(node, ActivitiesNames.ACTIVITIES_ACTIVITY_DATE,
36 ConnectConstants.DEFAULT_DATE_FORMAT);
37 if (EclipseUiUtils.notEmpty(dv))
38 builder.append(" on ").append(dv);
39
40 List<String> relatedToUid = ConnectJcrUtils.getMultiAsList(node, ActivitiesNames.ACTIVITIES_RELATED_TO);
41 List<String> relatedToNames = new ArrayList<>();
42 Session session = ConnectJcrUtils.getSession(node);
43 for (String uid : relatedToUid) {
44 String currName = getRelatedToName(session, uid);
45 if (EclipseUiUtils.notEmpty(currName))
46 relatedToNames.add(currName);
47 }
48
49 if (relatedToNames.size() == 1) {
50 builder.append(" with ").append(relatedToNames.get(0));
51 } else if (relatedToNames.size() > 1) {
52 builder.append(" with ");
53 int i;
54 for (i = 0; i < relatedToNames.size() - 1; i++) {
55 builder.append(relatedToNames.get(i));
56
57 }
58 builder.append(" and ").append(relatedToNames.get(i + 1));
59 }
60
61 String result = ConnectUtils.replaceAmpersand(builder.toString());
62 return result;
63 }
64
65 private String getRelatedToName(Session session, String connectUid) {
66 Node entity = activitiesService.getEntityByUid(session, "/", connectUid);
67 if (entity != null)
68 return ConnectJcrUtils.get(entity, Property.JCR_TITLE);
69 else
70 return null;
71 }
72 }