1 package org.argeo.tracker.ui;
2
3 import java.text.DateFormat;
4 import java.text.SimpleDateFormat;
5 import java.util.Calendar;
6
7 import javax.jcr.Node;
8 import javax.jcr.Property;
9 import javax.jcr.RepositoryException;
10
11 import org.argeo.activities.ActivitiesNames;
12 import org.argeo.cms.util.UserAdminUtils;
13 import org.argeo.connect.AppService;
14 import org.argeo.connect.ConnectConstants;
15 import org.argeo.connect.ConnectNames;
16 import org.argeo.connect.UserAdminService;
17 import org.argeo.connect.util.ConnectJcrUtils;
18 import org.argeo.eclipse.ui.EclipseUiUtils;
19 import org.argeo.tracker.TrackerException;
20 import org.argeo.tracker.TrackerNames;
21 import org.argeo.tracker.core.TrackerUtils;
22 import org.eclipse.jface.viewers.ColumnLabelProvider;
23
24
25 public class TrackerLps {
26
27
28 private final static String SIMPLE_DATE_PATTERN = "dd MMM yyyy";
29
30 public class DnLabelProvider extends ColumnLabelProvider {
31 private static final long serialVersionUID = -848512622910895692L;
32 private final UserAdminService userAdminService;
33 private final String propName;
34
35 public DnLabelProvider(UserAdminService userAdminService, String propName) {
36 this.userAdminService = userAdminService;
37 this.propName = propName;
38 }
39
40 @Override
41 public String getText(Object element) {
42 Node entity = (Node) element;
43 String dn = ConnectJcrUtils.get(entity, propName);
44 if (EclipseUiUtils.notEmpty(dn))
45 return userAdminService.getUserDisplayName(dn);
46 else
47 return "";
48 }
49 }
50
51 public class VersionDateLabelProvider extends ColumnLabelProvider {
52 private static final long serialVersionUID = -7883411659009058536L;
53
54 @Override
55 public String getText(Object element) {
56 Node version = (Node) element;
57 String date = ConnectJcrUtils.getDateFormattedAsString(version, TrackerNames.TRACKER_RELEASE_DATE,
58 SIMPLE_DATE_PATTERN);
59 if (date == null)
60 date = ConnectJcrUtils.getDateFormattedAsString(version, TrackerNames.TRACKER_TARGET_DATE,
61 SIMPLE_DATE_PATTERN);
62
63 if (date == null)
64 date = " - ";
65 return date;
66 }
67 }
68
69 public class DateLabelProvider extends ColumnLabelProvider {
70 private static final long serialVersionUID = 8003688506253830216L;
71
72 private final String propName;
73
74 public DateLabelProvider(String propName) {
75 this.propName = propName;
76 }
77
78 @Override
79 public String getText(Object element) {
80 Node milestone = (Node) element;
81 String dateStr = "";
82 try {
83 if (milestone.hasProperty(propName))
84 dateStr = ConnectJcrUtils.getDateFormattedAsString(milestone, propName, SIMPLE_DATE_PATTERN);
85 else if (ConnectNames.CONNECT_CLOSE_DATE.equals(propName))
86 dateStr = " Open ";
87 else
88 dateStr = " - ";
89 } catch (RepositoryException e) {
90 throw new TrackerException("Cannot retrieve " + propName + " date for " + milestone, e);
91 }
92 return dateStr;
93 }
94 }
95
96 public class PriorityLabelProvider extends ColumnLabelProvider {
97 private static final long serialVersionUID = -6190366293616451065L;
98
99 @Override
100 public String getText(Object element) {
101 Node issue = (Node) element;
102 try {
103 if (issue.hasProperty(TrackerNames.TRACKER_PRIORITY)) {
104 long priorityL = issue.getProperty(TrackerNames.TRACKER_PRIORITY).getLong();
105 String priorityStr = TrackerUtils.MAPS_ISSUE_PRIORITIES.get("" + priorityL);
106 return priorityStr;
107 }
108 } catch (RepositoryException e) {
109 throw new TrackerException("Unable to get isssue priority for " + issue, e);
110 }
111 return "";
112 }
113 }
114
115 public class CommentNbLabelProvider extends ColumnLabelProvider {
116 private static final long serialVersionUID = -1685888796850965318L;
117
118 @Override
119 public String getText(Object element) {
120 Node issue = (Node) element;
121 try {
122
123
124 if (issue.hasNode(TrackerNames.TRACKER_COMMENTS)) {
125 long commentNb = issue.getNode(TrackerNames.TRACKER_COMMENTS).getNodes().getSize();
126 if (commentNb > 0)
127 return commentNb + " comments";
128 }
129 } catch (RepositoryException e) {
130 throw new TrackerException("Unable to get isssue priority for " + issue, e);
131 }
132 return "None yet";
133 }
134 }
135
136 public class MilestoneLabelProvider extends ColumnLabelProvider {
137 private static final long serialVersionUID = -2359291146337869742L;
138 private AppService appService;
139
140 public MilestoneLabelProvider(AppService appService) {
141 this.appService = appService;
142 }
143
144
145 @Override
146 public String getText(Object element) {
147 Node issue = (Node) element;
148 try {
149 String muid = ConnectJcrUtils.get(issue, TrackerNames.TRACKER_MILESTONE_UID);
150 if (EclipseUiUtils.notEmpty(muid)) {
151 Node m = appService.getEntityByUid(issue.getSession(), null, muid);
152 if (m != null)
153 return ConnectJcrUtils.get(m, Property.JCR_TITLE);
154 }
155 } catch (RepositoryException e) {
156 throw new TrackerException("Unable to get milestone name for " + issue, e);
157 }
158 return "";
159 }
160 }
161
162 public class ImportanceLabelProvider extends ColumnLabelProvider {
163 private static final long serialVersionUID = 7920611707085451018L;
164
165 @Override
166 public String getText(Object element) {
167 Node issue = (Node) element;
168 try {
169 if (issue.hasProperty(TrackerNames.TRACKER_IMPORTANCE)) {
170 long importanceL = issue.getProperty(TrackerNames.TRACKER_IMPORTANCE).getLong();
171 String importanceStr = "" + importanceL;
172 return TrackerUtils.MAPS_ISSUE_IMPORTANCES.get(importanceStr);
173 }
174 } catch (RepositoryException e) {
175 throw new TrackerException("Unable to get isssue importance for " + issue, e);
176 }
177 return "";
178 }
179 }
180
181 public class IssueCommentOverviewLabelProvider extends ColumnLabelProvider {
182 private static final long serialVersionUID = 3580821684409015205L;
183
184 private DateFormat df = new SimpleDateFormat(ConnectConstants.DEFAULT_DATE_TIME_FORMAT);
185
186 @Override
187 public String getText(Object element) {
188 Node comment = (Node) element;
189 String createdBy = ConnectJcrUtils.get(comment, ActivitiesNames.ACTIVITIES_REPORTED_BY);
190 if (EclipseUiUtils.isEmpty(createdBy))
191 createdBy = ConnectJcrUtils.get(comment, Property.JCR_CREATED_BY);
192 Calendar createdOn = ConnectJcrUtils.getDateValue(comment, ActivitiesNames.ACTIVITIES_ACTIVITY_DATE);
193 if (createdOn == null)
194 createdOn = ConnectJcrUtils.getDateValue(comment, Property.JCR_CREATED);
195 String lastUpdatedBy = ConnectJcrUtils.get(comment, Property.JCR_LAST_MODIFIED_BY);
196 Calendar lastUpdatedOn = ConnectJcrUtils.getDateValue(comment, Property.JCR_LAST_MODIFIED);
197
198 if (createdBy.equalsIgnoreCase(lastUpdatedBy))
199 lastUpdatedBy = null;
200 long t1Millis = createdOn.getTimeInMillis() + 300000;
201 long t2Millis = createdOn.getTimeInMillis();
202 if (t2Millis < t1Millis)
203 lastUpdatedOn = null;
204
205 String createdOnStr = df.format(createdOn.getTime());
206 ConnectJcrUtils.getDateFormattedAsString(comment, Property.JCR_CREATED,
207 ConnectConstants.DEFAULT_DATE_TIME_FORMAT);
208 StringBuilder builder = new StringBuilder();
209 builder.append(UserAdminUtils.getUserLocalId(createdBy)).append(" on ").append(createdOnStr);
210 if (lastUpdatedOn != null) {
211 builder.append(" (last edited ");
212 if (EclipseUiUtils.notEmpty(lastUpdatedBy))
213 builder.append("by ").append(UserAdminUtils.getUserLocalId(lastUpdatedBy)).append(" ");
214 builder.append("on ").append(df.format(lastUpdatedOn.getTime())).append(")");
215 }
216 return builder.toString();
217 }
218 }
219 }