package org.jboss.seam.security.management.action; import static org.jboss.seam.ScopeType.CONVERSATION; import static org.jboss.seam.annotations.Install.BUILT_IN; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import org.jboss.seam.annotations.Begin; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Install; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.core.Conversation; import org.jboss.seam.security.management.IdentityManager; @Name("org.jboss.seam.security.management.roleAction") @Scope(CONVERSATION) @Install(precedence = BUILT_IN) public class RoleAction implements Serializable { private String originalRole; private String role; private List<String> groups; @In IdentityManager identityManager; @Begin public void createRole() { groups = new ArrayList<String>(); } @Begin public void editRole(String role) { this.originalRole = role; this.role = role; groups = identityManager.getRoleGroups(role); } public String save() { if (role != null && originalRole != null && !role.equals(originalRole)) { identityManager.deleteRole(originalRole); } if (identityManager.roleExists(role)) { return saveExistingRole(); } else { return saveNewRole(); } } private String saveNewRole() { boolean success = identityManager.createRole(role); if (success) { for (String r : groups) { identityManager.addRoleToGroup(role, r); } Conversation.instance().end(); } return "success"; } private String saveExistingRole() { List<String> grantedRoles = identityManager.getRoleGroups(role); if (grantedRoles != null) { for (String r : grantedRoles) { if (!groups.contains(r)) identityManager.removeRoleFromGroup(role, r); } } for (String r : groups) { if (grantedRoles == null || !grantedRoles.contains(r)) identityManager.addRoleToGroup(role, r); } Conversation.instance().end(); return "success"; } public String getRole() { return role; } public List<String> getAssignableRoles() { List<String> roles = identityManager.listGrantableRoles(); roles.remove(role); return roles; } public void setRole(String role) { this.role = role; } public List<String> getGroups() { return groups; } public void setGroups(List<String> groups) { this.groups = groups; } }