KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > outerj > daisy > repository > acl > AclResultInfo


1 /*
2  * Copyright 2004 Outerthought bvba and Schaubroeck nv
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package org.outerj.daisy.repository.acl;
17
18 import org.outerx.daisy.x10.AclResultDocument;
19 import org.outerx.daisy.x10.AclAction;
20
21 /**
22  * A class holding information about the evaluation of the ACL rules for a certain
23  * user and/or role combination, for a certain document.
24  *
25  * <p>Provides not only information about the resulting permissions, but also about
26  * why they were granted or denied.
27  */

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         // used by clone method
49
}
50
51     public void set(AclPermission permission, AclActionType action, String JavaDoc objectExpr, String JavaDoc 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 JavaDoc getObjectExpr(AclPermission permission) {
66         return infos[permission.getPos()].objectExpr;
67     }
68
69     public String JavaDoc getSubjectReason(AclPermission permission) {
70         return infos[permission.getPos()].subjectReason;
71     }
72
73     private class Info {
74         public AclActionType action;
75         public String JavaDoc objectExpr;
76         public String JavaDoc subjectReason;
77
78         public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
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         // first reset everything
124
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 JavaDoc clone() throws CloneNotSupportedException JavaDoc {
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