1 package org.argeo.tracker.ui;
2
3 import static org.argeo.eclipse.ui.EclipseUiUtils.notEmpty;
4
5 import javax.jcr.Node;
6 import javax.jcr.Property;
7 import javax.jcr.RepositoryException;
8 import javax.jcr.Session;
9
10 import org.argeo.activities.ActivitiesNames;
11 import org.argeo.connect.ConnectConstants;
12 import org.argeo.connect.SystemAppService;
13 import org.argeo.connect.util.ConnectJcrUtils;
14 import org.argeo.connect.util.ConnectUtils;
15 import org.argeo.eclipse.ui.EclipseUiUtils;
16 import org.argeo.tracker.TrackerException;
17 import org.argeo.tracker.TrackerNames;
18 import org.eclipse.jface.viewers.LabelProvider;
19
20
21 public class TaskListLabelProvider extends LabelProvider {
22 private static final long serialVersionUID = 8524164843887702899L;
23
24
25 private SystemAppService trackerService;
26 private int descLength = 160;
27
28 private Node project;
29 private Node milestone;
30
31 public TaskListLabelProvider(SystemAppService trackerService) {
32 this.trackerService = trackerService;
33 }
34
35 public void setProject(Node project) {
36 this.project = project;
37 }
38
39 public void setMilestone(Node milestone) {
40 this.milestone = milestone;
41 }
42
43 @Override
44 public String getText(Object element) {
45 try {
46 return getText((Node) element);
47 } catch (RepositoryException e) {
48 throw new TrackerException("Cannot get text for " + element, e);
49 }
50
51 }
52
53 public String getText(Node task) throws RepositoryException {
54 Session session = task.getSession();
55 StringBuilder builder = new StringBuilder();
56
57
58 String currMSStr = null;
59 if (milestone == null) {
60 String muid = ConnectJcrUtils.get(task, TrackerNames.TRACKER_MILESTONE_UID);
61 if (EclipseUiUtils.notEmpty(muid)) {
62 Node currMilestone = trackerService.getEntityByUid(session, "/", muid);
63 if (currMilestone != null)
64 currMSStr = ConnectJcrUtils.get(currMilestone, Property.JCR_TITLE);
65 }
66 }
67 String currProjStr = null;
68 if (project == null) {
69 String puid = ConnectJcrUtils.get(task, TrackerNames.TRACKER_PROJECT_UID);
70 if (EclipseUiUtils.notEmpty(puid)) {
71 Node currProject = trackerService.getEntityByUid(session, "/", puid);
72 if (currProject != null)
73 currProjStr = ConnectJcrUtils.get(currProject, Property.JCR_TITLE);
74 }
75 }
76
77 builder.append("<b>");
78 builder.append(ConnectJcrUtils.get(task, Property.JCR_TITLE));
79 builder.append(" </b> ");
80 String tmpStr = ConnectJcrUtils.concatIfNotEmpty(currMSStr, currProjStr, ", ");
81 if (notEmpty(tmpStr))
82 builder.append(" [").append(tmpStr).append("] ");
83
84 String ddStr = ConnectJcrUtils.getDateFormattedAsString(task, ActivitiesNames.ACTIVITIES_DUE_DATE,
85 ConnectConstants.DEFAULT_DATE_FORMAT);
86 if (notEmpty(ddStr))
87 builder.append(" due to ").append(ddStr);
88
89 builder.append(" <br />");
90
91 String desc = ConnectJcrUtils.get(task, Property.JCR_DESCRIPTION).replaceAll("\\n", " ");
92
93 if (desc.length() > descLength)
94 desc = desc.substring(0, descLength - 1) + "... ";
95 builder.append(desc);
96
97 return wrapThis(builder.toString());
98 }
99
100 private final String LIST_WRAP_STYLE = "style='float:left;padding:0px;white-space:pre-wrap;'";
101
102 private String wrapThis(String value) {
103 String wrapped = "<span " + LIST_WRAP_STYLE + " >" + ConnectUtils.replaceAmpersand(value) + "</span>";
104 return wrapped;
105 }
106
107 }