1
2
3
4
5 package org.exoplatform.ecm.webui.selector;
6
7 import java.util.ArrayList;
8 import java.util.Collection;
9 import java.util.Collections;
10 import java.util.List;
11
12 import org.exoplatform.services.organization.Group;
13 import org.exoplatform.services.organization.MembershipType;
14 import org.exoplatform.services.organization.OrganizationService;
15 import org.exoplatform.services.security.IdentityConstants;
16 import org.exoplatform.services.wcm.utils.WCMCoreUtils;
17 import org.exoplatform.webui.config.annotation.ComponentConfig;
18 import org.exoplatform.webui.config.annotation.ComponentConfigs;
19 import org.exoplatform.webui.config.annotation.EventConfig;
20 import org.exoplatform.webui.core.UIBreadcumbs;
21 import org.exoplatform.webui.core.UIBreadcumbs.LocalPath;
22 import org.exoplatform.webui.core.UIComponent;
23 import org.exoplatform.webui.core.UIContainer;
24 import org.exoplatform.webui.core.UIPopupWindow;
25 import org.exoplatform.webui.core.UITree;
26 import org.exoplatform.webui.event.Event;
27 import org.exoplatform.webui.event.EventListener;
28 import org.exoplatform.webui.form.UIForm;
29
30
31
32
33
34
35
36
37 @ComponentConfigs( {
38 @ComponentConfig(
39 template = "classpath:groovy/ecm/webui/UIMemberSelector.gtmpl",
40 events = {
41 @EventConfig(listeners = UIGroupMemberSelector.ChangeNodeActionListener.class),
42 @EventConfig(listeners = UIGroupMemberSelector.SelectMembershipActionListener.class),
43 @EventConfig(listeners = UIGroupMemberSelector.SelectPathActionListener.class),
44 @EventConfig(listeners = UIGroupMemberSelector.AddAnyPermissionActionListener.class)
45 }),
46 @ComponentConfig(
47 type = UITree.class,
48 id = "UITreeMembershipSelector",
49 template = "system:/groovy/webui/core/UITree.gtmpl",
50 events = @EventConfig(listeners = UITree.ChangeNodeActionListener.class)),
51 @ComponentConfig(
52 type = UIBreadcumbs.class,
53 id = "BreadcumbMembershipSelector",
54 template = "system:/groovy/webui/core/UIBreadcumbs.gtmpl",
55 events = @EventConfig(listeners = UIBreadcumbs.SelectPathActionListener.class))
56 }
57 )
58
59 public class UIGroupMemberSelector extends UIContainer implements ComponentSelector{
60
61
62 final static public String defaultValue = "/admin";
63
64
65 private UIComponent uiComponent;
66
67
68 private String returnFieldName = null;
69
70
71 private boolean isSelectedMembership = true;
72
73
74 private boolean isSelectedUser;
75
76
77 private boolean isUsePopup = true;
78
79
80 private boolean isShowAnyPermission = true;
81
82 private Group selectGroup_;
83
84 private List<String> listMemberhip;
85
86 public UIGroupMemberSelector() throws Exception {
87 addChild(UIAnyPermission.class, null, "UIQueriesAnyPermission");
88 UIBreadcumbs uiBreadcumbs = addChild(UIBreadcumbs.class, "BreadcumbMembershipSelector", "BreadcumbMembershipSelector") ;
89 UITree tree = addChild(UITree.class, "UITreeMembershipSelector", "TreeMembershipSelector");
90 OrganizationService service = WCMCoreUtils.getService(OrganizationService.class);
91 Collection<?> sibblingsGroup = service.getGroupHandler().findGroups(null);
92
93 Collection<?> collection = service.getMembershipTypeHandler().findMembershipTypes();
94 listMemberhip = new ArrayList<String>(5);
95 for(Object obj : collection){
96 listMemberhip.add(((MembershipType)obj).getName());
97 }
98 if (!listMemberhip.contains("*")) listMemberhip.add("*");
99 Collections.sort(listMemberhip);
100 tree.setSibbling((List)sibblingsGroup);
101 tree.setIcon("GroupAdminIcon");
102 tree.setSelectedIcon("PortalIcon");
103 tree.setBeanIdField("id");
104 tree.setBeanLabelField("label");
105 uiBreadcumbs.setBreadcumbsStyle("UIExplorerHistoryPath") ;
106 }
107
108 public Group getCurrentGroup() { return selectGroup_ ; }
109
110 public List<String> getListMemberhip() { return listMemberhip; }
111
112 public void changeGroup(String groupId) throws Exception {
113 OrganizationService service = WCMCoreUtils.getService(OrganizationService.class);
114 UIBreadcumbs uiBreadcumb = getChild(UIBreadcumbs.class);
115 uiBreadcumb.setPath(getPath(null, groupId)) ;
116
117 UITree tree = getChild(UITree.class);
118 Collection<?> sibblingGroup;
119
120 if(groupId == null) {
121 sibblingGroup = service.getGroupHandler().findGroups(null);
122 tree.setSibbling((List)sibblingGroup);
123 tree.setChildren(null);
124 tree.setSelected(null);
125 selectGroup_ = null;
126 return;
127 }
128
129 selectGroup_ = service.getGroupHandler().findGroupById(groupId);
130 String parentGroupId = null;
131 if(selectGroup_ != null) parentGroupId = selectGroup_.getParentId();
132 Group parentGroup = null ;
133 if(parentGroupId != null) parentGroup = service.getGroupHandler().findGroupById(parentGroupId);
134
135 Collection childrenGroup = service.getGroupHandler().findGroups(selectGroup_);
136 sibblingGroup = service.getGroupHandler().findGroups(parentGroup);
137
138 tree.setSibbling((List)sibblingGroup);
139 tree.setChildren((List)childrenGroup);
140 tree.setSelected(selectGroup_);
141 tree.setParentSelected(parentGroup);
142 }
143
144 private List<LocalPath> getPath(List<LocalPath> list, String id) throws Exception {
145 if(list == null) list = new ArrayList<LocalPath>(5);
146 if(id == null) return list;
147 OrganizationService service = WCMCoreUtils.getService(OrganizationService.class);
148 Group group = service.getGroupHandler().findGroupById(id);
149 if(group == null) return list;
150 list.add(0, new LocalPath(group.getId(), group.getLabel()));
151 getPath(list, group.getParentId());
152 return list ;
153 }
154
155 @SuppressWarnings("unchecked")
156 public List<String> getListGroup() throws Exception {
157 OrganizationService service = WCMCoreUtils.getService(OrganizationService.class);
158 List<String> listGroup = new ArrayList<String>();
159 if(getCurrentGroup() == null) return null;
160 Collection<Group> groups = service.getGroupHandler().findGroups(getCurrentGroup());
161 if(groups.size() > 0) {
162 for (Object child : groups) {
163 Group childGroup = (Group)child;
164 listGroup.add(childGroup.getId()) ;
165 }
166 }
167 return listGroup;
168
169 }
170
171
172
173
174
175
176 public UIComponent getSourceComponent() {
177 return uiComponent;
178 }
179
180
181
182
183
184
185 public String getReturnField() {
186 return returnFieldName;
187 }
188
189 public void setIsUsePopup(boolean isUsePopup) { this.isUsePopup = isUsePopup; }
190
191 public boolean isUsePopup() { return isUsePopup; }
192
193
194
195
196
197
198 public void setSelectedUser(boolean bool) {
199 isSelectedUser = bool;
200 }
201
202
203
204
205
206
207 public boolean isSelectedUser() {
208 return isSelectedUser;
209 }
210
211
212
213
214
215
216 public void setSelectedMembership(boolean bool) {
217 isSelectedMembership = bool;
218 }
219
220
221
222
223
224
225 public boolean isSelectedMembership() {
226 return isSelectedMembership;
227 }
228
229 public void setSourceComponent(UIComponent uicomponent, String[] initParams) {
230 uiComponent = uicomponent;
231 if (initParams == null || initParams.length == 0)
232 return;
233 for (int i = 0; i < initParams.length; i++) {
234 if (initParams[i].indexOf("returnField") > -1) {
235 String[] array = initParams[i].split("=");
236 returnFieldName = array[1];
237 break;
238 }
239 returnFieldName = initParams[0];
240 }
241 }
242
243 public String event(String name, String beanId) throws Exception {
244 UIForm uiForm = getAncestorOfType(UIForm.class) ;
245 if(uiForm != null) return uiForm.event(name, getId(), beanId);
246 return super.event(name, beanId);
247 }
248
249 static public class ChangeNodeActionListener extends EventListener<UITree> {
250 public void execute(Event<UITree> event) throws Exception {
251 UIGroupMemberSelector uiGroupMemberSelector = event.getSource().getParent();
252 String groupId = event.getRequestContext().getRequestParameter(OBJECTID);
253 uiGroupMemberSelector.changeGroup(groupId);
254 event.getRequestContext().addUIComponentToUpdateByAjax(uiGroupMemberSelector);
255 }
256 }
257
258 static public class SelectMembershipActionListener extends EventListener<UIGroupMemberSelector> {
259 public void execute(Event<UIGroupMemberSelector> event) throws Exception {
260 UIGroupMemberSelector uiGroupMemberSelector = event.getSource();
261 if (uiGroupMemberSelector.getCurrentGroup() == null)
262 return;
263 String groupId = uiGroupMemberSelector.getCurrentGroup().getId();
264 String permission = event.getRequestContext().getRequestParameter(OBJECTID);
265 String value = "";
266 if(uiGroupMemberSelector.isSelectedUser()) {
267 value = permission;
268 } else {
269 value = permission + ":" + groupId;
270 }
271 String returnField = uiGroupMemberSelector.getReturnField();
272 ((UISelectable) uiGroupMemberSelector.getSourceComponent()).doSelect(returnField, value);
273 if (uiGroupMemberSelector.isUsePopup) {
274 UIPopupWindow uiPopup = uiGroupMemberSelector.getParent();
275 uiPopup.setShow(false);
276 UIComponent uicomp = uiGroupMemberSelector.getSourceComponent().getParent();
277 event.getRequestContext().addUIComponentToUpdateByAjax(uicomp);
278 if (!uiPopup.getId().equals("PopupComponent"))
279 event.getRequestContext().addUIComponentToUpdateByAjax(uiPopup);
280 } else {
281 event.getRequestContext().addUIComponentToUpdateByAjax(
282 uiGroupMemberSelector.getSourceComponent());
283 }
284 }
285 }
286
287
288
289
290
291
292
293
294
295
296 static public class SelectPathActionListener extends EventListener<UIBreadcumbs> {
297 public void execute(Event<UIBreadcumbs> event) throws Exception {
298 UIBreadcumbs uiBreadcumbs = event.getSource();
299 UIGroupMemberSelector uiGroupMemberSelector = uiBreadcumbs.getParent();
300 String objectId = event.getRequestContext().getRequestParameter(OBJECTID);
301 uiBreadcumbs.setSelectPath(objectId);
302 String selectGroupId = uiBreadcumbs.getSelectLocalPath().getId();
303 uiGroupMemberSelector.changeGroup(selectGroupId);
304 if (uiGroupMemberSelector.isUsePopup) {
305 UIPopupWindow uiPopup = uiBreadcumbs.getAncestorOfType(UIPopupWindow.class);
306 uiPopup.setShow(true);
307 uiPopup.setShowMask(true);
308 }
309 event.getRequestContext().addUIComponentToUpdateByAjax(uiGroupMemberSelector);
310 }
311 }
312
313 static public class AddAnyPermissionActionListener extends EventListener<UIAnyPermission> {
314 public void execute(Event<UIAnyPermission> event) throws Exception {
315 UIAnyPermission uiAnyPermission = event.getSource();
316 UIGroupMemberSelector uiGroupMemberSelector = uiAnyPermission.getParent();
317 String returnField = uiGroupMemberSelector.getReturnField();
318 String value = IdentityConstants.ANY;
319 ((UISelectable)uiGroupMemberSelector.getSourceComponent()).doSelect(returnField, value);
320 if (uiGroupMemberSelector.isUsePopup()) {
321 UIPopupWindow uiPopup = uiGroupMemberSelector.getParent();
322 uiPopup.setShow(false);
323 UIComponent uicomp = uiGroupMemberSelector.getSourceComponent().getParent();
324 event.getRequestContext().addUIComponentToUpdateByAjax(uicomp);
325 if (!uiPopup.getId().equals("PopupComponent"))
326 event.getRequestContext().addUIComponentToUpdateByAjax(uiPopup);
327 } else {
328 event.getRequestContext().addUIComponentToUpdateByAjax(
329 uiGroupMemberSelector.getSourceComponent());
330 }
331 }
332 }
333
334
335
336
337
338 public boolean isShowAnyPermission() {
339 return isShowAnyPermission;
340 }
341
342
343
344
345
346
347
348 public void setShowAnyPermission(boolean isShowAnyPermission) {
349 this.isShowAnyPermission = isShowAnyPermission;
350 }
351 }