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
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
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("   ");
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
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
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
130 String primContactsStr = PeopleUiSnippets.getPrimaryContacts(person);
131 if (EclipseUiUtils.notEmpty(primContactsStr))
132 builder.append(primContactsStr).append("<br/>");
133
134
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 }