]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
933816cbd738ed820e5b729789ede6a9391e1752
[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.PermissionRole;
30 import org.collectionspace.services.authorization.PermissionRoleRel;
31 import org.collectionspace.services.authorization.PermissionValue;
32 import org.collectionspace.services.authorization.PermissionsRolesList;
33 import org.collectionspace.services.authorization.RoleValue;
34 import org.collectionspace.services.authorization.SubjectType;
35 import org.collectionspace.services.common.context.ServiceContext;
36
37 import org.collectionspace.services.common.document.AbstractDocumentHandlerImpl;
38 import org.collectionspace.services.common.document.DocumentFilter;
39 import org.collectionspace.services.common.document.DocumentWrapper;
40 import org.slf4j.Logger;
41 import org.slf4j.LoggerFactory;
42
43 /**
44  * Document handler for PermissionRole association
45  * @author 
46  */
47 public class PermissionRoleDocumentHandler
48         extends AbstractDocumentHandlerImpl<PermissionRole, PermissionsRolesList, List<PermissionRoleRel>, List<PermissionRoleRel>> {
49
50     private final Logger logger = LoggerFactory.getLogger(PermissionRoleDocumentHandler.class);
51     private PermissionRole permissionRole;
52     private PermissionsRolesList permissionRolesList;
53
54     @Override
55     public void handleCreate(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
56         fillCommonPart(getCommonPart(), wrapDoc);
57     }
58
59     @Override
60     public void handleUpdate(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
61         throw new UnsupportedOperationException("operation not relevant for PermissionRoleDocumentHandler");
62     }
63
64     @Override
65     public void completeUpdate(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
66         throw new UnsupportedOperationException("operation not relevant for PermissionRoleDocumentHandler");
67     }
68
69     @Override
70     public void handleGet(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
71         setCommonPart(extractCommonPart(wrapDoc));
72         getServiceContext().setOutput(permissionRole);
73     }
74
75     @Override
76     public void handleGetAll(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
77         throw new UnsupportedOperationException("operation not relevant for PermissionRoleDocumentHandler");
78     }
79
80     @Override
81     public PermissionRole extractCommonPart(
82             DocumentWrapper<List<PermissionRoleRel>> wrapDoc)
83             throws Exception {
84         List<PermissionRoleRel> prrl = wrapDoc.getWrappedObject();
85         PermissionRole pr = new PermissionRole();
86         SubjectType subject = PermissionRoleUtil.getSubject(getServiceContext());
87         PermissionRoleRel prr0 = prrl.get(0);
88         if (SubjectType.ROLE.equals(subject)) {
89
90             List<PermissionValue> pvs = new ArrayList<PermissionValue>();
91             pr.setPermissions(pvs);
92             PermissionValue pv = new PermissionValue();
93             pv.setPermissionId(prr0.getPermissionId());
94             pv.setResourceName(prr0.getPermissionResource());
95             pvs.add(pv);
96
97             //add roles
98             List<RoleValue> rvs = new ArrayList<RoleValue>();
99             pr.setRoles(rvs);
100             for (PermissionRoleRel prr : prrl) {
101                 RoleValue rv = new RoleValue();
102                 rv.setRoleId(prr.getRoleId());
103                 rv.setRoleName(prr.getRoleName());
104                 rvs.add(rv);
105             }
106         } else if (SubjectType.PERMISSION.equals(subject)) {
107
108             List<RoleValue> rvs = new ArrayList<RoleValue>();
109             pr.setRoles(rvs);
110             RoleValue rv = new RoleValue();
111             rv.setRoleId(prr0.getRoleId());
112             rv.setRoleName(prr0.getRoleName());
113             rvs.add(rv);
114
115             //add permssions
116             List<PermissionValue> pvs = new ArrayList<PermissionValue>();
117             pr.setPermissions(pvs);
118             for (PermissionRoleRel prr : prrl) {
119                 PermissionValue pv = new PermissionValue();
120                 pv.setPermissionId(prr.getPermissionId());
121                 pv.setResourceName(prr.getPermissionResource());
122                 pvs.add(pv);
123             }
124         }
125         return pr;
126     }
127
128     @Override
129     public void fillCommonPart(PermissionRole pr, DocumentWrapper<List<PermissionRoleRel>> wrapDoc)
130             throws Exception {
131         List<PermissionRoleRel> prrl = wrapDoc.getWrappedObject();
132         SubjectType subject = pr.getSubject();
133         if (subject == null) {
134             //it is not required to give subject as URI determines the subject
135             subject = PermissionRoleUtil.getSubject(getServiceContext());
136         } else {
137             //subject mismatch should have been checked during validation
138         }
139         if (subject.equals(SubjectType.ROLE)) {
140             String permId = pr.getPermissions().get(0).getPermissionId();
141             for (RoleValue rv : pr.getRoles()) {
142                 PermissionRoleRel prr = new PermissionRoleRel();
143                 prr.setPermissionId(permId);
144                 prr.setRoleId(rv.getRoleId());
145                 prr.setRoleName(rv.getRoleName());
146                 prrl.add(prr);
147             }
148         } else if (SubjectType.PERMISSION.equals(subject)) {
149             String roleId = pr.getRoles().get(0).getRoleId();
150             for (PermissionValue pv : pr.getPermissions()) {
151                 PermissionRoleRel prr = new PermissionRoleRel();
152                 prr.setPermissionId(pv.getPermissionId());
153                 prr.setRoleId(roleId);
154                 prr.setPermissionResource(pv.getResourceName());
155                 prrl.add(prr);
156             }
157         }
158     }
159
160     @Override
161     public PermissionsRolesList extractCommonPartList(
162             DocumentWrapper<List<PermissionRoleRel>> wrapDoc)
163             throws Exception {
164
165         throw new UnsupportedOperationException("operation not relevant for PermissionRoleDocumentHandler");
166     }
167
168     @Override
169     public PermissionRole getCommonPart() {
170         return permissionRole;
171     }
172
173     @Override
174     public void setCommonPart(PermissionRole permissionRole) {
175         this.permissionRole = permissionRole;
176     }
177
178     @Override
179     public PermissionsRolesList getCommonPartList() {
180         return permissionRolesList;
181     }
182
183     @Override
184     public void setCommonPartList(PermissionsRolesList permissionRolesList) {
185         this.permissionRolesList = permissionRolesList;
186     }
187
188     @Override
189     public String getQProperty(
190             String prop) {
191         return null;
192     }
193
194     @Override
195     public DocumentFilter createDocumentFilter() {
196         return new DocumentFilter(this.getServiceContext());
197     }
198 }