/* * Copyright (C) 2012 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.exoplatform.forum.common.webui; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import org.exoplatform.forum.common.CommonUtils; import org.exoplatform.forum.common.UserHelper; import org.exoplatform.portal.webui.container.UIContainer; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; /** * @author <a href="mailto:haithanh0809@gmail.com">Hai Thanh Nguyen</a> * @version $Id$ * */ @ComponentConfig( template = "classpath:groovy/forum/common/UIPermissionGrid.gtmpl", events = { @EventConfig(listeners = UIPermissionGrid.TogglePermissionActionListener.class), @EventConfig(listeners = UIPermissionGrid.RemoveOwnerActionListener.class) } ) public class UIPermissionGrid extends UIContainer { private Set<String> permissions; private Map<String, Set<String>> owners; public UIPermissionGrid() { permissions = new LinkedHashSet<String>(); owners = new HashMap<String, Set<String>>(); setId("UIPermissionGrid"); } public static class RemoveOwnerActionListener extends EventListener<UIPermissionGrid> { @Override public void execute(Event<UIPermissionGrid> event) throws Exception { String owner = event.getRequestContext().getRequestParameter(OBJECTID); UIPermissionGrid source = event.getSource(); source.removeOwner(owner); event.getRequestContext().addUIComponentToUpdateByAjax(source); } } public static class TogglePermissionActionListener extends EventListener<UIPermissionGrid> { @Override public void execute(Event<UIPermissionGrid> event) throws Exception { String requestParam = event.getRequestContext().getRequestParameter(OBJECTID); UIPermissionGrid grid = event.getSource(); String owner = requestParam.substring(0, requestParam.indexOf(CommonUtils.COMMA)); String permission = requestParam.substring(owner.length() + 1); if (grid.hasPermission(owner, permission)) { grid.removePermission(owner, permission); } else { grid.addPermission(owner, permission); } event.getRequestContext().addUIComponentToUpdateByAjax(event.getSource()); } } void setPermissions(String... permissions) { this.permissions.addAll(Arrays.asList(permissions)); } protected Set<String> getPermissions() { return permissions; } protected String getLabelPermission(String id) throws Exception { BaseUIForm uiForm = getAncestorOfType(BaseUIForm.class); return uiForm.getLabel(id); } void setOwners(String... values) { for (String value : values) { if (value.length() == 0) continue; if (owners.containsKey(value)) { continue; } owners.put(value, new HashSet<String>(permissions)); } } Set<String> getOwners() { return owners.keySet(); } void removeOwner(String owner) { owners.remove(owner); } boolean hasPermission(String owner, String permission) { if (owners.containsKey(owner)) { Set<String> permissions = owners.get(owner); return permissions.contains(permission); } return false; } boolean removePermission(String owner, String permission) { if (owners.containsKey(owner)) { Set<String> permissions = owners.get(owner); return permissions.remove(permission); } return true; } boolean addPermission(String owner, String permission) { if (owners.containsKey(owner)) { Set<String> permissions = owners.get(owner); return permissions.add(permission); } owners.put(owner, new HashSet<String>(Arrays.asList(permission))); return true; } protected String getOwnersByPermission(String permission) { StringBuilder sb = new StringBuilder(); for (Map.Entry<String, Set<String>> entry : owners.entrySet()) { Set<String> permissions = entry.getValue(); if (permissions.contains(permission)) { sb.append(entry.getKey()); sb.append(','); } } return sb.length() == 0 ? CommonUtils.EMPTY_STR : sb.substring(0, sb.length() - 1); } protected String getDisplayNameOfOwner(String owner) throws Exception { return UserHelper.getDisplayNameOfOwner(owner); } }