package org.jboss.seam.security.permission.action;
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 javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.jboss.seam.security.permission.Permission;
import org.jboss.seam.security.permission.PermissionManager;
import org.picketlink.idm.spi.model.IdentityObject;
@Named
@ConversationScoped
public class PermissionSearch implements Serializable {
private static final long serialVersionUID = 2802038930768758665L;
private Map<IdentityObject, List<Permission>> groupedPermissions = new HashMap<IdentityObject, List<Permission>>();
//@DataModel(scope = ConversationScoped.class)
List<IdentityObject> recipients;
//@DataModelSelection
Principal selectedRecipient;
@Inject
PermissionManager permissionManager;
@Inject
Conversation conversation;
private Object target;
public void search(Object target) {
conversation.begin();
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.getIdentity())) {
recipientPermissions = new ArrayList<Permission>();
groupedPermissions.put(permission.getIdentity(), recipientPermissions);
} else {
recipientPermissions = groupedPermissions.get(permission.getIdentity());
}
recipientPermissions.add(permission);
}
recipients = new ArrayList<IdentityObject>(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.getPermission());
}
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);
}
}