]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
124d3c19a4aa51be3605ca9fece071a3864c82cf
[tmp/jakarta-migration.git] /
1 /**
2  *  This document is a part of the source code and related artifacts
3  *  for CollectionSpace, an open source collections management system
4  *  for museums and related institutions:
5
6  *  http://www.collectionspace.org
7  *  http://wiki.collectionspace.org
8
9  *  Copyright 2009 University of California at Berkeley
10
11  *  Licensed under the Educational Community License (ECL), Version 2.0.
12  *  You may not use this file except in compliance with this License.
13
14  *  You may obtain a copy of the ECL 2.0 License at
15
16  *  https://source.collectionspace.org/collection-space/LICENSE.txt
17
18  *  Unless required by applicable law or agreed to in writing, software
19  *  distributed under the License is distributed on an "AS IS" BASIS,
20  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  *  See the License for the specific language governing permissionRoles and
22  *  limitations under the License.
23  */
24 package org.collectionspace.services.authorization.storage;
25
26 import java.util.ArrayList;
27 import java.util.List;
28
29 import org.collectionspace.services.authorization.Permission;
30 import org.collectionspace.services.authorization.PermissionRole;
31 import org.collectionspace.services.authorization.PermissionRoleRel;
32 import org.collectionspace.services.authorization.PermissionValue;
33 import org.collectionspace.services.authorization.PermissionsList;
34 import org.collectionspace.services.authorization.PermissionsRolesList;
35 import org.collectionspace.services.authorization.RoleValue;
36 import org.collectionspace.services.authorization.SubjectType;
37
38 import org.collectionspace.services.common.document.AbstractDocumentHandlerImpl;
39 import org.collectionspace.services.common.document.DocumentFilter;
40 import org.collectionspace.services.common.document.DocumentWrapper;
41 import org.collectionspace.services.common.storage.jpa.JpaDocumentHandler;
42 import org.slf4j.Logger;
43 import org.slf4j.LoggerFactory;
44
45 /**
46  * Document handler for PermissionRole association
47  * @author 
48  */
49 public class PermissionRoleDocumentHandler
50                 extends JpaDocumentHandler<PermissionRole, PermissionsRolesList, List<PermissionRoleRel>, List<PermissionRoleRel>> {
51
52     private final Logger logger = LoggerFactory.getLogger(PermissionRoleDocumentHandler.class);
53     private PermissionRole permissionRole;
54     private PermissionsRolesList permissionRolesList;
55
56     @Override
57     public void handleCreate(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
58         fillCommonPart(getCommonPart(), wrapDoc);
59     }
60
61     @Override
62     public void completeCreate(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
63         PermissionRole pr = getCommonPart();
64         AuthorizationDelegate.addPermissions(getServiceContext(), pr);
65     }
66
67     @Override
68     public void handleUpdate(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
69         throw new UnsupportedOperationException("operation not relevant for PermissionRoleDocumentHandler");
70     }
71
72     @Override
73     public void completeUpdate(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
74         throw new UnsupportedOperationException("operation not relevant for PermissionRoleDocumentHandler");
75     }
76
77     @Override
78     public void handleGet(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
79         setCommonPart(extractCommonPart(wrapDoc));
80         getServiceContext().setOutput(permissionRole);
81     }
82
83     @Override
84     public void handleGetAll(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
85         throw new UnsupportedOperationException("operation not relevant for PermissionRoleDocumentHandler");
86     }
87
88     @Override
89     public void handleDelete(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
90         fillCommonPart(getCommonPart(), wrapDoc);
91     }
92
93     @Override
94     public void completeDelete(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
95         PermissionRole pr = getCommonPart();
96         AuthorizationDelegate.deletePermissions(getServiceContext(), pr);
97     }
98
99     @Override
100     public PermissionRole extractCommonPart(
101             DocumentWrapper<List<PermissionRoleRel>> wrapDoc)
102             throws Exception {
103         List<PermissionRoleRel> prrl = wrapDoc.getWrappedObject();
104         PermissionRole pr = new PermissionRole();
105         SubjectType subject = PermissionRoleUtil.getRelationSubject(getServiceContext());
106         if (prrl.size() == 0) {
107             return pr;
108         }
109         PermissionRoleRel prr0 = prrl.get(0);
110         if (SubjectType.ROLE.equals(subject)) {
111
112             List<PermissionValue> pvs = new ArrayList<PermissionValue>();
113             pr.setPermissions(pvs);
114             PermissionValue pv = buildPermissionValue(prr0);
115             pvs.add(pv);
116
117             //add roles
118             List<RoleValue> rvs = new ArrayList<RoleValue>();
119             pr.setRoles(rvs);
120             for (PermissionRoleRel prr : prrl) {
121                 RoleValue rv = buildRoleValue(prr);
122                 rvs.add(rv);
123             }
124         } else if (SubjectType.PERMISSION.equals(subject)) {
125
126             List<RoleValue> rvs = new ArrayList<RoleValue>();
127             pr.setRoles(rvs);
128             RoleValue rv = buildRoleValue(prr0);
129             rvs.add(rv);
130
131             //add permssions
132             List<PermissionValue> pvs = new ArrayList<PermissionValue>();
133             pr.setPermissions(pvs);
134             for (PermissionRoleRel prr : prrl) {
135                 PermissionValue pv = buildPermissionValue(prr);
136                 pvs.add(pv);
137             }
138         }
139         return pr;
140     }
141
142     @Override
143     public void fillCommonPart(PermissionRole pr, DocumentWrapper<List<PermissionRoleRel>> wrapDoc)
144             throws Exception {
145         List<PermissionRoleRel> prrl = wrapDoc.getWrappedObject();
146         SubjectType subject = pr.getSubject();
147         if (subject == null) {
148             //it is not required to give subject as URI determines the subject
149             subject = PermissionRoleUtil.getRelationSubject(getServiceContext());
150         } else {
151             //subject mismatch should have been checked during validation
152         }
153         PermissionRoleUtil.buildPermissionRoleRel(pr, subject, prrl);
154     }
155
156     @Override
157     public PermissionsRolesList extractCommonPartList(
158             DocumentWrapper<List<PermissionRoleRel>> wrapDoc)
159             throws Exception {
160
161         throw new UnsupportedOperationException("operation not relevant for PermissionRoleDocumentHandler");
162     }
163
164     @Override
165     public PermissionRole getCommonPart() {
166         return permissionRole;
167     }
168
169     @Override
170     public void setCommonPart(PermissionRole permissionRole) {
171         this.permissionRole = permissionRole;
172     }
173
174     @Override
175     public PermissionsRolesList getCommonPartList() {
176         return permissionRolesList;
177     }
178
179     @Override
180     public void setCommonPartList(PermissionsRolesList permissionRolesList) {
181         this.permissionRolesList = permissionRolesList;
182     }
183
184     @Override
185     public String getQProperty(
186             String prop) {
187         return null;
188     }
189
190     @Override
191     public DocumentFilter createDocumentFilter() {
192         return new DocumentFilter(this.getServiceContext());
193     }
194
195     private PermissionValue buildPermissionValue(PermissionRoleRel prr) {
196         PermissionValue pv = new PermissionValue();
197         pv.setPermissionId(prr.getPermissionId());
198         pv.setResourceName(prr.getPermissionResource());
199         return pv;
200     }
201
202     private RoleValue buildRoleValue(PermissionRoleRel prr) {
203         RoleValue rv = new RoleValue();
204         rv.setRoleId(prr.getRoleId());
205         rv.setRoleName(prr.getRoleName());
206         return rv;
207     }
208 }