/*
* $Id$
* $URL$
*/
package org.subethamail.web.action;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.java.Log;
import org.hibernate.validator.constraints.Length;
import org.subethamail.entity.i.Permission;
import org.subethamail.entity.i.Validator;
import org.subethamail.web.Backend;
import org.subethamail.web.action.auth.AuthAction;
import org.subethamail.web.model.ErrorMapModel;
/**
* Adds a role to a mailing list or saves an existing role,
* depending on whether listId or roleId has been set.
*
* @author Jeff Schnitzer
*/
@Log
public class RoleSave extends AuthAction
{
/** */
public static class Model extends ErrorMapModel
{
/** If this is not null, create a new role */
@Getter @Setter Long listId;
/** If this is not null, save an existing role */
@Getter @Setter Long roleId;
/** */
@Length(min=1, max=Validator.MAX_ROLE_NAME)
@Getter @Setter String name = "";
/** */
@Getter String[] permissions;
/**
* This is mildly hackish; the presentation tier needs a Set
* interface so that it can determine if checkboxes should be
* checked. We also need it internally, so we always keep
* it synced to permissions.
*/
@Getter @Setter Set<Permission> realPermissions;
/**
* Whenever permissions is set, set realPermissions too.
* This method gets called by the bean populator.
*/
public void setPermissions(String[] value)
{
this.permissions = value;
this.realPermissions = new HashSet<Permission>();
if (this.permissions != null)
for (String permString: this.permissions)
this.realPermissions.add(Permission.valueOf(permString));
}
}
/** */
public void initialize()
{
this.getCtx().setModel(new Model());
}
/** */
@SuppressWarnings("unchecked")
public void execute() throws Exception
{
Model model = (Model)this.getCtx().getModel();
model.validate();
Set<Permission> perms = (model.realPermissions == null) ? Collections.EMPTY_SET : model.realPermissions;
if (model.getErrors().isEmpty())
{
if (model.roleId != null)
model.listId = Backend.instance().getListMgr().setRole(model.roleId, model.name, perms);
else
model.roleId = Backend.instance().getListMgr().addRole(model.listId, model.name, perms);
}
}
}