View Javadoc
1   package org.argeo.people.ui.providers;
2   
3   import java.util.List;
4   
5   import javax.jcr.Node;
6   import javax.jcr.RepositoryException;
7   
8   import org.argeo.connect.ConnectConstants;
9   import org.argeo.connect.resources.ResourcesService;
10  import org.argeo.connect.ui.ConnectUiConstants;
11  import org.argeo.connect.ui.ConnectWorkbenchUtils;
12  import org.argeo.connect.ui.SystemWorkbenchService;
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.people.PeopleException;
17  import org.argeo.people.PeopleNames;
18  import org.argeo.people.PeopleService;
19  import org.argeo.people.PeopleTypes;
20  import org.argeo.people.ui.PeopleUiSnippets;
21  import org.eclipse.jface.viewers.ColumnLabelProvider;
22  
23  /** Create HTML Snippet to display a person's details in editors and lists */
24  public class PersonOverviewLabelProvider extends ColumnLabelProvider implements PeopleNames {
25  
26  	private static final long serialVersionUID = 1L;
27  
28  	private final ResourcesService resourcesService;
29  	private final PeopleService peopleService;
30  	private final SystemWorkbenchService systemWorkbenchService;
31  	private final int listType;
32  
33  	public PersonOverviewLabelProvider(int listType, ResourcesService resourcesService, PeopleService peopleService,
34  			SystemWorkbenchService systemWorkbenchService) {
35  		this.listType = listType;
36  		this.resourcesService = resourcesService;
37  		this.peopleService = peopleService;
38  		this.systemWorkbenchService = systemWorkbenchService;
39  	}
40  
41  	@Override
42  	public String getText(Object element) {
43  		try {
44  			Node node = (Node) element;
45  			Node entity;
46  			if (node.isNodeType(PeopleTypes.PEOPLE_PERSON))
47  				entity = node;
48  			else if (node.isNodeType(PeopleTypes.PEOPLE_JOB))
49  				entity = node.getParent().getParent();
50  			else if (node.isNodeType(PeopleTypes.PEOPLE_POSITION)) {
51  				entity = peopleService.getEntityByUid(node.getSession(), null,
52  						node.getProperty(PEOPLE_REF_UID).getString());
53  			} else
54  				throw new PeopleException("Unvalid node type. " + "Cannot display film information");
55  			String result;
56  			switch (listType) {
57  			case ConnectUiConstants.LIST_TYPE_OVERVIEW_TITLE:
58  				result = getOverviewTitle(entity);
59  				break;
60  			case ConnectUiConstants.LIST_TYPE_SMALL:
61  				result = getOverviewForList(entity, true);
62  				break;
63  			case ConnectUiConstants.LIST_TYPE_MEDIUM:
64  				result = getOverviewForList(entity, false);
65  				break;
66  			default:
67  				throw new PeopleException("Unable to provide text for person");
68  			}
69  			return ConnectUtils.replaceAmpersand(result);
70  		} catch (RepositoryException re) {
71  			throw new PeopleException("Cannot create organizations content", re);
72  		}
73  	}
74  
75  	private String getOverviewTitle(Node person) throws RepositoryException {
76  		StringBuilder builder = new StringBuilder();
77  		builder.append("<span " + ConnectUiConstants.ENTITY_HEADER_INNER_CSS_STYLE + " >");
78  		// first line
79  		builder.append("<b><big> ");
80  		String displayName = peopleService.getDisplayName(person);
81  		builder.append(displayName);
82  		builder.append("</big></b>");
83  		String fmn = PeopleUiSnippets.getLongName(person);
84  		String local = PeopleUiSnippets.getLocalisationInfo(resourcesService, peopleService, person);
85  		String primaryContacts = PeopleUiSnippets.getPrimaryContacts(person);
86  		Boolean politeFormFlag = ConnectJcrUtils.getBooleanValue(person, PEOPLE_USE_POLITE_FORM);
87  		List<String> spokenLanguages = ConnectJcrUtils.getMultiAsList(person, PEOPLE_SPOKEN_LANGUAGES);
88  
89  		if (EclipseUiUtils.notEmpty(fmn) || EclipseUiUtils.notEmpty(local)) {
90  			builder.append("<br/>").append(fmn);
91  			if (EclipseUiUtils.notEmpty(fmn) && EclipseUiUtils.notEmpty(local))
92  				builder.append("&#160;&#160; ");
93  			builder.append(local);
94  		}
95  		if (EclipseUiUtils.notEmpty(primaryContacts))
96  			builder.append("<br/>").append(primaryContacts);
97  
98  		if (politeFormFlag != null || !spokenLanguages.isEmpty()) {
99  			builder.append("<br/>");
100 			if (politeFormFlag != null)
101 				builder.append(politeFormFlag ? "Formal" : "Informal");
102 			if (politeFormFlag != null && !spokenLanguages.isEmpty())
103 				builder.append(" / ");
104 			if (!spokenLanguages.isEmpty()) {
105 				for (String str : spokenLanguages) {
106 					String language = resourcesService.getEncodedTagValue(ConnectJcrUtils.getSession(person),
107 							ConnectConstants.RESOURCE_LANG, str);
108 					builder.append(language).append(", ");
109 				}
110 				// remove last occurrence of the separator
111 				builder.delete(builder.length() - 2, builder.length());
112 			}
113 		}
114 		builder.append("</span>");
115 		return builder.toString();
116 	}
117 
118 	private String getOverviewForList(Node person, boolean isSmallList) throws RepositoryException {
119 		StringBuilder builder = new StringBuilder().append("<span>");
120 		// first line
121 		builder.append("<b><big> ");
122 		builder.append(peopleService.getDisplayName(person));
123 		builder.append("</big> </b> ");
124 		String local = PeopleUiSnippets.getLocalisationInfo(resourcesService, peopleService, person);
125 		if (EclipseUiUtils.notEmpty(local))
126 			builder.append(local);
127 		builder.append("<br/>");
128 
129 		// Contacts
130 		String primContactsStr = PeopleUiSnippets.getPrimaryContacts(person);
131 		if (EclipseUiUtils.notEmpty(primContactsStr))
132 			builder.append(primContactsStr).append("<br/>");
133 
134 		// Tags
135 		String clickableTags = ConnectWorkbenchUtils.getTags(resourcesService, systemWorkbenchService, person);
136 		if (EclipseUiUtils.notEmpty(clickableTags))
137 			builder.append(clickableTags).append("<br/>");
138 
139 		builder.append("</span>");
140 		return builder.toString();
141 	}
142 }