View Javadoc
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   * A label provider that must be defined via spring to get a bundle context
25   * before being injected in the correct page
26   **/
27  public class SearchEntitiesLP implements ILabelProvider {
28  	private static final long serialVersionUID = -7601937314019991492L;
29  
30  	private PeopleService peopleService;
31  
32  	// Local objects
33  	private PersonOverviewLP personOLP;
34  	private OrgOverviewLP orgOLP;
35  
36  	// Cache local images
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 // prefixWithImage(PeopleTypes.PEOPLE_PERSON) +
77  			personOLP.getText(entity);
78  		else if (ConnectJcrUtils.isNodeType(entity, PeopleTypes.PEOPLE_ORG))
79  			return // prefixWithImage(PeopleTypes.PEOPLE_ORG) +
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 }