package eu.geoknow.generator.graphs.beans; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.fasterxml.jackson.annotation.JsonIgnore; import eu.geoknow.generator.users.UserManager.GraphPermissions; /** * POJO for AccessControl Objects, used by Graph class. Objects of this class are used for explicit * access rule information. * * @author Jonas * */ public class AccessControl { private GraphPermissions publicAccess; private List<String> readPermissionUsers; private List<String> writePermissionUsers; public AccessControl() {} public AccessControl(String publicAccess, List<String> usersRead, List<String> usersWrite) { setPublicAccess(publicAccess); setWritePermissionUsers(usersWrite); setReadPermissionUsers(usersRead); } private GraphPermissions parsePermissions(String permissionsStr) { GraphPermissions perm = null; if (permissionsStr != null && !permissionsStr.isEmpty()) { switch (permissionsStr.toLowerCase()) { case "n": case "no": perm = GraphPermissions.NO; break; case "r": case "read": perm = GraphPermissions.READ; break; case "w": case "write": perm = GraphPermissions.WRITE; break; default: perm = GraphPermissions.NO; break; } } return perm; } public GraphPermissions getPublicAccess() { return publicAccess; } public void setPublicAccess(Object publicAccess) { if (publicAccess instanceof String) this.publicAccess = parsePermissions(String.valueOf(publicAccess)); if (publicAccess instanceof GraphPermissions) this.publicAccess = (GraphPermissions) publicAccess; } @JsonIgnore public Map<GraphPermissions, List<String>> getUserPermissions() { HashMap<GraphPermissions, List<String>> accessMap = new HashMap<GraphPermissions, List<String>>(); accessMap.put(GraphPermissions.WRITE, getWritePermissionUsers()); accessMap.put(GraphPermissions.READ, getReadPermissionUsers()); return accessMap; } public List<String> getReadPermissionUsers() { if (this.readPermissionUsers == null) this.readPermissionUsers = new ArrayList<String>(); return this.readPermissionUsers; } public List<String> getWritePermissionUsers() { if (this.writePermissionUsers == null) this.writePermissionUsers = new ArrayList<String>(); return this.writePermissionUsers; } public void setReadPermissionUsers(List<String> users) { this.readPermissionUsers = users; } public void setWritePermissionUsers(List<String> users) { this.writePermissionUsers = users; } @JsonIgnore public void addPermissionUser(String permission, String user) { GraphPermissions perm = parsePermissions(permission); if (perm.equals(GraphPermissions.WRITE)) { if (writePermissionUsers == null) writePermissionUsers = new ArrayList<String>(); if (!writePermissionUsers.contains(user)) { writePermissionUsers.add(user); } } if (perm.equals(GraphPermissions.READ)) { if (readPermissionUsers == null) readPermissionUsers = new ArrayList<String>(); if (!readPermissionUsers.contains(user)) { readPermissionUsers.add(user); } } } }