/* * Copyright (C) 2003-2007 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.explorer.popup.info; import java.util.ArrayList; import java.util.List; import javax.jcr.Node; import org.exoplatform.commons.utils.ListAccess; import org.exoplatform.ecm.webui.component.explorer.UIJCRExplorer; import org.exoplatform.ecm.webui.core.UIPermissionManagerBase; import org.exoplatform.ecm.webui.selector.ComponentSelector; import org.exoplatform.ecm.webui.selector.UISelectable; import org.exoplatform.ecm.webui.utils.Utils; import org.exoplatform.services.organization.Group; import org.exoplatform.services.organization.OrganizationService; import org.exoplatform.services.organization.User; 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.ComponentConfigs; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.core.UIApplication; import org.exoplatform.webui.core.UIBreadcumbs; import org.exoplatform.webui.core.UIComponent; import org.exoplatform.webui.core.UIPopupWindow; import org.exoplatform.webui.core.UITree; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; import org.exoplatform.webui.organization.UIGroupMembershipSelector; /** * Created by The eXo Platform SARL * Author : Pham Tuan * phamtuanchip@yahoo.de * Dec 7, 2006 8:31:56 AM */ @ComponentConfigs({ @ComponentConfig( template = "app:/groovy/webui/component/explorer/popup/info/UIGroupSelector.gtmpl", events = { @EventConfig(listeners = UIGroupSelector.ChangeNodeActionListener.class), @EventConfig(listeners = UIGroupSelector.SelectMembershipActionListener.class), @EventConfig(listeners = UIGroupSelector.SelectPathActionListener.class) } ), @ComponentConfig( type = UITree.class, id = "UITreeGroupSelector", template = "system:/groovy/webui/core/UITree.gtmpl", events = @EventConfig(listeners = UITree.ChangeNodeActionListener.class) ), @ComponentConfig( type = UIBreadcumbs.class, id = "BreadcumbGroupSelector", template = "system:/groovy/webui/core/UIBreadcumbs.gtmpl", events = @EventConfig(listeners = UIBreadcumbs.SelectPathActionListener.class) ) }) public class UIGroupSelector extends UIGroupMembershipSelector implements ComponentSelector { private UIComponent uiComponent ; private String returnFieldName = null ; private boolean isSelectGroup_ = false ; private boolean isSelectMember_ = false ; private boolean isSelectUSer_ = false ; public UIGroupSelector() throws Exception {} public UIComponent getSourceComponent() { return uiComponent ; } public String getReturnField() { return returnFieldName ; } public void setSourceComponent(UIComponent uicomponent, String[] initParams) { uiComponent = uicomponent ; if(initParams == null || initParams.length < 0) return ; for(int i = 0; i < initParams.length; i ++) { if(initParams[i].indexOf("returnField") > -1) { String[] array = initParams[i].split("=") ; returnFieldName = array[1] ; break ; } returnFieldName = initParams[0] ; } } public void setSelectGroup(boolean isSelect) { isSelectGroup_ = isSelect ;} public void setSelectMember(boolean isSelect) { isSelectMember_ = isSelect ;} public void setSelectUser(boolean isSelect) { isSelectUSer_ = isSelect ;} public boolean isSelectGroup() {return isSelectGroup_ ;} public boolean isSelectMember() {return isSelectMember_ ;} public boolean isSelectUser() {return isSelectUSer_ ;} private void setDefaultValue() { isSelectGroup_ = false ; isSelectMember_ = false ; isSelectUSer_ = false ; } @SuppressWarnings({ "unchecked", "cast" }) public List getChildGroup() throws Exception { List children = new ArrayList() ; OrganizationService service = WCMCoreUtils.getService(OrganizationService.class); for (Object child : service.getGroupHandler().findGroups(this.getCurrentGroup())) { children.add((Group)child) ; } return children ; } public List<User> getUsers() throws Exception { List<User> children = new ArrayList<User>() ; OrganizationService service = WCMCoreUtils.getService(OrganizationService.class); ListAccess<User> userPageList = service.getUserHandler().findUsersByGroupId(this.getCurrentGroup().getId()) ; for(User child : userPageList.load(0, userPageList.getSize())){ children.add(child) ; } return children ; } static public class SelectMembershipActionListener extends EventListener<UIGroupSelector> { public void execute(Event<UIGroupSelector> event) throws Exception { UIGroupSelector uiGroupSelector = event.getSource(); String user = event.getRequestContext().getRequestParameter(OBJECTID) ; UIJCRExplorer uiExplorer = uiGroupSelector.getAncestorOfType(UIJCRExplorer.class) ; Node node = uiExplorer.getCurrentNode() ; if(user.equals(Utils.getNodeOwner(node))) { UIApplication uiApp = uiGroupSelector.getAncestorOfType(UIApplication.class) ; uiApp.addMessage(new ApplicationMessage("UIGroupSelector.msg.not-change-owner", new Object[]{user})) ; return ; } String returnField = uiGroupSelector.getReturnField() ; ((UISelectable)uiGroupSelector.getSourceComponent()).doSelect(returnField, user) ; UIPopupWindow uiPopup = uiGroupSelector.getParent() ; uiGroupSelector.setDefaultValue() ; uiPopup.setShow(false) ; UIPermissionManagerBase uiManager = uiGroupSelector.getAncestorOfType(UIPermissionManagerBase.class) ; event.getRequestContext().addUIComponentToUpdateByAjax(uiManager) ; } } static public class ChangeNodeActionListener extends EventListener<UITree> { public void execute(Event<UITree> event) throws Exception { UIGroupSelector uiGroupSelector = event.getSource().getAncestorOfType(UIGroupSelector.class) ; String groupId = event.getRequestContext().getRequestParameter(OBJECTID) ; uiGroupSelector.changeGroup(groupId) ; event.getRequestContext().addUIComponentToUpdateByAjax(uiGroupSelector) ; } } static public class SelectPathActionListener extends EventListener<UIBreadcumbs> { public void execute(Event<UIBreadcumbs> event) throws Exception { UIBreadcumbs uiBreadcumbs = event.getSource() ; UIGroupSelector uiGroupSelector = uiBreadcumbs.getParent() ; String objectId = event.getRequestContext().getRequestParameter(OBJECTID) ; uiBreadcumbs.setSelectPath(objectId); String selectGroupId = uiBreadcumbs.getSelectLocalPath().getId() ; uiGroupSelector.changeGroup(selectGroupId) ; event.getRequestContext().addUIComponentToUpdateByAjax(uiGroupSelector) ; } } }