1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.exoplatform.ecm.webui.component.admin.views;
19
20 import java.util.ArrayList;
21 import java.util.Collections;
22 import java.util.Comparator;
23 import java.util.List;
24
25 import javax.jcr.Node;
26
27 import org.exoplatform.commons.utils.LazyPageList;
28 import org.exoplatform.commons.utils.ListAccess;
29 import org.exoplatform.commons.utils.ListAccessImpl;
30 import org.exoplatform.ecm.webui.core.UIPagingGrid;
31 import org.exoplatform.services.cms.views.ManageViewService;
32 import org.exoplatform.services.wcm.utils.WCMCoreUtils;
33 import org.exoplatform.web.application.ApplicationMessage;
34 import org.exoplatform.webui.config.annotation.ComponentConfig;
35 import org.exoplatform.webui.config.annotation.EventConfig;
36 import org.exoplatform.webui.core.UIApplication;
37 import org.exoplatform.webui.event.Event;
38 import org.exoplatform.webui.event.EventListener;
39
40
41
42
43
44
45
46
47
48 @ComponentConfig(
49 template = "system:/groovy/ecm/webui/UIGridWithButton.gtmpl",
50 events = {
51 @EventConfig(listeners = UIViewPermissionList.DeleteActionListener.class, confirm = "UIViewPermissionList.msg.confirm-delete")
52 }
53 )
54 public class UIViewPermissionList extends UIPagingGrid {
55
56 public static String[] PERMISSION_BEAN_FIELD = {"friendlyPermission"} ;
57
58 private String viewName;
59
60 public UIViewPermissionList() throws Exception {
61 getUIPageIterator().setId("PermissionListPageIterator") ;
62 configure("permission", UIViewPermissionList.PERMISSION_BEAN_FIELD, new String[] {"Delete"});
63 }
64
65 public String[] getActions() { return new String[] {} ;}
66
67 public String getViewName() {
68 return viewName;
69 }
70
71 public void setViewName(String name) {
72 viewName = name;
73 }
74
75 @Override
76 public void refresh(int currentPage) throws Exception {
77 UIViewPermissionContainer uiPerContainer = getParent();
78 UIViewFormTabPane uiTabPane = uiPerContainer.getParent();
79 UIViewForm uiViewForm = uiTabPane.getChild(UIViewForm.class);
80 List<PermissionBean> permissions = new ArrayList<PermissionBean>();
81 if(uiPerContainer.isView()) {
82 ManageViewService viewService = WCMCoreUtils.getService(ManageViewService.class);
83 Node viewNode = viewService.getViewByName(viewName, WCMCoreUtils.getSystemSessionProvider());
84 String strPermission = viewNode.getProperty("exo:accessPermissions").getString();
85 permissions = getBeanList(strPermission);
86 } else {
87 permissions = getBeanList(uiViewForm.getPermission());
88 }
89 Collections.sort(permissions, new ViewPermissionComparator());
90 ListAccess<PermissionBean> permissionBeanList = new ListAccessImpl<PermissionBean>(PermissionBean.class, permissions);
91 getUIPageIterator().setPageList(new LazyPageList<PermissionBean>(permissionBeanList, getUIPageIterator().getItemsPerPage()));
92 getUIPageIterator().setTotalItems(permissions.size());
93 if (currentPage > getUIPageIterator().getAvailablePage()) {
94 getUIPageIterator().setCurrentPage(getUIPageIterator().getAvailablePage());
95 } else {
96 getUIPageIterator().setCurrentPage(currentPage);
97 }
98 }
99
100 static public class DeleteActionListener extends EventListener<UIViewPermissionList> {
101 public void execute(Event<UIViewPermissionList> event) throws Exception {
102 UIViewPermissionList uiPermissionList = event.getSource();
103 UIViewPermissionContainer uiContainer = uiPermissionList.getParent();
104 UIViewFormTabPane uiTabPane = uiContainer.getParent();
105 UIViewForm uiViewForm = uiTabPane.getChild(UIViewForm.class);
106 String permission = event.getRequestContext().getRequestParameter(OBJECTID);
107 String permissions = uiPermissionList.removePermission(permission, uiViewForm.getPermission());
108 if(permissions.length() == 0) {
109 UIApplication uiApp = uiPermissionList.getAncestorOfType(UIApplication.class);
110 uiApp.addMessage(new ApplicationMessage("UIViewPermissionList.msg.permission-cannot-empty",
111 null,
112 ApplicationMessage.WARNING));
113 event.getRequestContext().addUIComponentToUpdateByAjax(uiContainer);
114 uiTabPane.setSelectedTab(uiContainer.getId());
115 return;
116 }
117 uiViewForm.setPermission(permissions);
118 uiPermissionList.refresh(uiPermissionList.getUIPageIterator().getCurrentPage());
119 event.getRequestContext().addUIComponentToUpdateByAjax(uiPermissionList.getParent());
120 }
121 }
122
123 static public class ViewPermissionComparator implements Comparator<PermissionBean> {
124 public int compare(PermissionBean t1, PermissionBean t2) throws ClassCastException {
125 String per1 = t1.getPermission();
126 String per2 = t2.getPermission();
127 return per1.compareToIgnoreCase(per2);
128 }
129 }
130
131 public static class PermissionBean {
132
133 private String permssion ;
134 private String friendlyPermission;
135
136 public PermissionBean() {}
137
138 public String getPermission(){ return this.permssion ; }
139 public void setPermission( String permission) { this.permssion = permission ; }
140
141 public String getFriendlyPermission() { return friendlyPermission; }
142 public void setFriendlyPermission(String friendlyPer) { this.friendlyPermission = friendlyPer; }
143 }
144
145 private String removePermission(String removePermission, String permissions) {
146 StringBuilder perBuilder = new StringBuilder();
147 if(permissions.indexOf(",") > -1) {
148 String[] arrPer = permissions.split(",");
149 for(String per : arrPer) {
150 if(per.equals(removePermission)) continue;
151 if(perBuilder.length() > 0) perBuilder.append(",");
152 perBuilder.append(per);
153 }
154 }
155 return perBuilder.toString();
156 }
157
158 private List<PermissionBean> getBeanList(String permissions) throws Exception {
159 UIViewContainer uiContainer = getAncestorOfType(UIViewContainer.class);
160 List<PermissionBean> listBean = new ArrayList<PermissionBean>();
161 String[] arrPers = new String[] {};
162 if(permissions.contains(",")) {
163 arrPers = permissions.split(",");
164 } else if(permissions.length() > 0) {
165 arrPers = new String[] {permissions};
166 }
167 for(String per : arrPers) {
168 PermissionBean bean = new PermissionBean();
169 bean.setPermission(per);
170 bean.setFriendlyPermission(uiContainer.getFriendlyPermission(per));
171 listBean.add(bean);
172 }
173 return listBean;
174 }
175 }