/* * $Id: UserDelegation.java,v 1.12 2005/06/20 11:17:39 laddi Exp $ * Created on 19.1.2005 * * Copyright (C) 2005 Idega Software hf. All Rights Reserved. * * This software is the proprietary information of Idega hf. * Use is subject to license terms. */ package se.agura.applications.presentation; import java.rmi.RemoteException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import javax.ejb.RemoveException; import se.agura.AguraConstants; import com.idega.presentation.IWContext; import com.idega.presentation.Image; import com.idega.presentation.Table; import com.idega.presentation.text.Break; import com.idega.presentation.ui.CheckBox; import com.idega.presentation.ui.Form; import com.idega.presentation.ui.HiddenInput; import com.idega.presentation.ui.SubmitButton; import com.idega.user.data.Group; import com.idega.user.data.User; import com.idega.util.IWTimestamp; import com.idega.util.ListUtil; /** * Last modified: $Date: 2005/06/20 11:17:39 $ by $Author: laddi $ * * @author <a href="mailto:laddi@idega.com">laddi</a> * @version $Revision: 1.12 $ */ public class UserDelegation extends ApplicationsBlock { private static final String PARAMETER_GROUP = "ud_group_id"; private static final String PARAMETER_ADD_USERS = "ud_add_users"; private static final String PARAMETER_CONTAINED_USERS = "ud_contained_users"; private Image iButtonImage; /* (non-Javadoc) * @see se.agura.applications.presentation.ApplicationsBlock#present(com.idega.presentation.IWContext) */ public void present(IWContext iwc) { if (iwc.isLoggedOn()) { try { User user = iwc.getCurrentUser(); Group group = user.getPrimaryGroup(); parse(iwc, group); if (!group.getGroupType().equals(AguraConstants.GROUP_TYPE_EMPLOYEES) && !group.getGroupType().equals(AguraConstants.GROUP_TYPE_ASSISTANTS) && !group.getGroupType().equals(AguraConstants.GROUP_TYPE_SUBSTITUTES)) { Form form = new Form(); form.addParameter(PARAMETER_GROUP, group.getPrimaryKey().toString()); String[] substitutesType = { AguraConstants.GROUP_TYPE_SUBSTITUTES }; Collection substitutes = group.getChildGroups(substitutesType, true); if (substitutes != null && !substitutes.isEmpty()) { Collection users = new ArrayList(); Iterator iter = substitutes.iterator(); while (iter.hasNext()) { users.addAll(getUserBusiness(iwc).getUsersInGroup((Group) iter.next())); } form.add(getHeader(getResourceBundle().getLocalizedString("substitutes", "Substitutes"))); form.add(new Break()); form.add(getUserTable(users, group)); form.add(new Break()); } SubmitButton submit = null; if (iButtonImage != null) { submit = new SubmitButton(iButtonImage); } else { submit = (SubmitButton) getButton(new SubmitButton(getResourceBundle().getLocalizedString("delegate", "Delegate"))); } form.add(submit); add(form); } else { add(getResourceBundle().getLocalizedString("can_not_delegate", "You don't have permission to delegate authority to other users.")); } } catch (RemoteException re) { log(re); } } } private Table getUserTable(Collection users, Group primaryGroup) { Table table = new Table(); table.setCellpadding(iCellpadding); table.setCellspacing(0); table.setColumns(2); int row = 1; Iterator iter = users.iterator(); while (iter.hasNext()) { User user = (User) iter.next(); CheckBox box = getCheckBox(new CheckBox(PARAMETER_ADD_USERS, user.getPrimaryKey().toString())); if (user.hasRelationTo(primaryGroup)) { table.add(new HiddenInput(PARAMETER_CONTAINED_USERS, user.getPrimaryKey().toString()), 1, row); box.setChecked(true); } table.add(box, 1, row); table.add(getText(user.getName()), 2, row++); } table.setCellpaddingLeft(1, 0); return table; } private void parse(IWContext iwc, Group group) throws RemoteException { if (iwc.isParameterSet(PARAMETER_GROUP)) { String[] usersToAdd = iwc.getParameterValues(PARAMETER_ADD_USERS); String[] usersContained = iwc.getParameterValues(PARAMETER_CONTAINED_USERS); Collection addUsers = usersToAdd != null ? ListUtil.convertStringArrayToList(usersToAdd) : new ArrayList(); Collection containedUsers = usersContained != null ? ListUtil.convertStringArrayToList(usersContained) : new ArrayList(); Collection removeUsers = new ArrayList(containedUsers); removeUsers.removeAll(addUsers); addUsers.removeAll(containedUsers); Iterator iter = removeUsers.iterator(); while (iter.hasNext()) { String userID = (String) iter.next(); try { User element = getUserBusiness(iwc).getUser(new Integer(userID)); group.removeUser(element, iwc.getCurrentUser()); } catch (RemoveException re) { log(re); } } iter = addUsers.iterator(); while (iter.hasNext()) { String userID = (String) iter.next(); User element = getUserBusiness(iwc).getUser(new Integer(userID)); group.addGroup(element, new IWTimestamp().getTimestamp()); } getParentPage().setAlertOnLoad(getResourceBundle().getLocalizedString("delegation_finished", "Permissions granted/removed.")); } } public void setButtonImage(Image buttonImage) { iButtonImage = buttonImage; } }