View Javadoc
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  /** Provide a single column label provider for person lists */
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  }