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:
6 * http://www.collectionspace.org
7 * http://wiki.collectionspace.org
9 * Copyright 2009 University of California at Berkeley
11 * Licensed under the Educational Community License (ECL), Version 2.0.
12 * You may not use this file except in compliance with this License.
14 * You may obtain a copy of the ECL 2.0 License at
16 * https://source.collectionspace.org/collection-space/LICENSE.txt
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.
24 package org.collectionspace.services.authorization.storage;
26 import java.util.ArrayList;
27 import java.util.List;
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;
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;
44 * Document handler for PermissionRole association
47 public class PermissionRoleDocumentHandler
48 extends AbstractDocumentHandlerImpl<PermissionRole, PermissionsRolesList, List<PermissionRoleRel>, List<PermissionRoleRel>> {
50 private final Logger logger = LoggerFactory.getLogger(PermissionRoleDocumentHandler.class);
51 private PermissionRole permissionRole;
52 private PermissionsRolesList permissionRolesList;
55 public void handleCreate(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
56 fillCommonPart(getCommonPart(), wrapDoc);
60 public void handleUpdate(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
61 throw new UnsupportedOperationException("operation not relevant for PermissionRoleDocumentHandler");
65 public void completeUpdate(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
66 throw new UnsupportedOperationException("operation not relevant for PermissionRoleDocumentHandler");
70 public void handleGet(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
71 setCommonPart(extractCommonPart(wrapDoc));
72 getServiceContext().setOutput(permissionRole);
76 public void handleGetAll(DocumentWrapper<List<PermissionRoleRel>> wrapDoc) throws Exception {
77 throw new UnsupportedOperationException("operation not relevant for PermissionRoleDocumentHandler");
81 public PermissionRole extractCommonPart(
82 DocumentWrapper<List<PermissionRoleRel>> wrapDoc)
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)) {
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());
98 List<RoleValue> rvs = new ArrayList<RoleValue>();
100 for (PermissionRoleRel prr : prrl) {
101 RoleValue rv = new RoleValue();
102 rv.setRoleId(prr.getRoleId());
103 rv.setRoleName(prr.getRoleName());
106 } else if (SubjectType.PERMISSION.equals(subject)) {
108 List<RoleValue> rvs = new ArrayList<RoleValue>();
110 RoleValue rv = new RoleValue();
111 rv.setRoleId(prr0.getRoleId());
112 rv.setRoleName(prr0.getRoleName());
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());
129 public void fillCommonPart(PermissionRole pr, DocumentWrapper<List<PermissionRoleRel>> wrapDoc)
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());
137 //subject mismatch should have been checked during validation
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());
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());
161 public PermissionsRolesList extractCommonPartList(
162 DocumentWrapper<List<PermissionRoleRel>> wrapDoc)
165 throw new UnsupportedOperationException("operation not relevant for PermissionRoleDocumentHandler");
169 public PermissionRole getCommonPart() {
170 return permissionRole;
174 public void setCommonPart(PermissionRole permissionRole) {
175 this.permissionRole = permissionRole;
179 public PermissionsRolesList getCommonPartList() {
180 return permissionRolesList;
184 public void setCommonPartList(PermissionsRolesList permissionRolesList) {
185 this.permissionRolesList = permissionRolesList;
189 public String getQProperty(
195 public DocumentFilter createDocumentFilter() {
196 return new DocumentFilter(this.getServiceContext());