View Javadoc
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  /** Provide a single column label provider for person lists */
21  public class TaskListLabelProvider extends LabelProvider {
22  	private static final long serialVersionUID = 8524164843887702899L;
23  
24  	// private ActivitiesService activitiesService;
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  		// Milestone & Project
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 }