package org.jboss.seam.security.permission.action; import static org.jboss.seam.ScopeType.CONVERSATION; import static org.jboss.seam.annotations.Install.BUILT_IN; import java.io.Serializable; import java.security.Principal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; 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.annotations.datamodel.DataModel; import org.jboss.seam.annotations.datamodel.DataModelSelection; import org.jboss.seam.security.management.IdentityManager; import org.jboss.seam.security.permission.Permission; import org.jboss.seam.security.permission.PermissionManager; @Scope(CONVERSATION) @Name("org.jboss.seam.security.permission.permissionSearch") @Install(precedence = BUILT_IN) public class PermissionSearch implements Serializable { private Map<Principal,List<Permission>> groupedPermissions = new HashMap<Principal,List<Permission>>(); @DataModel List<Principal> recipients; @DataModelSelection Principal selectedRecipient; @In IdentityManager identityManager; @In PermissionManager permissionManager; private Object target; @Begin public void search(Object target) { this.target = target; } public void refresh() { List<Permission> permissions = permissionManager.listPermissions(target); groupedPermissions.clear(); for (Permission permission : permissions) { List<Permission> recipientPermissions = null; if (!groupedPermissions.containsKey(permission.getRecipient())) { recipientPermissions = new ArrayList<Permission>(); groupedPermissions.put(permission.getRecipient(), recipientPermissions); } else { recipientPermissions = groupedPermissions.get(permission.getRecipient()); } recipientPermissions.add(permission); } recipients = new ArrayList<Principal>(groupedPermissions.keySet()); } public String getActions(Principal recipient) { StringBuilder sb = new StringBuilder(); for (Permission permission : groupedPermissions.get(recipient)) { if (sb.length() > 0) sb.append(", "); sb.append(permission.getAction()); } return sb.toString(); } public Object getTarget() { return target; } public void revokeSelected() { permissionManager.revokePermissions(getSelectedPermissions()); refresh(); } public Principal getSelectedRecipient() { return selectedRecipient; } public List<Permission> getSelectedPermissions() { return groupedPermissions.get(selectedRecipient); } }