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;
35 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);
105 * @see org.collectionspace.hello.client.PermissionProxy#getAccount(java.lang.String)
108 public Response read(String csid) {
109 return getProxy().read(csid);
115 * @see org.collectionspace.hello.client.PermissionProxy#create(org.collectionspace.services.permission.Permission)
118 public Response create(Permission permission) {
119 return getProxy().create(permission);
126 * @see org.collectionspace.hello.client.PermissionProxy#updateAccount(java.lang.Long, org.collectionspace.services.permission.Permission)
129 public Response update(String csid, Permission permission) {
130 return getProxy().update(csid, permission);
134 public ServiceDescription getServiceDescription() {
135 ServiceDescription result = null;
137 Response res = getProxy().getServiceDescription();
138 if (res.getStatus() == HttpStatus.SC_OK) {
139 result = (ServiceDescription) res.readEntity(ServiceDescription.class);
145 public static String getActionGroup(List<PermissionAction> actionList) {
146 String result = null;
147 HashMap<ActionType, String> actionMap = getEmptyActionMap();
149 for (PermissionAction permAction : actionList) {
150 switch (permAction.getName()) {
152 actionMap.put(ActionType.CREATE, "C");
155 actionMap.put(ActionType.READ, "R");
158 actionMap.put(ActionType.UPDATE, "U");
161 actionMap.put(ActionType.DELETE, "D");
164 actionMap.put(ActionType.SEARCH, "L");
167 String msg = String.format("Unknown permission action '%s'.", permAction.getName().value());
173 result = String.format("%s%s%s%s%s",
174 actionMap.get(ActionType.CREATE),
175 actionMap.get(ActionType.READ),
176 actionMap.get(ActionType.UPDATE),
177 actionMap.get(ActionType.DELETE),
178 actionMap.get(ActionType.SEARCH));
183 private static HashMap<ActionType, String> getEmptyActionMap() {
184 HashMap<ActionType, String> emptyActionMap = new HashMap<ActionType, String>();
186 emptyActionMap.put(ActionType.CREATE, "");
187 emptyActionMap.put(ActionType.READ, "");
188 emptyActionMap.put(ActionType.UPDATE, "");
189 emptyActionMap.put(ActionType.DELETE, "");
190 emptyActionMap.put(ActionType.SEARCH, "");
192 return emptyActionMap;
195 public static List<PermissionAction> getActionList(String actionGroup) {
196 if (actionGroup == null || actionGroup.trim().isEmpty()) {
200 List<PermissionAction> result = new ArrayList<PermissionAction>();
201 for (char c : actionGroup.toUpperCase().toCharArray()) {
204 result.add(PermissionActionFactory.create(ActionType.CREATE));
207 result.add(PermissionActionFactory.create(ActionType.READ));
210 result.add(PermissionActionFactory.create(ActionType.UPDATE));
213 result.add(PermissionActionFactory.create(ActionType.DELETE));
216 result.add(PermissionActionFactory.create(ActionType.SEARCH));
225 * Validate that the permission's action group and action list are non-null, non-empty, and equivalent.
227 * -1 - Permission action group is empty or null
229 public static ActionCompare validatePermActions(Permission permission) {
230 String actionGroup = permission.getActionGroup();
231 List<PermissionAction> actionList = permission.getAction();
233 if ((actionGroup == null || actionGroup.trim().isEmpty() == true) && (actionList == null || actionList.size() < 1)) {
234 return ActionCompare.ACTIONS_MISSING;
237 if (actionGroup == null || actionGroup.trim().isEmpty() == true) {
238 return ActionCompare.ACTION_GROUP_EMPTY;
241 if (actionList == null || actionList.size() < 1) {
242 return ActionCompare.ACTION_LIST_EMPTY;
245 String actionGroupFromActionList = getActionGroup(permission.getAction());
246 if (actionGroupFromActionList == null || !actionGroupFromActionList.equalsIgnoreCase(actionGroup)) {
247 return ActionCompare.MISMATCHES;
250 return ActionCompare.MATCHES;