View Javadoc
1   package org.argeo.people.ui.providers;
2   
3   import javax.jcr.Node;
4   
5   import org.argeo.connect.UserAdminService;
6   import org.argeo.connect.ui.util.JcrRowLabelProvider;
7   import org.argeo.connect.util.ConnectJcrUtils;
8   import org.argeo.connect.util.ConnectUtils;
9   import org.argeo.eclipse.ui.EclipseUiUtils;
10  import org.argeo.people.PeopleException;
11  
12  /**
13   * Wraps the getText() method of the JcrRowLabelProvider to retrieve a user ID.
14   * It retrieves then the corresponding display name using the UserAdminService
15   * exposed by the people service and then clean it to remove invalid characters
16   * (typically the ampersand).
17   */
18  public class JcrUserHtmlLabelProvider extends JcrRowLabelProvider {
19  	private static final long serialVersionUID = 2134911527741337612L;
20  
21  	private final UserAdminService userAdminService;
22  	private String selectorName;
23  	private String propertyName;
24  
25  	public JcrUserHtmlLabelProvider(UserAdminService userAdminService, String selectorName, String propertyName) {
26  		super(propertyName);
27  		this.propertyName = propertyName;
28  		this.userAdminService = userAdminService;
29  		if (EclipseUiUtils.notEmpty(selectorName))
30  			this.selectorName = selectorName;
31  	}
32  
33  	public JcrUserHtmlLabelProvider(UserAdminService userAdminService, String propertyName) {
34  		super(propertyName);
35  		this.userAdminService = userAdminService;
36  	}
37  
38  	@Override
39  	public String getText(Object element) {
40  		Node currNode = ConnectJcrUtils.getNodeFromElement(element, selectorName);
41  		try {
42  			String userId = super.getText(currNode);
43  			String displayName = null;
44  			if (EclipseUiUtils.notEmpty(userId))
45  				displayName = userAdminService.getUserDisplayName(userId);
46  			if (EclipseUiUtils.isEmpty(displayName))
47  				displayName = userId;
48  			return ConnectUtils.replaceAmpersand(displayName);
49  		} catch (Exception e) {
50  			throw new PeopleException("Unable to get display name for prop: " + propertyName + " of " + currNode, e);
51  		}
52  	}
53  }