View Javadoc
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   * Provide HTML Snippet to display details of a person in various UI contexts
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  		// first line
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 				// remove last occurence of the separator
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 		// Contacts
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 		// Tags
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 }