1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.exoplatform.ecm.webui.component.admin.views;
18
19 import java.util.ArrayList;
20 import java.util.Collections;
21 import java.util.Comparator;
22 import java.util.List;
23 import java.util.MissingResourceException;
24 import java.util.ResourceBundle;
25
26 import javax.jcr.Node;
27
28 import org.exoplatform.commons.utils.LazyPageList;
29 import org.exoplatform.commons.utils.ListAccess;
30 import org.exoplatform.commons.utils.ListAccessImpl;
31 import org.exoplatform.ecm.permission.info.UIPermissionInputSet;
32 import org.exoplatform.ecm.webui.component.admin.UIECMAdminPortlet;
33 import org.exoplatform.ecm.webui.core.UIPagingGrid;
34 import org.exoplatform.ecm.webui.utils.Utils;
35 import org.exoplatform.services.cms.drives.DriveData;
36 import org.exoplatform.services.cms.drives.ManageDriveService;
37 import org.exoplatform.services.cms.views.ManageViewService;
38 import org.exoplatform.services.cms.views.ViewConfig;
39 import org.exoplatform.services.cms.views.impl.ManageViewPlugin;
40 import org.exoplatform.services.wcm.utils.WCMCoreUtils;
41 import org.exoplatform.web.application.ApplicationMessage;
42 import org.exoplatform.web.application.RequestContext;
43 import org.exoplatform.webui.config.annotation.ComponentConfig;
44 import org.exoplatform.webui.config.annotation.EventConfig;
45 import org.exoplatform.webui.core.UIApplication;
46 import org.exoplatform.webui.core.UIComponent;
47 import org.exoplatform.webui.event.Event;
48 import org.exoplatform.webui.event.EventListener;
49 import org.exoplatform.webui.form.input.UICheckBoxInput;
50
51
52
53
54
55
56
57 @ComponentConfig(
58 template = "system:/groovy/ecm/webui/UIGridWithButton.gtmpl",
59 events = {
60 @EventConfig(listeners = UIViewList.DeleteActionListener.class, confirm = "UIViewList.msg.confirm-delete"),
61 @EventConfig(listeners = UIViewList.EditInfoActionListener.class),
62 @EventConfig(listeners = UIViewList.ViewActionListener.class),
63 @EventConfig(listeners = UIViewList.AddViewActionListener.class)
64 }
65 )
66
67 public class UIViewList extends UIPagingGrid {
68
69 final static public String[] ACTIONS = { "AddView" };
70
71 final static public String ST_VIEW = "ViewPopup";
72
73 final static public String ST_EDIT = "EditPopup";
74
75 final static public String ST_ADD = "AddPopup";
76
77 private static String[] VIEW_BEAN_FIELD = { "name", "permissions", "tabList", "baseVersion" };
78
79 private static String[] VIEW_ACTION = { "View", "EditInfo", "Delete" };
80
81 public UIViewList() throws Exception {
82 getUIPageIterator().setId("UIViewsGrid") ;
83 configure("id", VIEW_BEAN_FIELD, VIEW_ACTION) ;
84 }
85
86 private String getBaseVersion(String name) throws Exception {
87 Node node =
88 getApplicationComponent(ManageViewService.class).getViewByName(name, WCMCoreUtils.getSystemSessionProvider());
89 if(node == null) return null ;
90 if(!node.isNodeType(Utils.MIX_VERSIONABLE) || node.isNodeType(Utils.NT_FROZEN)) return "";
91 return node.getBaseVersion().getName();
92 }
93
94 public String[] getActions() { return ACTIONS ; }
95
96 public void refresh(int currentPage) throws Exception {
97 List<ViewBean> viewBean = getViewsBean();
98 Collections.sort(viewBean, new ViewComparator());
99 ListAccess<ViewBean> viewBeanList = new ListAccessImpl<ViewBean>(ViewBean.class, viewBean);
100 getUIPageIterator().setPageList(new LazyPageList<ViewBean>(viewBeanList,
101 getUIPageIterator().getItemsPerPage()));
102 getUIPageIterator().setTotalItems(viewBean.size());
103 if (currentPage > getUIPageIterator().getAvailablePage())
104 getUIPageIterator().setCurrentPage(getUIPageIterator().getAvailablePage());
105 else
106 getUIPageIterator().setCurrentPage(currentPage);
107 }
108
109 private List<ViewBean> getViewsBean() throws Exception {
110 List<ViewConfig> views = getApplicationComponent(ManageViewService.class).getAllViews();
111 List<ViewBean> viewBeans = new ArrayList<ViewBean>();
112 for (ViewConfig view : views) {
113 List<String> tabsName = new ArrayList<String>();
114 for (ViewConfig.Tab tab : view.getTabList()) {
115 tabsName.add(tab.getTabName());
116 }
117 ViewBean bean = new ViewBean(view.getName(), getFriendlyViewPermission(view.getPermissions()), tabsName);
118 if (getBaseVersion(view.getName()) == null)
119 continue;
120 bean.setBaseVersion(getBaseVersion(view.getName()));
121 viewBeans.add(bean);
122 }
123 return viewBeans;
124 }
125
126 static public class ViewComparator implements Comparator<ViewBean> {
127 public int compare(ViewBean v1, ViewBean v2) throws ClassCastException {
128 String name1 = v1.getName();
129 String name2 = v2.getName();
130 return name1.compareToIgnoreCase(name2);
131 }
132 }
133
134 public boolean canDelete(List<DriveData> drivers, String viewName) {
135 for(DriveData driver : drivers){
136 String views = driver.getViews() ;
137 for(String view: views.split(",")){
138 if(viewName.equals(view.trim())) return false ;
139 }
140 }
141 return true ;
142 }
143
144 public String getRepository() {
145 return getAncestorOfType(UIECMAdminPortlet.class).getPreferenceRepository() ;
146 }
147
148 static public class AddViewActionListener extends EventListener<UIViewList> {
149 public void execute(Event<UIViewList> event) throws Exception {
150 UIViewList uiViewList = event.getSource() ;
151 if(uiViewList.getViewsBean().size() == 0) {
152 UIApplication uiApp = event.getSource().getAncestorOfType(UIApplication.class) ;
153 uiApp.addMessage(new ApplicationMessage("UIViewList.msg.access-denied", null, ApplicationMessage.WARNING)) ;
154 return ;
155 }
156 UIViewContainer uiViewContainer = uiViewList.getParent() ;
157 uiViewContainer.removeChildById(UIViewList.ST_VIEW) ;
158 uiViewContainer.removeChildById(UIViewList.ST_EDIT) ;
159 UIViewFormTabPane uiTabPane = uiViewContainer.createUIComponent(UIViewFormTabPane.class, null, null) ;
160 uiTabPane.update(false);
161 UIViewPermissionForm uiPermissionForm = uiTabPane.findFirstComponentOfType(UIViewPermissionForm.class);
162 UIPermissionInputSet uiPermissionInputSet = uiPermissionForm.getChildById(UIViewPermissionForm.TAB_PERMISSION);
163 for(UIComponent uiComp : uiPermissionInputSet.getChildren()) {
164 if(uiComp instanceof UICheckBoxInput) {
165 uiPermissionInputSet.removeChildById(uiComp.getId());
166 }
167 }
168 uiViewContainer.initPopup(UIViewList.ST_ADD, uiTabPane) ;
169 event.getRequestContext().addUIComponentToUpdateByAjax(uiViewContainer) ;
170 }
171 }
172
173 static public class DeleteActionListener extends EventListener<UIViewList> {
174 public void execute(Event<UIViewList> event) throws Exception {
175 UIViewList viewList = event.getSource();
176 viewList.setRenderSibling(UIViewList.class);
177 String viewName = event.getRequestContext().getRequestParameter(OBJECTID) ;
178 ManageDriveService manageDrive = viewList.getApplicationComponent(ManageDriveService.class);
179 ManageViewService manageViewService = viewList.getApplicationComponent(ManageViewService.class);
180
181 if(!viewList.canDelete(manageDrive.getAllDrives(), viewName)) {
182
183
184 ResourceBundle res = RequestContext.getCurrentInstance().getApplicationResourceBundle();
185 String viewDisplayName = null;
186 try {
187 viewDisplayName = res.getString("Views.label." + viewName);
188 } catch (MissingResourceException e) {
189 viewDisplayName = viewName;
190 }
191
192
193 UIApplication app = viewList.getAncestorOfType(UIApplication.class);
194 Object[] args = {viewDisplayName};
195 app.addMessage(new ApplicationMessage("UIViewList.msg.template-in-use", args));
196 event.getRequestContext().addUIComponentToUpdateByAjax(viewList.getParent());
197 return;
198 }
199
200 manageViewService.removeView(viewName);
201 org.exoplatform.services.cms.impl.Utils.addEditedConfiguredData(viewName, ManageViewPlugin.class.getSimpleName(), ManageViewPlugin.EDITED_CONFIGURED_VIEWS, true);
202 viewList.refresh(viewList.getUIPageIterator().getCurrentPage());
203 event.getRequestContext().addUIComponentToUpdateByAjax(viewList.getParent());
204 }
205 }
206
207 static public class EditInfoActionListener extends EventListener<UIViewList> {
208 public void execute(Event<UIViewList> event) throws Exception {
209 UIViewList uiViewList = event.getSource() ;
210 uiViewList.setRenderSibling(UIViewList.class) ;
211 String viewName = event.getRequestContext().getRequestParameter(OBJECTID) ;
212 Node viewNode = uiViewList.getApplicationComponent(ManageViewService.class).
213 getViewByName(viewName, WCMCoreUtils.getSystemSessionProvider()) ;
214 UIViewContainer uiViewContainer = uiViewList.getParent() ;
215 uiViewContainer.removeChildById(UIViewList.ST_VIEW) ;
216 uiViewContainer.removeChildById(UIViewList.ST_ADD) ;
217 UIViewFormTabPane viewTabPane = uiViewContainer.createUIComponent(UIViewFormTabPane.class, null, null) ;
218 viewTabPane.update(true);
219 UIViewForm viewForm = viewTabPane.getChild(UIViewForm.class) ;
220 viewForm.refresh(true) ;
221 viewForm.update(viewNode, false, null) ;
222 if(viewForm.getUICheckBoxInput(UIViewForm.FIELD_ENABLEVERSION).isChecked()) {
223 viewForm.getUICheckBoxInput(UIViewForm.FIELD_ENABLEVERSION).setDisabled(true);
224 } else {
225 viewForm.getUICheckBoxInput(UIViewForm.FIELD_ENABLEVERSION).setDisabled(false);
226 }
227 UIViewPermissionList uiPerList = viewTabPane.findFirstComponentOfType(UIViewPermissionList.class);
228 uiPerList.setViewName(viewName);
229 UIViewPermissionForm uiPermissionForm = viewTabPane.findFirstComponentOfType(UIViewPermissionForm.class);
230 UIPermissionInputSet uiPermissionInputSet = uiPermissionForm.getChildById(UIViewPermissionForm.TAB_PERMISSION);
231 for(UIComponent uiComp : uiPermissionInputSet.getChildren()) {
232 if(uiComp instanceof UICheckBoxInput) {
233 uiPermissionInputSet.removeChildById(uiComp.getId());
234 }
235 }
236 uiViewContainer.initPopup(UIViewList.ST_EDIT, viewTabPane) ;
237 uiPerList.refresh(uiPerList.getUIPageIterator().getCurrentPage());
238 UITabContainer uiTabContainer = viewTabPane.getChild(UITabContainer.class);
239 UITabList uiTab = uiTabContainer.getChild(UITabList.class);
240 uiTab.setViewName(viewName);
241 uiTab.refresh(uiTab.getUIPageIterator().getCurrentPage());
242 event.getRequestContext().addUIComponentToUpdateByAjax(uiViewContainer) ;
243 }
244 }
245
246 static public class ViewActionListener extends EventListener<UIViewList> {
247 public void execute(Event<UIViewList> event) throws Exception {
248 UIViewList uiViewList = event.getSource() ;
249 uiViewList.setRenderSibling(UIViewList.class) ;
250 String viewName = event.getRequestContext().getRequestParameter(OBJECTID) ;
251 Node viewNode = uiViewList.getApplicationComponent(ManageViewService.class).getViewByName(
252 viewName, WCMCoreUtils.getSystemSessionProvider()) ;
253 UIViewContainer uiViewContainer = uiViewList.getParent() ;
254 uiViewContainer.removeChildById(UIViewList.ST_EDIT) ;
255 uiViewContainer.removeChildById(UIViewList.ST_ADD) ;
256 UIViewFormTabPane viewTabPane = uiViewContainer.createUIComponent(UIViewFormTabPane.class, null, null) ;
257 viewTabPane.update(false);
258 viewTabPane.view(true);
259 UIViewPermissionList uiPerList = viewTabPane.findFirstComponentOfType(UIViewPermissionList.class);
260 uiPerList.configure("permission", UIViewPermissionList.PERMISSION_BEAN_FIELD, null);
261 uiPerList.setViewName(viewName);
262 UIViewPermissionContainer uiPerContainer = uiPerList.getParent();
263 uiPerContainer.setRenderedChild(UIViewPermissionList.class);
264 uiViewContainer.initPopup(UIViewList.ST_VIEW, viewTabPane) ;
265 uiPerList.refresh(uiPerList.getUIPageIterator().getCurrentPage());
266 UITabContainer uiTabContainer = viewTabPane.getChild(UITabContainer.class);
267 UITabList uiTab = uiTabContainer.getChild(UITabList.class);
268 uiTab.setViewName(viewName);
269 uiTab.setActions(new String[] {});
270 uiTab.configure("tabName", UITabList.TAB_BEAN_FIELD, null) ;
271 uiTab.refresh(uiTab.getUIPageIterator().getCurrentPage());
272 UIViewForm uiViewForm = viewTabPane.getChild(UIViewForm.class) ;
273 uiViewForm.refresh(false) ;
274 uiViewForm.update(viewNode, true, null) ;
275 viewTabPane.setActions(new String[] {"Close"});
276 event.getRequestContext().addUIComponentToUpdateByAjax(uiViewContainer) ;
277 }
278 }
279
280 public class ViewBean {
281 private String id;
282 private String name ;
283 private String permissions ;
284 private String tabList ;
285 private String baseVersion = "";
286
287 public ViewBean(String n, String per, List<String> tabs) {
288 id = n;
289 name = n ;
290 permissions = per ;
291 StringBuilder str = new StringBuilder() ;
292 for(int i = 0; i < tabs.size(); i++) {
293 str.append(" [").append(tabs.get(i)).append("]");
294 }
295 tabList = str.toString() ;
296 }
297
298 public String getBaseVersion() { return baseVersion; }
299 public void setBaseVersion(String s) { baseVersion = s;
300 }
301 public String getName() {
302 ResourceBundle res = RequestContext.getCurrentInstance().getApplicationResourceBundle();
303 String label = null;
304 try {
305 label = res.getString("Views.label." + name);
306 } catch (MissingResourceException e) {
307 label = name;
308 }
309 return label;
310 }
311 public void setName(String s) { name = s; }
312
313 public String getPermissions() { return permissions; }
314 public void setPermissions(String s) { permissions = s; }
315
316 public String getTabList() { return tabList; }
317 public void setTabList(String ls) { tabList = ls; }
318
319 public String getId() { return id; }
320 }
321
322 private String getFriendlyViewPermission(String permissions) throws Exception {
323 UIViewContainer uiViewContainer = getParent() ;
324 String[] arrPers = new String[] {};
325 if(permissions.contains(",")) {
326 arrPers = permissions.split(",");
327 } else if(permissions.length() > 0){
328 arrPers = new String[] {permissions};
329 }
330 StringBuilder perBuilder = new StringBuilder();
331 for(String per : arrPers) {
332 if(perBuilder.length() > 0) perBuilder.append(", ");
333 perBuilder.append(uiViewContainer.getFriendlyPermission(per));
334 }
335 return perBuilder.toString();
336 }
337 }