package org.jblooming.security; import org.jblooming.ontology.LoggableIdentifiableSupport; import org.jblooming.utilities.StringUtilities; import org.jblooming.utilities.JSP; import org.jblooming.waf.settings.ApplicationState; import org.jblooming.logging.Auditable; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * @author Pietro Polsinelli, Roberto Bicchierai * @version 2 alpha * @since JDK 1.3.01 02 */ public class Role extends LoggableIdentifiableSupport implements Comparable, Auditable { protected String name; private String description; private String permissionIds; private Set<Permission> permissions = new HashSet<Permission>(); // read only collections private Set<OperatorRole> operatorRoles = new HashSet<OperatorRole>(); private Set<GroupRole> groupRoles = new HashSet<GroupRole>(); public Role() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean hasPermissionFor(Permission p) { if (permissionIds == null) return false; if (permissions == null) refreshPermissionIds(); return permissions.contains(p); } /** * add a permission to the permission's list * * @param p a Permission */ public void addPermission(Permission p) { permissions.add(p); refreshPermissionIds(); } /** * remove a permission from the permission's list * * @param p permission to be removed */ public void removePermission(Permission p) { if (getPermissions() != null) { getPermissions().remove(p); refreshPermissionIds(); } } protected void refreshPermissionIds() { permissionIds = ""; for (Permission permission : getPermissions()) { permissionIds = permissionIds + permission.getName() + "|"; } if (permissionIds!=null && permissionIds.endsWith("|")) permissionIds = permissionIds.substring(0, permissionIds.length() - 1); } public Set<Permission> getPermissions() { return permissions; } public void setPermissions(Set<Permission> permissions) { this.permissions = permissions; } public String getPermissionIds() { return permissionIds; } public void setPermissionIds(String permissionIds) { this.permissionIds = permissionIds; refreshPermissions(); } private void refreshPermissions() { permissions = new HashSet(); if (permissionIds != null && permissionIds.trim().length() > 0) { Set<String> ps = StringUtilities.splitToSet(permissionIds, "|"); for (String s : ps) { Permission perm = ApplicationState.getPermissions().get(s); if (perm!=null) permissions.add(perm); } } } public Iterator<OperatorRole> getOperatorsIterator() { return operatorRoles.iterator(); } public int operatorsSize() { return operatorRoles.size(); } public Iterator<GroupRole> getGroupIterator() { return groupRoles.iterator(); } public int groupsSize() { return groupRoles.size(); } private Set<OperatorRole> getOperatorRoles() { return operatorRoles; } private void setOperatorRoles(Set<OperatorRole> operatorRoles) { this.operatorRoles = operatorRoles; } private Set<GroupRole> getGroupRoles() { return groupRoles; } private void setGroupRoles(Set<GroupRole> groupRoles) { this.groupRoles = groupRoles; } public String getDisplayName() { return JSP.w(getName()); } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }