/*************************************************************************** * Copyright (C) 2003-2009 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. * **************************************************************************/ package org.exoplatform.ecm.webui.component.admin.views; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import javax.jcr.Node; import org.exoplatform.commons.utils.LazyPageList; import org.exoplatform.commons.utils.ListAccess; import org.exoplatform.commons.utils.ListAccessImpl; import org.exoplatform.ecm.webui.core.UIPagingGrid; import org.exoplatform.services.cms.views.ManageViewService; import org.exoplatform.services.wcm.utils.WCMCoreUtils; import org.exoplatform.web.application.ApplicationMessage; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.core.UIApplication; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; /** * Created by The eXo Platform SARL * Author : Dang Van Minh * minh.dang@exoplatform.com * Feb 19, 2013 * 4:26:03 PM */ @ComponentConfig( template = "system:/groovy/ecm/webui/UIGridWithButton.gtmpl", events = { @EventConfig(listeners = UIViewPermissionList.DeleteActionListener.class, confirm = "UIViewPermissionList.msg.confirm-delete") } ) public class UIViewPermissionList extends UIPagingGrid { public static String[] PERMISSION_BEAN_FIELD = {"friendlyPermission"} ; private String viewName; public UIViewPermissionList() throws Exception { getUIPageIterator().setId("PermissionListPageIterator") ; configure("permission", UIViewPermissionList.PERMISSION_BEAN_FIELD, new String[] {"Delete"}); } public String[] getActions() { return new String[] {} ;} public String getViewName() { return viewName; } public void setViewName(String name) { viewName = name; } @Override public void refresh(int currentPage) throws Exception { UIViewPermissionContainer uiPerContainer = getParent(); UIViewFormTabPane uiTabPane = uiPerContainer.getParent(); UIViewForm uiViewForm = uiTabPane.getChild(UIViewForm.class); List<PermissionBean> permissions = new ArrayList<PermissionBean>(); if(uiPerContainer.isView()) { ManageViewService viewService = WCMCoreUtils.getService(ManageViewService.class); Node viewNode = viewService.getViewByName(viewName, WCMCoreUtils.getUserSessionProvider()); String strPermission = viewNode.getProperty("exo:accessPermissions").getString(); permissions = getBeanList(strPermission); } else { permissions = getBeanList(uiViewForm.getPermission()); } Collections.sort(permissions, new ViewPermissionComparator()); ListAccess<PermissionBean> permissionBeanList = new ListAccessImpl<PermissionBean>(PermissionBean.class, permissions); getUIPageIterator().setPageList(new LazyPageList<PermissionBean>(permissionBeanList, getUIPageIterator().getItemsPerPage())); getUIPageIterator().setTotalItems(permissions.size()); if (currentPage > getUIPageIterator().getAvailablePage()) { getUIPageIterator().setCurrentPage(getUIPageIterator().getAvailablePage()); } else { getUIPageIterator().setCurrentPage(currentPage); } } static public class DeleteActionListener extends EventListener<UIViewPermissionList> { public void execute(Event<UIViewPermissionList> event) throws Exception { UIViewPermissionList uiPermissionList = event.getSource(); UIViewPermissionContainer uiContainer = uiPermissionList.getParent(); UIViewFormTabPane uiTabPane = uiContainer.getParent(); UIViewForm uiViewForm = uiTabPane.getChild(UIViewForm.class); String permission = event.getRequestContext().getRequestParameter(OBJECTID); String permissions = uiPermissionList.removePermission(permission, uiViewForm.getPermission()); if(permissions.length() == 0) { UIApplication uiApp = uiPermissionList.getAncestorOfType(UIApplication.class); uiApp.addMessage(new ApplicationMessage("UIViewPermissionList.msg.permission-cannot-empty", null, ApplicationMessage.WARNING)); event.getRequestContext().addUIComponentToUpdateByAjax(uiContainer); uiTabPane.setSelectedTab(uiContainer.getId()); return; } uiViewForm.setPermission(permissions); uiPermissionList.refresh(uiPermissionList.getUIPageIterator().getCurrentPage()); event.getRequestContext().addUIComponentToUpdateByAjax(uiPermissionList.getParent()); } } static public class ViewPermissionComparator implements Comparator<PermissionBean> { public int compare(PermissionBean t1, PermissionBean t2) throws ClassCastException { String per1 = t1.getPermission(); String per2 = t2.getPermission(); return per1.compareToIgnoreCase(per2); } } public static class PermissionBean { private String permssion ; private String friendlyPermission; public PermissionBean() {} public String getPermission(){ return this.permssion ; } public void setPermission( String permission) { this.permssion = permission ; } public String getFriendlyPermission() { return friendlyPermission; } public void setFriendlyPermission(String friendlyPer) { this.friendlyPermission = friendlyPer; } } private String removePermission(String removePermission, String permissions) { StringBuilder perBuilder = new StringBuilder(); if(permissions.indexOf(",") > -1) { String[] arrPer = permissions.split(","); for(String per : arrPer) { if(per.equals(removePermission)) continue; if(perBuilder.length() > 0) perBuilder.append(","); perBuilder.append(per); } } return perBuilder.toString(); } private List<PermissionBean> getBeanList(String permissions) throws Exception { UIViewContainer uiContainer = getAncestorOfType(UIViewContainer.class); List<PermissionBean> listBean = new ArrayList<PermissionBean>(); String[] arrPers = new String[] {}; if(permissions.contains(",")) { arrPers = permissions.split(","); } else if(permissions.length() > 0) { arrPers = new String[] {permissions}; } for(String per : arrPers) { PermissionBean bean = new PermissionBean(); bean.setPermission(per); bean.setFriendlyPermission(uiContainer.getFriendlyPermission(per)); listBean.add(bean); } return listBean; } }