1 package org.argeo.people.web.providers;
2
3 import java.io.InputStream;
4 import java.util.HashMap;
5 import java.util.Map;
6
7 import javax.jcr.Node;
8
9 import org.apache.commons.io.IOUtils;
10 import org.argeo.connect.resources.ResourcesService;
11 import org.argeo.connect.util.ConnectJcrUtils;
12 import org.argeo.connect.util.ConnectUtils;
13 import org.argeo.people.PeopleService;
14 import org.argeo.people.PeopleTypes;
15 import org.argeo.people.web.PeopleWebConstants;
16 import org.eclipse.jface.viewers.ILabelProvider;
17 import org.eclipse.jface.viewers.ILabelProviderListener;
18 import org.eclipse.rap.rwt.RWT;
19 import org.eclipse.rap.rwt.service.ResourceManager;
20 import org.eclipse.swt.graphics.Image;
21 import org.eclipse.swt.widgets.Display;
22
23
24
25
26
27 public class SearchEntitiesLP implements ILabelProvider {
28 private static final long serialVersionUID = -7601937314019991492L;
29
30 private PeopleService peopleService;
31
32
33 private PersonOverviewLP personOLP;
34 private OrgOverviewLP orgOLP;
35
36
37 private Map<String, Image> icons;
38
39 public SearchEntitiesLP(ResourcesService resourceService, PeopleService peopleService, Display display,
40 Map<String, String> iconPathes) {
41 this.peopleService = peopleService;
42 personOLP = new PersonOverviewLP(resourceService, peopleService,
43 PeopleWebConstants.OVERVIEW_TYPE_SINGLE_LINE_LIST);
44 orgOLP = new OrgOverviewLP(resourceService, peopleService, PeopleWebConstants.OVERVIEW_TYPE_SINGLE_LINE_LIST);
45
46 if (iconPathes != null) {
47 createIconMap(display, iconPathes);
48 }
49
50 }
51
52 private void createIconMap(Display display, Map<String, String> iconPathes) {
53 icons = new HashMap<String, Image>();
54 ResourceManager manager = RWT.getResourceManager();
55 for (String key : iconPathes.keySet()) {
56 InputStream current = null;
57 try {
58 String value = iconPathes.get(key);
59 if (manager.isRegistered(value)) {
60 current = manager.getRegisteredContent(value);
61 Image image = new Image(display, current);
62 icons.put(key, image);
63 }
64 } finally {
65 IOUtils.closeQuietly(current);
66 }
67 }
68
69 }
70
71 @Override
72 public String getText(Object element) {
73
74 Node entity = (Node) element;
75 if (ConnectJcrUtils.isNodeType(entity, PeopleTypes.PEOPLE_PERSON))
76 return
77 personOLP.getText(entity);
78 else if (ConnectJcrUtils.isNodeType(entity, PeopleTypes.PEOPLE_ORG))
79 return
80 orgOLP.getText(entity);
81 else {
82 StringBuilder builder = new StringBuilder();
83 builder.append("<b>");
84 builder.append(peopleService.getDisplayName(entity));
85 builder.append("</b>");
86 return ConnectUtils.replaceAmpersand(builder.toString());
87 }
88 }
89
90 @Override
91 public void addListener(ILabelProviderListener listener) {
92 }
93
94 @Override
95 public void dispose() {
96 if (icons != null) {
97 for (String key : icons.keySet()) {
98 Image image = icons.get(key);
99 if (!image.isDisposed())
100 image.dispose();
101 }
102 icons.clear();
103 }
104 }
105
106 @Override
107 public boolean isLabelProperty(Object element, String property) {
108 return false;
109 }
110
111 @Override
112 public void removeListener(ILabelProviderListener listener) {
113 }
114
115 @Override
116 public Image getImage(Object element) {
117 if (icons == null)
118 return null;
119
120 Node node = (Node) element;
121 if (icons.containsKey(PeopleTypes.PEOPLE_PERSON) && ConnectJcrUtils.isNodeType(node, PeopleTypes.PEOPLE_PERSON))
122 return icons.get(PeopleTypes.PEOPLE_PERSON);
123 else if (icons.containsKey(PeopleTypes.PEOPLE_ORG) && ConnectJcrUtils.isNodeType(node, PeopleTypes.PEOPLE_ORG))
124 return icons.get(PeopleTypes.PEOPLE_ORG);
125 else
126 return null;
127 }
128 }