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