View Javadoc
1   package org.argeo.people.ui.providers;
2   
3   import javax.jcr.Node;
4   import javax.jcr.Property;
5   import javax.jcr.RepositoryException;
6   
7   import org.apache.commons.logging.Log;
8   import org.apache.commons.logging.LogFactory;
9   import org.argeo.connect.ui.ConnectUiConstants;
10  import org.argeo.connect.util.ConnectJcrUtils;
11  import org.argeo.connect.util.ConnectUtils;
12  import org.argeo.eclipse.ui.EclipseUiUtils;
13  import org.argeo.people.PeopleException;
14  import org.argeo.people.PeopleNames;
15  import org.eclipse.jface.viewers.ColumnLabelProvider;
16  
17  /**
18   * Provide a label provider for group members
19   */
20  public class GroupLabelProvider extends ColumnLabelProvider implements PeopleNames {
21  	private final static Log log = LogFactory.getLog(GroupLabelProvider.class);
22  
23  	private static final long serialVersionUID = 9156065705311297011L;
24  	private final int listType;
25  
26  	public GroupLabelProvider(int listType) {
27  		this.listType = listType;
28  	}
29  
30  	@Override
31  	public String getText(Object element) {
32  		Node entity = (Node) element;
33  		String result;
34  		switch (listType) {
35  		case ConnectUiConstants.LIST_TYPE_OVERVIEW_TITLE:
36  			result = getOverviewTitle(entity);
37  			break;
38  		// case ConnectUiConstants.LIST_TYPE_OVERVIEW_DETAIL:
39  		// result = getOverviewDetails(entity);
40  		// break;
41  		case ConnectUiConstants.LIST_TYPE_SMALL:
42  			result = getOneLineLabel(entity);
43  			break;
44  		// case ConnectUiConstants.LIST_TYPE_MEDIUM:
45  		// result = getOverviewForList(entity, false);
46  		// break;
47  		default:
48  			throw new PeopleException("Undefined list type - Unable to provide text for group");
49  		}
50  		return ConnectUtils.replaceAmpersand(result);
51  	}
52  
53  	private String getOverviewTitle(Node entity) {
54  		try {
55  			StringBuilder builder = new StringBuilder();
56  			builder.append("<span style='font-size:15px;'>");
57  			// first line
58  			builder.append("<b><big> ");
59  			builder.append(ConnectJcrUtils.get(entity, Property.JCR_TITLE));
60  			builder.append("</big></b>");
61  
62  			if (entity.hasNode(PEOPLE_MEMBERS)) { // Nb of members
63  
64  				long start = System.currentTimeMillis();
65  				int membersNb = -1; // countMembers(entity.getNode(PEOPLE_MEMBERS),
66  									// 0);
67  				long end = System.currentTimeMillis();
68  
69  				if (log.isDebugEnabled())
70  					log.debug("Counted " + membersNb + " members in " + (end - start) + " ms");
71  
72  				builder.append("<i>(").append(membersNb).append(" members)</i>");
73  			}
74  			// Description
75  			String desc = ConnectJcrUtils.get(entity, Property.JCR_DESCRIPTION);
76  			if (EclipseUiUtils.notEmpty(desc))
77  				builder.append("<br />").append(desc);
78  			builder.append("</span>");
79  			return builder.toString();
80  		} catch (RepositoryException e) {
81  			throw new PeopleException("Unable to get text for link", e);
82  		}
83  
84  	}
85  
86  	/** recursivly count members in the sub tree */
87  	// private int countMembers(Node node, int currCount) {
88  	// try {
89  	// NodeIterator ni = node.getNodes();
90  	// while (ni.hasNext()) {
91  	// currCount = countMembers(ni.nextNode(), currCount);
92  	// }
93  	// if (ConnectJcrUtils.isNodeType(node,
94  	// PeopleTypes.PEOPLE_MAILING_LIST_ITEM)) {
95  	// currCount++;
96  	// }
97  	// return currCount;
98  	// } catch (RepositoryException re) {
99  	// throw new PeopleException("Unable to count members for node "
100 	// + node, re);
101 	// }
102 	// }
103 
104 	private String getOneLineLabel(Node entity) {
105 		// try {
106 		StringBuilder builder = new StringBuilder();
107 		builder.append("<b>");
108 		builder.append(ConnectJcrUtils.get(entity, Property.JCR_TITLE));
109 		builder.append("</b>");
110 
111 		// Nb of members
112 		// if (entity.hasNode(PEOPLE_MEMBERS)) {
113 		// int membersNb = countMembers(entity.getNode(PEOPLE_MEMBERS), 0);
114 		// builder.append("<i>(").append(membersNb)
115 		// .append(" members)</i>");
116 		// }
117 		return builder.toString();
118 		// } catch (RepositoryException e) {
119 		// throw new PeopleException("Unable to get small text for link", e);
120 		// }
121 
122 	}
123 
124 }