2 * Copyright © 2016-2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.openecomp.sdc.itempermissions.impl;
18 import org.apache.commons.collections.CollectionUtils;
19 import org.openecomp.sdc.common.errors.CoreException;
20 import org.openecomp.sdc.itempermissions.PermissionsRules;
21 import org.openecomp.sdc.itempermissions.PermissionsServices;
22 import org.openecomp.sdc.itempermissions.PermissionsServicesFactory;
23 import org.openecomp.sdc.itempermissions.errors.PermissionsErrorMessagesBuilder;
24 import org.openecomp.sdc.itempermissions.impl.types.PermissionActionTypes;
25 import org.openecomp.sdc.itempermissions.impl.types.PermissionTypes;
27 import java.util.Collections;
28 import java.util.HashSet;
31 import static org.openecomp.sdc.itempermissions.errors.PermissionsErrorMessages.INVALID_ACTION_TYPE;
32 import static org.openecomp.sdc.itempermissions.errors.PermissionsErrorMessages.INVALID_PERMISSION_TYPE;
35 * Created by ayalaben on 6/26/2017.
37 public class PermissionsRulesImpl implements PermissionsRules {
41 public boolean isAllowed(String permission, String action) {
43 if (permission == null) {
47 PermissionTypes.valueOf(permission);
48 } catch (IllegalArgumentException ex) {
49 throw new CoreException(new PermissionsErrorMessagesBuilder(INVALID_PERMISSION_TYPE).build());
53 switch (PermissionActionTypes.valueOf(action)) {
58 if (permission.equals(PermissionTypes.Contributor.name()) || permission.equals
59 (PermissionTypes.Owner.name())) {
64 if (permission.equals(PermissionTypes.Contributor.name()) || permission.equals
65 (PermissionTypes.Owner.name())) {
70 if (permission.equals(PermissionTypes.Contributor.name()) || permission.equals
71 (PermissionTypes.Owner.name())) {
76 case Change_Item_Permissions:
77 if (permission.equals(PermissionTypes.Owner.name())) {
83 if (permission.equals(PermissionTypes.Contributor.name()) || permission.equals
84 (PermissionTypes.Owner.name())) {
92 } catch (IllegalArgumentException ex) {
93 throw new CoreException(new PermissionsErrorMessagesBuilder(INVALID_ACTION_TYPE).build());
100 public void executeAction(String itemId, String userId, String action) {
102 switch (PermissionActionTypes.valueOf(action)) {
104 caseCreateItem(userId, itemId);
107 case Change_Item_Permissions:
118 } catch (IllegalArgumentException ex) {
119 throw new CoreException(new PermissionsErrorMessagesBuilder(INVALID_ACTION_TYPE).build());
124 public void updatePermission(String itemId, String currentUserId, String permission, Set<String>
125 addedUsersIds, Set<String> removedUsersIds) {
127 PermissionTypes.valueOf(permission);
128 } catch (IllegalArgumentException ex) {
129 throw new CoreException(new PermissionsErrorMessagesBuilder(INVALID_PERMISSION_TYPE).build());
132 if (isOwnerAdded(permission, addedUsersIds)) {
133 handleCurrentOwner(itemId, currentUserId);
137 private boolean isOwnerAdded(String permission, Set<String> addedUsersIds) {
138 return permission.equals(PermissionTypes.Owner.name()) &&
139 CollectionUtils.isNotEmpty(addedUsersIds);
142 private void handleCurrentOwner(String itemId, String currentUserId) {
143 PermissionsServices permissionsServices =
144 PermissionsServicesFactory.getInstance().createInterface();
145 if (!permissionsServices.getUserItemPermission(itemId, currentUserId).isPresent()) {
146 return; // no current owner - first owner addition
149 Set<String> currentUserSet = Collections.singleton(currentUserId);
151 .updateItemPermissions(itemId, PermissionTypes.Contributor.name(), currentUserSet,
153 permissionsServices.updateItemPermissions(itemId, PermissionTypes.Owner.name(), new HashSet<>(),
157 private void caseCreateItem(String userId, String itemId) {
158 HashSet<String> ownerId = new HashSet<>();
160 PermissionsServicesFactory.getInstance().createInterface()
161 .updateItemPermissions(itemId, PermissionTypes.Owner.name(), ownerId,