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 static org.openecomp.sdc.itempermissions.errors.PermissionsErrorMessages.INVALID_ACTION_TYPE;
19 import static org.openecomp.sdc.itempermissions.errors.PermissionsErrorMessages.INVALID_PERMISSION_TYPE;
21 import java.util.Collections;
22 import java.util.HashSet;
24 import org.apache.commons.collections.CollectionUtils;
25 import org.openecomp.sdc.common.errors.CoreException;
26 import org.openecomp.sdc.itempermissions.PermissionsRules;
27 import org.openecomp.sdc.itempermissions.PermissionsServices;
28 import org.openecomp.sdc.itempermissions.PermissionsServicesFactory;
29 import org.openecomp.sdc.itempermissions.errors.PermissionsErrorMessagesBuilder;
30 import org.openecomp.sdc.itempermissions.impl.types.PermissionActionTypes;
31 import org.openecomp.sdc.itempermissions.impl.types.PermissionTypes;
34 * Created by ayalaben on 6/26/2017.
36 public class PermissionsRulesImpl implements PermissionsRules {
39 public boolean isAllowed(String permission, String action) {
40 if (permission == null) {
44 PermissionTypes.valueOf(permission);
45 } catch (IllegalArgumentException ex) {
46 throw new CoreException(new PermissionsErrorMessagesBuilder(INVALID_PERMISSION_TYPE).build());
49 switch (PermissionActionTypes.valueOf(action)) {
56 if (permission.equals(PermissionTypes.Contributor.name()) || permission.equals(PermissionTypes.Owner.name())) {
60 case Change_Item_Permissions:
61 if (permission.equals(PermissionTypes.Owner.name())) {
68 } catch (IllegalArgumentException ex) {
69 throw new CoreException(new PermissionsErrorMessagesBuilder(INVALID_ACTION_TYPE).build());
75 public void executeAction(String itemId, String userId, String action) {
77 switch (PermissionActionTypes.valueOf(action)) {
79 caseCreateItem(userId, itemId);
81 case Change_Item_Permissions:
89 } catch (IllegalArgumentException ex) {
90 throw new CoreException(new PermissionsErrorMessagesBuilder(INVALID_ACTION_TYPE).build());
95 public void updatePermission(String itemId, String currentUserId, String permission, Set<String> addedUsersIds, Set<String> removedUsersIds) {
97 PermissionTypes.valueOf(permission);
98 } catch (IllegalArgumentException ex) {
99 throw new CoreException(new PermissionsErrorMessagesBuilder(INVALID_PERMISSION_TYPE).build());
101 if (isOwnerAdded(permission, addedUsersIds)) {
102 handleCurrentOwner(itemId, currentUserId);
106 private boolean isOwnerAdded(String permission, Set<String> addedUsersIds) {
107 return permission.equals(PermissionTypes.Owner.name()) && CollectionUtils.isNotEmpty(addedUsersIds);
110 private void handleCurrentOwner(String itemId, String currentUserId) {
111 PermissionsServices permissionsServices = PermissionsServicesFactory.getInstance().createInterface();
112 if (!permissionsServices.getUserItemPermission(itemId, currentUserId).isPresent()) {
113 return; // no current owner - first owner addition
115 Set<String> currentUserSet = Collections.singleton(currentUserId);
116 permissionsServices.updateItemPermissions(itemId, PermissionTypes.Contributor.name(), currentUserSet, new HashSet<>());
117 permissionsServices.updateItemPermissions(itemId, PermissionTypes.Owner.name(), new HashSet<>(), currentUserSet);
120 private void caseCreateItem(String userId, String itemId) {
121 HashSet<String> ownerId = new HashSet<>();
123 PermissionsServicesFactory.getInstance().createInterface()
124 .updateItemPermissions(itemId, PermissionTypes.Owner.name(), ownerId, new HashSet<>());