+
+ private class ProjectLp extends ColumnLabelProvider {
+ private static final long serialVersionUID = 7231233932794865555L;
+
+ @Override
+ public String getText(Object element) {
+ Node project = (Node) element;
+
+ String percent;
+ NodeIterator nit = TrackerUtils.getIssues(project, null, null, null, true);
+ long openNb = nit.getSize();
+
+ nit = TrackerUtils.getIssues(project, null, null, null, false);
+ long allNb = nit.getSize();
+
+ if (allNb < 1)
+ percent = "empty";
+ else {
+ double num = allNb - openNb;
+ double result = num / allNb * 100;
+ percent = String.format("%.1f", result) + "% done";
+ }
+ StringBuilder builder = new StringBuilder();
+ builder.append("<a>").append(ConnectJcrUtils.get(project, Property.JCR_TITLE)).append("</a>");
+ builder.append(" (").append(percent).append(")");
+
+ return builder.toString();
+ }
+ }
+
+ private class MilestoneLp extends ColumnLabelProvider {
+ private static final long serialVersionUID = 7231233932794865555L;
+
+ @Override
+ public String getText(Object element) {
+ Node milestone = (Node) element;
+ Node project = TrackerUtils.getRelatedProject(trackerService, milestone);
+ String dueDate = ConnectJcrUtils.getDateFormattedAsString(milestone, TrackerNames.TRACKER_TARGET_DATE,
+ datePattern);
+
+ String percent;
+ String propName = TrackerNames.TRACKER_MILESTONE_UID;
+ String muid = ConnectJcrUtils.get(milestone, ConnectNames.CONNECT_UID);
+ NodeIterator nit = TrackerUtils.getIssues(project, null, propName, muid, true);
+ long openNb = nit.getSize();
+
+ nit = TrackerUtils.getIssues(project, null, propName, muid, false);
+ long allNb = nit.getSize();
+
+ if (allNb < 1)
+ percent = "empty";
+ else {
+ double num = allNb - openNb;
+ double result = num / allNb * 100;
+ percent = String.format("%.1f", result) + "% done";
+ }
+ StringBuilder builder = new StringBuilder();
+ builder.append("<a>").append(ConnectJcrUtils.get(milestone, Property.JCR_TITLE)).append("</a>");
+ builder.append(" (");
+ if (EclipseUiUtils.notEmpty(dueDate))
+ builder.append("due to ").append(dueDate).append(", ");
+
+ builder.append(percent).append(")");
+ return builder.toString();
+ }
+
+ @Override
+ public Color getForeground(Object element) {
+ Node milestone = (Node) element;
+ Calendar dueDate = ConnectJcrUtils.getDateValue(milestone, TrackerNames.TRACKER_TARGET_DATE);
+ if (dueDate != null && dueDate.before(Calendar.getInstance()))
+ return Display.getCurrent().getSystemColor(SWT.COLOR_RED);
+ return null;
+ }
+ }
+
+ private class TaskLp extends ColumnLabelProvider {
+ private static final long serialVersionUID = 7231233932794865555L;
+
+ @Override
+ public String getText(Object element) {
+ Node task = (Node) element;
+ String dueDate = ConnectJcrUtils.getDateFormattedAsString(task, ActivitiesNames.ACTIVITIES_DUE_DATE,
+ datePattern);
+
+ StringBuilder builder = new StringBuilder();
+ builder.append("<a>").append(ConnectJcrUtils.get(task, Property.JCR_TITLE)).append("</a>");
+ if (EclipseUiUtils.notEmpty(dueDate))
+ builder.append(" (").append("due to ").append(dueDate).append(")");
+ return builder.toString();
+ }
+
+ @Override
+ public Color getForeground(Object element) {
+ Node milestone = (Node) element;
+ Calendar dueDate = ConnectJcrUtils.getDateValue(milestone, TrackerNames.TRACKER_TARGET_DATE);
+ if (dueDate != null && dueDate.before(Calendar.getInstance()))
+ return Display.getCurrent().getSystemColor(SWT.COLOR_RED);
+ return null;
+ }
+ }
+
+ @Override
+ public void setFocus() {
+ // refreshDocListGadget();
+ }
+
+ public void setActivitiesService(ActivitiesService activitiesService) {
+ this.activitiesService = activitiesService;
+ }
+
+ public void setTrackerService(TrackerService trackerService) {
+ this.trackerService = trackerService;
+ }
+
+ // LOCAL HELPERS
+ private void populateMuliValueClickableList(Composite parent, Node[] nodes, ColumnLabelProvider lp,
+ String listLabel) {
+ CmsUtils.clear(parent);
+ RowLayout rl = new RowLayout(SWT.HORIZONTAL | SWT.WRAP);
+ rl.wrap = true;
+ rl.marginLeft = rl.marginTop = rl.marginBottom = 0;
+ rl.marginRight = 8;
+ parent.setLayout(rl);
+
+ if (EclipseUiUtils.notEmpty(listLabel)) {
+ Link link = new Link(parent, SWT.NONE);
+ link.setText(listLabel);
+ link.setFont(EclipseUiUtils.getBoldFont(parent));
+ }
+
+ int i = 1;
+ for (Node node : nodes) {
+ Link link = new Link(parent, SWT.NONE);
+ CmsUtils.markup(link);
+ link.setText(lp.getText(node) + (i != nodes.length ? ", " : ""));
+ i++;
+ // Color fc = lp.getForeground(node);
+ // if (fc != null)
+ // link.setForeground(fc);
+
+ link.addSelectionListener(new SelectionAdapter() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void widgetSelected(final SelectionEvent event) {
+ CommandUtils.callCommand(getSystemWorkbenchService().getOpenEntityEditorCmdId(),
+ OpenEntityEditor.PARAM_JCR_ID, ConnectJcrUtils.getIdentifier(node));
+ }
+ });
+ }
+ }
+