1 16 package org.outerj.daisy.repository.acl; 17 18 import org.outerx.daisy.x10.AclResultDocument; 19 import org.outerx.daisy.x10.AclAction; 20 21 28 public class AclResultInfo { 29 private Info[] infos = new Info[AclPermission.ENUM.length]; 30 private long userId; 31 private long[] roleIds; 32 private long documentId; 33 private long branchId; 34 private long languageId; 35 36 public AclResultInfo(long userId, long[] roleIds, long documentId, long branchId, long languageId) { 37 for (int i = 0; i < infos.length; i++) { 38 infos[i] = new Info(); 39 } 40 this.userId = userId; 41 this.roleIds = roleIds; 42 this.documentId = documentId; 43 this.branchId = branchId; 44 this.languageId = languageId; 45 } 46 47 private AclResultInfo() { 48 } 50 51 public void set(AclPermission permission, AclActionType action, String objectExpr, String subjectReason) { 52 infos[permission.getPos()].action = action; 53 infos[permission.getPos()].objectExpr = objectExpr; 54 infos[permission.getPos()].subjectReason = subjectReason; 55 } 56 57 public AclActionType getActionType(AclPermission permission) { 58 return infos[permission.getPos()].action; 59 } 60 61 public boolean isAllowed(AclPermission permission) { 62 return infos[permission.getPos()].action == AclActionType.GRANT; 63 } 64 65 public String getObjectExpr(AclPermission permission) { 66 return infos[permission.getPos()].objectExpr; 67 } 68 69 public String getSubjectReason(AclPermission permission) { 70 return infos[permission.getPos()].subjectReason; 71 } 72 73 private class Info { 74 public AclActionType action; 75 public String objectExpr; 76 public String subjectReason; 77 78 public Object clone() throws CloneNotSupportedException { 79 Info clone = new Info(); 80 clone.action = action; 81 clone.objectExpr = objectExpr; 82 clone.subjectReason = subjectReason; 83 return clone; 84 } 85 } 86 87 public void dump() { 88 for (int i = 0; i < infos.length; i++) { 89 System.out.println("Permission: " + AclPermission.ENUM[i]); 90 System.out.println("Action: " + infos[i].action); 91 System.out.println("Matching object expression: " + infos[i].objectExpr); 92 System.out.println("Matching subject: " + infos[i].subjectReason); 93 System.out.println("---------------------------------------------------------------------"); 94 } 95 } 96 97 public AclResultDocument getXml() { 98 AclResultDocument aclResultDocument = AclResultDocument.Factory.newInstance(); 99 AclResultDocument.AclResult aclResultXml = aclResultDocument.addNewAclResult(); 100 101 AclResultDocument.AclResult.User userXml = aclResultXml.addNewUser(); 102 userXml.setId(userId); 103 userXml.addNewRoles().setRoleIdArray(roleIds); 104 aclResultXml.setDocumentId(documentId); 105 aclResultXml.setBranchId(branchId); 106 aclResultXml.setLanguageId(languageId); 107 108 AclResultDocument.AclResult.Permissions permissionsXml = aclResultXml.addNewPermissions(); 109 for (int i = 0; i < infos.length; i++) { 110 if (infos[i].action != null) { 111 AclResultDocument.AclResult.Permissions.Permission permissionXml = permissionsXml.addNewPermission(); 112 permissionXml.setType(org.outerx.daisy.x10.AclPermission.Enum.forString(AclPermission.ENUM[i].toString())); 113 permissionXml.setAction(AclAction.Enum.forString(infos[i].action.toString())); 114 permissionXml.setObjectReason(infos[i].objectExpr); 115 permissionXml.setSubjectReason(infos[i].subjectReason); 116 } 117 } 118 119 return aclResultDocument; 120 } 121 122 public void setFromXml(AclResultDocument.AclResult aclResultXml) { 123 for (int i = 0; i < infos.length; i++) { 125 infos[i].objectExpr = null; 126 infos[i].subjectReason = null; 127 infos[i].action = null; 128 } 129 130 AclResultDocument.AclResult.Permissions.Permission[] permissionsXml = aclResultXml.getPermissions().getPermissionArray(); 131 for (int i = 0; i < permissionsXml.length; i++) { 132 AclResultDocument.AclResult.Permissions.Permission permissionXml = permissionsXml[i]; 133 134 AclPermission permission = AclPermission.fromString(permissionXml.getType().toString()); 135 infos[permission.getPos()].action = AclActionType.fromString(permissionXml.getAction().toString()); 136 infos[permission.getPos()].objectExpr = permissionXml.getObjectReason(); 137 infos[permission.getPos()].subjectReason = permissionXml.getSubjectReason(); 138 } 139 } 140 141 public Object clone() throws CloneNotSupportedException { 142 AclResultInfo clone = new AclResultInfo(); 143 clone.userId = userId; 144 clone.roleIds = (long[])roleIds.clone(); 145 clone.documentId = documentId; 146 clone.branchId = branchId; 147 clone.languageId = languageId; 148 149 for (int i = 0; i < clone.infos.length; i++) { 150 clone.infos[i] = (Info)infos[i].clone(); 151 } 152 153 return clone; 154 } 155 } 156 | Popular Tags |