1 package org.argeo.people.web.providers;
2
3 import static org.argeo.eclipse.ui.EclipseUiUtils.notEmpty;
4
5 import java.util.List;
6
7 import javax.jcr.Node;
8 import javax.jcr.RepositoryException;
9
10 import org.argeo.connect.ConnectConstants;
11 import org.argeo.connect.resources.ResourcesNames;
12 import org.argeo.connect.resources.ResourcesService;
13 import org.argeo.connect.ui.ConnectUiConstants;
14 import org.argeo.connect.util.ConnectJcrUtils;
15 import org.argeo.connect.util.ConnectUtils;
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.argeo.people.web.PeopleWebConstants;
22 import org.argeo.people.web.PeopleWebSnippets;
23 import org.eclipse.jface.viewers.ILabelProvider;
24 import org.eclipse.jface.viewers.ILabelProviderListener;
25 import org.eclipse.swt.graphics.Image;
26
27
28
29
30 public class PersonOverviewLP implements ILabelProvider, PeopleNames {
31
32 private static final long serialVersionUID = 1L;
33 private final int listType;
34
35 private PeopleService peopleService;
36 private ResourcesService resourceService;
37
38 public PersonOverviewLP(ResourcesService resourceService, PeopleService peopleService, int listType) {
39 this.listType = listType;
40 this.peopleService = peopleService;
41 }
42
43 @Override
44 public String getText(Object element) {
45 try {
46 Node entity = (Node) element;
47 String result;
48 switch (listType) {
49 case PeopleWebConstants.OVERVIEW_TYPE_HEADER:
50 result = getOverviewTitle(entity);
51 break;
52 case PeopleWebConstants.OVERVIEW_TYPE_LARGE_LIST:
53 result = getOverviewForList(entity, false);
54 break;
55 case PeopleWebConstants.OVERVIEW_TYPE_SINGLE_LINE_LIST:
56 result = getOverviewForList(entity, true);
57 break;
58 default:
59 throw new PeopleException("Unable to provide text for person");
60 }
61 return ConnectUtils.replaceAmpersand(result);
62 } catch (RepositoryException re) {
63 throw new PeopleException("Cannot create organizations content", re);
64 }
65 }
66
67 private String getOverviewTitle(Node person) throws RepositoryException {
68 StringBuilder builder = new StringBuilder();
69 builder.append("<span style='font-size:15px;' >");
70
71 builder.append("<b><big> ");
72 String displayName = peopleService.getDisplayName(person);
73 builder.append(displayName);
74 builder.append("</big></b>");
75 String fmn = PeopleUiSnippets.getLongName(person);
76 String localisationStr = PeopleUiSnippets.getLocalisationInfo(resourceService, peopleService, person);
77 String primContactStr = PeopleUiSnippets.getPrimaryContacts(person);
78 Boolean politeFormFlag = ConnectJcrUtils.getBooleanValue(person, PEOPLE_USE_POLITE_FORM);
79 List<String> spokenLanguages = ConnectJcrUtils.getMultiAsList(person, PEOPLE_SPOKEN_LANGUAGES);
80
81 if (notEmpty(fmn) || notEmpty(localisationStr)) {
82 builder.append("<br/>").append(fmn);
83 if (notEmpty(fmn) && notEmpty(localisationStr))
84 builder.append(ConnectUiConstants.NB_SPACE + ConnectUiConstants.NB_SPACE);
85 builder.append(localisationStr);
86 }
87 if (notEmpty(primContactStr))
88 builder.append("<br/>").append(primContactStr.trim());
89
90 if (politeFormFlag != null || !spokenLanguages.isEmpty()) {
91 builder.append("<br/>");
92 if (politeFormFlag != null)
93 builder.append(politeFormFlag ? "Formal" : "Informal");
94 if (politeFormFlag != null && !spokenLanguages.isEmpty())
95 builder.append(" / ");
96 if (!spokenLanguages.isEmpty()) {
97 for (String str : spokenLanguages) {
98 builder.append(resourceService.getEncodedTagValue(person.getSession(),
99 ConnectConstants.RESOURCE_LANG, str)).append(", ");
100 }
101
102 builder.delete(builder.length() - 2, builder.length());
103 }
104 }
105
106 builder.append("</span>");
107 return builder.toString();
108 }
109
110 private String getOverviewForList(Node person, boolean isSmallList) throws RepositoryException {
111 StringBuilder builder = new StringBuilder();
112
113 if (isSmallList) {
114 builder.append("<b>");
115 builder.append(peopleService.getDisplayName(person));
116 builder.append("</b>");
117 } else {
118 builder.append("<span>").append("<b><big>");
119 builder.append(peopleService.getDisplayName(person));
120 builder.append("</big></b>");
121 }
122
123 String local = PeopleUiSnippets.getLocalisationInfo(resourceService, peopleService, person);
124 if (notEmpty(local)) {
125 builder.append(ConnectUiConstants.NB_DOUBLE_SPACE);
126 builder.append(local);
127 }
128
129 if (isSmallList)
130 builder.append(ConnectUiConstants.NB_DOUBLE_SPACE);
131 else
132 builder.append("<br/>");
133
134
135 String primContactStr = PeopleUiSnippets.getPrimaryContacts(person);
136 if (notEmpty(primContactStr)) {
137 builder.append(primContactStr.trim());
138 if (isSmallList)
139 builder.append(ConnectUiConstants.NB_DOUBLE_SPACE);
140 else
141 builder.append("<br/>");
142 }
143
144
145 String tags = PeopleWebSnippets.getTagLikeValues(resourceService, ConnectConstants.RESOURCE_TAG, person,
146 ResourcesNames.CONNECT_TAGS, "#");
147 String mailingLists = PeopleWebSnippets.getTagLikeValues(resourceService, PeopleTypes.PEOPLE_MAILING_LIST,
148 person, PeopleNames.PEOPLE_MAILING_LISTS, "@");
149 if (isSmallList) {
150 builder.append(tags);
151 if (notEmpty(tags) && notEmpty(mailingLists))
152 builder.append(ConnectUiConstants.NB_SPACE);
153 builder.append(mailingLists);
154 } else {
155 builder.append("<br/>").append(tags);
156 if (notEmpty(tags) && notEmpty(mailingLists))
157 builder.append("<br/>");
158 builder.append(mailingLists);
159 builder.append("</span>");
160 }
161 return builder.toString();
162 }
163
164 @Override
165 public void addListener(ILabelProviderListener listener) {
166 }
167
168 @Override
169 public void dispose() {
170 }
171
172 @Override
173 public boolean isLabelProperty(Object element, String property) {
174 return false;
175 }
176
177 @Override
178 public void removeListener(ILabelProviderListener listener) {
179 }
180
181 @Override
182 public Image getImage(Object element) {
183 return null;
184 }
185 }