/**
* Copyright (C) 2009 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.webui.organization;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.exoplatform.commons.serialization.api.annotations.Serialized;
import org.exoplatform.commons.utils.SerializablePageList;
import org.exoplatform.services.organization.Group;
import org.exoplatform.services.organization.GroupHandler;
import org.exoplatform.services.organization.MembershipType;
import org.exoplatform.services.organization.MembershipTypeHandler;
import org.exoplatform.services.organization.OrganizationService;
import org.exoplatform.services.organization.User;
import org.exoplatform.services.organization.UserStatus;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIGrid;
import org.exoplatform.webui.core.UIPageIterator;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.Event.Phase;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.form.UIForm;
import org.exoplatform.webui.form.UIFormPopupWindow;
/**
* Created by The eXo Platform SARL Author : Tuan Nguyen tuan08@users.sourceforge.net Jun 26, 2006
*
*/
@ComponentConfig(template = "system:/groovy/organization/webui/component/UIUserMembershipSelector.gtmpl", events = {
@EventConfig(listeners = UIUserMembershipSelector.SelectMembershipActionListener.class),
@EventConfig(listeners = UIUserMembershipSelector.DeleteMembershipActionListener.class, phase = Phase.DECODE, confirm = "UIUserMembershipSelector.deleteMembership") })
@Serialized
public class UIUserMembershipSelector extends UISelector<String> {
private List<Membership> membership_ = new ArrayList<Membership>();
private String user_ = "site";
private boolean isAdminRole_ = false;
public static final String[] BEAN_FIELD = { "userName", "groupId", "membershipType" };
public static final String[] ACTIONS = { "DeleteMembership" };
public UIUserMembershipSelector() throws Exception {
super("UIUserMembershipSelector", null);
setComponentConfig(UIUserMembershipSelector.class, null);
UIGrid uiGrid = addChild(UIGrid.class, null, "MembershipGrid");
uiGrid.configure("id", BEAN_FIELD, ACTIONS);
UIFormPopupWindow uiPopup = addChild(UIFormPopupWindow.class, null, "UserPermissionSelector");
uiPopup.setWindowSize(540, 0);
UIGroupMembershipSelector uiMembershipSelector = createUIComponent(UIGroupMembershipSelector.class, null, null);
uiPopup.setUIComponent(uiMembershipSelector);
}
public String getUser() {
return user_;
}
public void setUserName(String userName) {
user_ = userName;
}
public Class<String> getTypeValue() {
return String.class;
}
public boolean isAdminRole() {
return isAdminRole_;
}
public void setAdminRole(boolean b) {
isAdminRole_ = b;
}
@SuppressWarnings("unchecked")
public void setUser(User user) throws Exception {
user_ = user.getUserName();
membership_.clear();
OrganizationService service = getApplicationComponent(OrganizationService.class);
Collection<org.exoplatform.services.organization.Membership> collection = service.getMembershipHandler()
.findMembershipsByUser(user_);
for (org.exoplatform.services.organization.Membership membership : collection) {
addMembership(new Membership(membership.getUserName(), membership.getId(), membership.getGroupId(),
membership.getMembershipType()));
}
UIGrid uiGrid = getChild(UIGrid.class);
SerializablePageList pageList = new SerializablePageList(new MembershipListAccess(getMembership()), 10);
uiGrid.getUIPageIterator().setPageList(pageList);
}
public List<Membership> getMembership() {
return membership_;
}
public void createMembership(String groupId, String membershipType) {
Membership membership = new Membership(user_, "", groupId, membershipType);
addMembership(membership);
}
public void addMembership(Membership mem) {
String groupId, membershipType = null;
for (Membership ele : membership_) {
groupId = ele.getGroupId();
membershipType = ele.getMembershipType();
if (groupId.equals(mem.getGroupId()) && membershipType.equals(mem.getMembershipType()))
return;
}
membership_.add(mem);
}
public void setUIInputValue(Object input) {
user_ = (String) input;
}
public void save(OrganizationService service, boolean broadcast) throws Exception {
GroupHandler groupHandler = service.getGroupHandler();
MembershipTypeHandler mtHandler = service.getMembershipTypeHandler();
User user = service.getUserHandler().findUserByName(user_);
for (Membership membership : membership_) {
if (user == null)
user = service.getUserHandler().findUserByName(membership.getUserName());
Group group = groupHandler.findGroupById(membership.getGroupId());
MembershipType mt = mtHandler.findMembershipType(membership.getMembershipType());
if (service.getMembershipHandler() != null) {
service.getMembershipHandler().linkMembership(user, group, mt, broadcast);
}
}
}
void setMembership(String groupId, String membershipType) {
createMembership(groupId, membershipType);
}
public String event(String actionName, String beanId) throws Exception {
UIForm uiForm = getAncestorOfType(UIForm.class);
if (uiForm != null)
return uiForm.event(actionName, getId(), beanId);
return super.event(name, beanId);
}
public static class DeleteMembershipActionListener extends EventListener<UIUserMembershipSelector> {
public void execute(Event<UIUserMembershipSelector> event) throws Exception {
UIUserMembershipSelector uiUserMembershipSelector = event.getSource();
String id = event.getRequestContext().getRequestParameter(OBJECTID);
UIPageIterator pageIterator = uiUserMembershipSelector.getChild(UIGrid.class).getUIPageIterator();
int currentPage = pageIterator.getCurrentPage();
OrganizationService service = uiUserMembershipSelector.getApplicationComponent(OrganizationService.class);
service.getMembershipHandler().removeMembership(id, true);
User user = service.getUserHandler().findUserByName(uiUserMembershipSelector.getUser(), UserStatus.ANY);
uiUserMembershipSelector.setUser(user);
while (currentPage > pageIterator.getAvailablePage())
currentPage--;
pageIterator.setCurrentPage(currentPage);
}
}
public static class Membership implements Serializable {
private String groupId_;
private String membershipType_;
private String userName_;
private String id_;
public Membership(String userName, String id, String groupId, String membershipType) {
userName_ = userName;
id_ = id;
groupId_ = groupId;
membershipType_ = membershipType;
}
public Membership(String userName, String groupId, String membershipType) {
this(userName, "", groupId, membershipType);
}
public String getId() {
return id_;
}
public void setId(String id) {
id_ = id;
}
public String getUserName() {
return userName_;
}
public void setUserName(String userName) {
userName_ = userName;
}
public String getGroupId() {
return groupId_;
}
public void setGroupId(String groupId) {
groupId_ = groupId;
}
public String getMembershipType() {
return membershipType_;
}
public void setMembershipType(String membershipType) {
membershipType_ = membershipType;
}
}
}