1 package org.argeo.people.ui;
2
3 import static org.argeo.eclipse.ui.EclipseUiUtils.notEmpty;
4
5 import javax.jcr.Node;
6 import javax.jcr.Property;
7 import javax.jcr.RepositoryException;
8
9 import org.argeo.connect.ConnectConstants;
10 import org.argeo.connect.resources.ResourcesService;
11 import org.argeo.connect.ui.ConnectUiConstants;
12 import org.argeo.connect.ui.ConnectUiSnippets;
13 import org.argeo.connect.util.ConnectJcrUtils;
14 import org.argeo.connect.util.ConnectUtils;
15 import org.argeo.people.ContactValueCatalogs;
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.util.PeopleJcrUtils;
21
22
23
24
25
26 public class PeopleUiSnippets {
27
28
29
30
31
32 public static String getLongName(Node node) {
33 String salutation = ConnectJcrUtils.get(node, PeopleNames.PEOPLE_SALUTATION);
34 String firstName = ConnectJcrUtils.get(node, PeopleNames.PEOPLE_FIRST_NAME);
35 String lastName = ConnectJcrUtils.get(node, PeopleNames.PEOPLE_LAST_NAME);
36 String title = ConnectJcrUtils.get(node, PeopleNames.PEOPLE_HONORIFIC_TITLE);
37 String suffix = ConnectJcrUtils.get(node, PeopleNames.PEOPLE_NAME_SUFFIX);
38 String nickName = ConnectJcrUtils.get(node, PeopleNames.PEOPLE_NICKNAME);
39 String maidenName = ConnectJcrUtils.get(node, PeopleNames.PEOPLE_MAIDEN_NAME);
40 String middleName = ConnectJcrUtils.get(node, PeopleNames.PEOPLE_MIDDLE_NAME);
41
42 if (notEmpty(salutation) || notEmpty(title) || notEmpty(suffix) || notEmpty(nickName) || notEmpty(maidenName)
43 || notEmpty(middleName)) {
44 StringBuilder builder = new StringBuilder();
45
46 builder.append(salutation);
47 if (notEmpty(title))
48 builder.append(" ").append(title);
49 builder.append(" ").append(firstName);
50 if (notEmpty(middleName))
51 builder.append(" \"").append(middleName).append("\" ");
52 builder.append(" ").append(lastName);
53 builder.append(" ").append(suffix);
54
55 if (notEmpty(maidenName) || notEmpty(nickName)) {
56 builder.append(" <i>(");
57 if (notEmpty(maidenName))
58 builder.append("Born: ").append(maidenName);
59
60 if (notEmpty(maidenName) && notEmpty(nickName))
61 builder.append(", ");
62 if (notEmpty(nickName))
63 builder.append("aka: ").append(nickName);
64 builder.append(")</i>");
65 }
66 return ConnectUtils.replaceAmpersand(builder.toString());
67 }
68 else
69 return "";
70 }
71
72
73 public static String getContactDisplaySnippet(ResourcesService resourcesService, Node node) {
74 try {
75 StringBuilder builder = new StringBuilder();
76
77 if (node.isNodeType(PeopleTypes.PEOPLE_POSTAL_ADDRESS))
78 builder.append(getAddressDisplayValue(resourcesService, node));
79 else {
80 String value = ConnectJcrUtils.get(node, PeopleNames.PEOPLE_CONTACT_VALUE);
81 if (node.isNodeType(PeopleTypes.PEOPLE_URL) || node.isNodeType(PeopleTypes.PEOPLE_SOCIAL_MEDIA))
82 builder.append(ConnectUiSnippets.getUrlLink(value));
83 else if (node.isNodeType(PeopleTypes.PEOPLE_MAIL))
84 builder.append(ConnectUiSnippets.getMailLink(value));
85 else if (node.isNodeType(PeopleTypes.PEOPLE_PHONE))
86 builder.append(ConnectUiSnippets.getPhoneLink(value));
87 else
88
89 builder.append(value);
90 }
91 builder.append(getContactMetaData(node));
92 return ConnectUtils.replaceAmpersand(builder.toString());
93
94 } catch (RepositoryException re) {
95 throw new PeopleException("Error while generating contact " + "display HTML snippet ", re);
96 }
97 }
98
99
100 public static String getWorkAddress(ResourcesService resourcesService, Node contactNode, Node referencedEntity) {
101 StringBuilder builder = new StringBuilder();
102
103 if (referencedEntity != null)
104 builder.append(ConnectJcrUtils.get(referencedEntity, Property.JCR_TITLE));
105
106 builder.append(getContactMetaData(contactNode));
107
108 if (referencedEntity != null) {
109 Node primaryAddress = PeopleJcrUtils.getPrimaryContact(referencedEntity, PeopleTypes.PEOPLE_POSTAL_ADDRESS);
110 if (primaryAddress != null) {
111 builder.append("<br />");
112 builder.append(getAddressDisplayValue(resourcesService, primaryAddress));
113 }
114 }
115 return ConnectUtils.replaceAmpersand(builder.toString());
116 }
117
118
119
120
121 public static String getContactMetaData(Node node) {
122 StringBuilder builder = new StringBuilder();
123
124
125 Node contactable = ConnectJcrUtils.getParent(ConnectJcrUtils.getParent(node));
126 String nature = null;
127 if (ConnectJcrUtils.isNodeType(contactable, PeopleTypes.PEOPLE_PERSON))
128 nature = ConnectJcrUtils.isNodeType(node, PeopleTypes.PEOPLE_CONTACT_REF)
129 ? ContactValueCatalogs.CONTACT_CAT_OFFICE : ContactValueCatalogs.CONTACT_CAT_HOME;
130 String category = ConnectJcrUtils.get(node, Property.JCR_TITLE);
131 String label = ConnectJcrUtils.get(node, Property.JCR_DESCRIPTION);
132
133 if (notEmpty(nature) || notEmpty(category) || notEmpty(label)) {
134 builder.append(ConnectUiConstants.NB_DOUBLE_SPACE + "[");
135
136 if (notEmpty(nature)) {
137 builder.append(nature).append(notEmpty(category) ? " " : "");
138 }
139 if (notEmpty(category)) {
140 builder.append(category);
141 }
142
143 if (notEmpty(label)) {
144 if (notEmpty(nature) || notEmpty(category))
145 builder.append(", ");
146 builder.append(label);
147 }
148 builder.append("]");
149 }
150 return ConnectUtils.replaceAmpersand(builder.toString());
151 }
152
153
154 public static String getAddressDisplayValue(ResourcesService resourcesService, Node node) {
155 String street = ConnectJcrUtils.get(node, PeopleNames.PEOPLE_STREET);
156 String street2 = ConnectJcrUtils.get(node, PeopleNames.PEOPLE_STREET_COMPLEMENT);
157 String zip = ConnectJcrUtils.get(node, PeopleNames.PEOPLE_ZIP_CODE);
158 String city = ConnectJcrUtils.get(node, PeopleNames.PEOPLE_CITY);
159 String state = ConnectJcrUtils.get(node, PeopleNames.PEOPLE_STATE);
160 String country = ConnectJcrUtils.get(node, PeopleNames.PEOPLE_COUNTRY);
161
162 StringBuilder builder = new StringBuilder();
163
164 if (notEmpty(street))
165 builder.append(street);
166
167 if (notEmpty(street2)) {
168 if (builder.length() > 0)
169 builder.append(", ");
170 builder.append(street2);
171 }
172
173 if (notEmpty(zip)) {
174 if (builder.length() > 0)
175 builder.append(", ");
176 builder.append(zip);
177 }
178
179 if (notEmpty(city)) {
180 if (builder.length() > 0)
181 if (notEmpty(zip))
182 builder.append(" ");
183 else
184 builder.append(", ");
185 builder.append(city);
186 }
187
188 if (notEmpty(state)) {
189 if (builder.length() > 0)
190 builder.append(", ");
191 builder.append(state);
192 }
193
194 if (notEmpty(country)) {
195 country = resourcesService.getEncodedTagValue(ConnectJcrUtils.getSession(node),
196 ConnectConstants.RESOURCE_COUNTRY, country);
197
198 if (builder.length() > 0)
199 builder.append(", ");
200 builder.append(country.toUpperCase());
201 }
202 return builder.toString();
203 }
204
205
206 public static String getLocalisationInfo(ResourcesService resourcesService, PeopleService peopleService,
207 Node entity) {
208 String town = PeopleJcrUtils.getTownFromItem(peopleService, entity);
209 String country = PeopleJcrUtils.getCountryFromItem(peopleService, entity);
210 if (notEmpty(town) || notEmpty(country)) {
211 StringBuilder builder = new StringBuilder();
212 builder.append("[");
213 if (notEmpty(town)) {
214 builder.append(town);
215 if (notEmpty(country))
216 builder.append(", ");
217 }
218 if (notEmpty(country)) {
219 country = resourcesService.getEncodedTagValue(ConnectJcrUtils.getSession(entity),
220 ConnectConstants.RESOURCE_COUNTRY, country);
221 builder.append(country);
222 }
223 builder.append("]");
224 return builder.toString();
225 } else
226 return "";
227 }
228
229
230
231
232 public static String getPrimaryContacts(Node entity) {
233 StringBuilder builder = new StringBuilder();
234
235 String tmpStr = PeopleJcrUtils.getPrimaryContactValue(entity, PeopleTypes.PEOPLE_MOBILE);
236 if (notEmpty(tmpStr))
237 tmpStr = ConnectUiSnippets.getPhoneLink(tmpStr) + " (Mobile)";
238 String tmpStr2 = PeopleJcrUtils.getPrimaryContactValue(entity, PeopleTypes.PEOPLE_TELEPHONE_NUMBER);
239 if (notEmpty(tmpStr2))
240 tmpStr2 = ConnectUiSnippets.getPhoneLink(tmpStr2);
241 tmpStr = ConnectJcrUtils.concatIfNotEmpty(tmpStr, tmpStr2, " / ");
242 if (notEmpty(tmpStr))
243 builder.append(tmpStr).append(ConnectUiConstants.NB_DOUBLE_SPACE);
244
245 tmpStr = PeopleJcrUtils.getPrimaryContactValue(entity, PeopleTypes.PEOPLE_MAIL);
246 if (notEmpty(tmpStr))
247 builder.append(ConnectUiSnippets.getMailLink(tmpStr)).append(ConnectUiConstants.NB_DOUBLE_SPACE);
248
249 tmpStr = PeopleJcrUtils.getPrimaryContactValue(entity, PeopleTypes.PEOPLE_URL);
250 if (notEmpty(tmpStr))
251 builder.append(ConnectUiSnippets.getUrlLink(tmpStr)).append(ConnectUiConstants.NB_DOUBLE_SPACE);
252
253 String result = builder.toString();
254 if (result.lastIndexOf(ConnectUiConstants.NB_DOUBLE_SPACE) > 0)
255 result = result.substring(0, result.lastIndexOf(ConnectUiConstants.NB_DOUBLE_SPACE));
256 return ConnectUtils.replaceAmpersand(result);
257 }
258
259
260
261
262
263
264
265
266 public static String getEntityContact(PeopleService peopleService, Node entity, String label) {
267 try {
268
269 Node person = null, org = null;
270
271 if (entity.isNodeType(PeopleTypes.PEOPLE_PERSON)) {
272 person = entity;
273 Node currContact = PeopleJcrUtils.getPrimaryContact(person, PeopleTypes.PEOPLE_POSTAL_ADDRESS);
274 if (!(currContact == null || !currContact.isNodeType(PeopleTypes.PEOPLE_CONTACT_REF))) {
275 org = peopleService.getEntityByUid(ConnectJcrUtils.getSession(currContact), null,
276 ConnectJcrUtils.get(currContact, PeopleNames.PEOPLE_REF_UID));
277 }
278 } else if (entity.isNodeType(PeopleTypes.PEOPLE_ORG))
279 org = entity;
280
281 StringBuilder builder = new StringBuilder();
282
283 builder.append("<b>");
284 if (notEmpty(label))
285 builder.append(label);
286 if (org != null)
287 builder.append(ConnectJcrUtils.get(org, Property.JCR_TITLE)).append("<br/>");
288 builder.append("</b>");
289 if (person != null)
290 builder.append(peopleService.getDisplayName(person)).append("<br/>");
291
292 String pam = getEntityPhoneAndMailFormatted(entity);
293 if (notEmpty(pam))
294 builder.append(pam);
295 return ConnectUtils.replaceAmpersand(builder.toString());
296 } catch (RepositoryException re) {
297 throw new PeopleException("Unable to create contact snippet for node " + entity, re);
298 }
299 }
300
301 public static String getEntityPhoneAndMailFormatted(Node entity) {
302 StringBuilder builder = new StringBuilder();
303
304 String tmpStr = PeopleJcrUtils.getPrimaryContactValue(entity, PeopleTypes.PEOPLE_MOBILE);
305 String tmpStr2 = PeopleJcrUtils.getPrimaryContactValue(entity, PeopleTypes.PEOPLE_TELEPHONE_NUMBER);
306 if (notEmpty(tmpStr) && notEmpty(tmpStr2))
307 builder.append(ConnectUiSnippets.getPhoneLink(tmpStr)).append("(Mobile) / ").append(tmpStr2)
308 .append("<br/>");
309 else if (notEmpty(tmpStr) || notEmpty(tmpStr2))
310 builder.append(ConnectUiSnippets.getPhoneLink(tmpStr)).append(tmpStr2).append("<br/>");
311
312
313 tmpStr = PeopleJcrUtils.getPrimaryContactValue(entity, PeopleTypes.PEOPLE_MAIL);
314 if (notEmpty(tmpStr))
315 builder.append(ConnectUiSnippets.getMailLink(tmpStr)).append("<br/>");
316 return ConnectUtils.replaceAmpersand(builder.toString());
317 }
318
319
320
321
322
323
324
325 public static String getPrimaryContacts(PeopleService peopleService, Node entity) {
326 StringBuilder builder = new StringBuilder();
327
328 String tmpStr = PeopleJcrUtils.getPrimaryContactValue(entity, PeopleTypes.PEOPLE_MOBILE);
329 String tmpStr2 = PeopleJcrUtils.getPrimaryContactValue(entity, PeopleTypes.PEOPLE_TELEPHONE_NUMBER);
330 if (notEmpty(tmpStr) && notEmpty(tmpStr2))
331 builder.append(ConnectUiSnippets.getPhoneLink(tmpStr)).append("(Mobile) / ").append(tmpStr2)
332 .append("<br/>");
333 else if (notEmpty(tmpStr) || notEmpty(tmpStr2))
334 builder.append(ConnectUiSnippets.getPhoneLink(tmpStr)).append(tmpStr2).append("<br/>");
335
336
337 tmpStr = PeopleJcrUtils.getPrimaryContactValue(entity, PeopleTypes.PEOPLE_MAIL);
338 if (notEmpty(tmpStr))
339 builder.append(ConnectUiSnippets.getMailLink(tmpStr)).append("<br/>");
340 return ConnectUtils.replaceAmpersand(builder.toString());
341 }
342 }