2 * PermissionClient.java
4 * {Purpose of This Class}
6 * {Other Notes Relating to This Class (Optional)}
9 * $LastChangedRevision: $
12 * This document is a part of the source code and related artifacts
13 * for CollectionSpace, an open source collections management system
14 * for museums and related institutions:
16 * http://www.collectionspace.org
17 * http://wiki.collectionspace.org
19 * Copyright (C) 2009 {Contributing Institution}
21 * Licensed under the Educational Community License (ECL), Version 2.0.
22 * You may not use this file except in compliance with this License.
24 * You may obtain a copy of the ECL 2.0 License at
25 * https://source.collectionspace.org/collection-space/LICENSE.txt
27 package org.collectionspace.services.client;
29 import java.util.ArrayList;
30 import java.util.HashMap;
31 import java.util.List;
33 import javax.ws.rs.core.Response;
34 import org.apache.http.HttpStatus;
36 import org.collectionspace.services.authorization.perms.ActionType;
37 import org.collectionspace.services.authorization.perms.Permission;
38 import org.collectionspace.services.authorization.perms.PermissionAction;
39 import org.collectionspace.services.authorization.perms.PermissionsList;
40 import org.collectionspace.services.description.ServiceDescription;
45 * @version $Revision:$
47 public class PermissionClient extends AbstractServiceClientImpl<PermissionsList, Permission, Permission, PermissionProxy> {
48 public static final String SERVICE_NAME = "authorization/permissions";
49 public static final String SERVICE_PATH_COMPONENT = SERVICE_NAME;
50 public static final String SERVICE_PATH = "/" + SERVICE_PATH_COMPONENT;
51 public static final String SERVICE_PATH_PROXY = SERVICE_PATH + "/";
53 public enum ActionCompare {
54 ACTION_GROUP_EMPTY, ACTION_LIST_EMPTY, ACTIONS_MISSING, MATCHES, MISMATCHES
57 public PermissionClient() throws Exception {
61 public PermissionClient(String clientPropertiesFilename) throws Exception {
62 super(clientPropertiesFilename);
66 * @see org.collectionspace.services.client.AbstractServiceClientImpl#getServicePathComponent()
69 public String getServicePathComponent() {
70 return SERVICE_PATH_COMPONENT;
74 public String getServiceName() {
79 public Class<PermissionProxy> getProxyClass() {
80 return PermissionProxy.class;
89 * @see org.collectionspace.hello.client.PermissionProxy#readList()
92 public Response readList() {
93 return getProxy().readList();
97 public Response readSearchList(String resourceName) {
98 return getProxy().readSearchList(resourceName);
104 * @see org.collectionspace.hello.client.PermissionProxy#getAccount(java.lang.String)
107 public Response read(String csid) {
108 return getProxy().read(csid);
112 * We expect a single result. An resourceName/actionGroup tuple should uniquely identify the permission resource
114 public Permission read(String resourceName, String actionGroup) {
115 Permission result = null;
117 Response res = getProxy().read(resourceName, actionGroup);
119 if (res != null && res.getStatus() == Response.Status.OK.getStatusCode()) {
120 PermissionsList permsListElement = res.readEntity(PermissionsList.class);
121 if (permsListElement != null && permsListElement.getPermission() != null) {
122 List<Permission> permsList = permsListElement.getPermission();
123 if (permsList.size() == 1) {
124 result = permsList.get(0);
138 * @see org.collectionspace.hello.client.PermissionProxy#create(org.collectionspace.services.permission.Permission)
141 public Response create(Permission permission) {
142 return getProxy().create(permission);
149 * @see org.collectionspace.hello.client.PermissionProxy#updateAccount(java.lang.Long, org.collectionspace.services.permission.Permission)
152 public Response update(String csid, Permission permission) {
153 return getProxy().update(csid, permission);
157 public ServiceDescription getServiceDescription() {
158 ServiceDescription result = null;
160 Response res = getProxy().getServiceDescription();
161 if (res.getStatus() == HttpStatus.SC_OK) {
162 result = (ServiceDescription) res.readEntity(ServiceDescription.class);
168 public static String getActionGroup(List<PermissionAction> actionList) {
169 String result = null;
170 HashMap<ActionType, String> actionMap = getEmptyActionMap();
172 for (PermissionAction permAction : actionList) {
173 switch (permAction.getName()) {
175 actionMap.put(ActionType.CREATE, "C");
178 actionMap.put(ActionType.READ, "R");
181 actionMap.put(ActionType.UPDATE, "U");
184 actionMap.put(ActionType.DELETE, "D");
187 actionMap.put(ActionType.SEARCH, "L");
190 String msg = String.format("Unknown permission action '%s'.", permAction.getName().value());
196 result = String.format("%s%s%s%s%s",
197 actionMap.get(ActionType.CREATE),
198 actionMap.get(ActionType.READ),
199 actionMap.get(ActionType.UPDATE),
200 actionMap.get(ActionType.DELETE),
201 actionMap.get(ActionType.SEARCH));
206 private static HashMap<ActionType, String> getEmptyActionMap() {
207 HashMap<ActionType, String> emptyActionMap = new HashMap<ActionType, String>();
209 emptyActionMap.put(ActionType.CREATE, "");
210 emptyActionMap.put(ActionType.READ, "");
211 emptyActionMap.put(ActionType.UPDATE, "");
212 emptyActionMap.put(ActionType.DELETE, "");
213 emptyActionMap.put(ActionType.SEARCH, "");
215 return emptyActionMap;
218 public static List<PermissionAction> getActionList(String actionGroup) {
219 if (actionGroup == null || actionGroup.trim().isEmpty()) {
223 List<PermissionAction> result = new ArrayList<PermissionAction>();
224 for (char c : actionGroup.toUpperCase().toCharArray()) {
227 result.add(PermissionActionFactory.create(ActionType.CREATE));
230 result.add(PermissionActionFactory.create(ActionType.READ));
233 result.add(PermissionActionFactory.create(ActionType.UPDATE));
236 result.add(PermissionActionFactory.create(ActionType.DELETE));
239 result.add(PermissionActionFactory.create(ActionType.SEARCH));
248 * Validate that the permission's action group and action list are non-null, non-empty, and equivalent.
250 * -1 - Permission action group is empty or null
252 public static ActionCompare validatePermActions(Permission permission) {
253 String actionGroup = permission.getActionGroup();
254 List<PermissionAction> actionList = permission.getAction();
256 if ((actionGroup == null || actionGroup.trim().isEmpty() == true) && (actionList == null || actionList.size() < 1)) {
257 return ActionCompare.ACTIONS_MISSING;
260 if (actionGroup == null || actionGroup.trim().isEmpty() == true) {
261 return ActionCompare.ACTION_GROUP_EMPTY;
264 if (actionList == null || actionList.size() < 1) {
265 return ActionCompare.ACTION_LIST_EMPTY;
268 String actionGroupFromActionList = getActionGroup(permission.getAction());
269 if (actionGroupFromActionList == null || !actionGroupFromActionList.equalsIgnoreCase(actionGroup)) {
270 return ActionCompare.MISMATCHES;
273 return ActionCompare.MATCHES;