Reformat openecomp-be
[sdc.git] / openecomp-be / lib / openecomp-item-permissions-lib / openecomp-item-permissions-impl / src / main / java / org / openecomp / sdc / itempermissions / impl / PermissionsRulesImpl.java
1 /*
2  * Copyright © 2016-2018 European Support Limited
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 package org.openecomp.sdc.itempermissions.impl;
17
18 import static org.openecomp.sdc.itempermissions.errors.PermissionsErrorMessages.INVALID_ACTION_TYPE;
19 import static org.openecomp.sdc.itempermissions.errors.PermissionsErrorMessages.INVALID_PERMISSION_TYPE;
20
21 import java.util.Collections;
22 import java.util.HashSet;
23 import java.util.Set;
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;
32
33 /**
34  * Created by ayalaben on 6/26/2017.
35  */
36 public class PermissionsRulesImpl implements PermissionsRules {
37
38     @Override
39     public boolean isAllowed(String permission, String action) {
40         if (permission == null) {
41             return false;
42         }
43         try {
44             PermissionTypes.valueOf(permission);
45         } catch (IllegalArgumentException ex) {
46             throw new CoreException(new PermissionsErrorMessagesBuilder(INVALID_PERMISSION_TYPE).build());
47         }
48         try {
49             switch (PermissionActionTypes.valueOf(action)) {
50                 case Create_Item:
51                     return true;
52                 case Edit_Item:
53                 case Commit_Item:
54                 case Delete_Item:
55                 case Submit_Item:
56                     if (permission.equals(PermissionTypes.Contributor.name()) || permission.equals(PermissionTypes.Owner.name())) {
57                         return true;
58                     }
59                     break;
60                 case Change_Item_Permissions:
61                     if (permission.equals(PermissionTypes.Owner.name())) {
62                         return true;
63                     }
64                     break;
65                 default:
66                     return false;
67             }
68         } catch (IllegalArgumentException ex) {
69             throw new CoreException(new PermissionsErrorMessagesBuilder(INVALID_ACTION_TYPE).build());
70         }
71         return false;
72     }
73
74     @Override
75     public void executeAction(String itemId, String userId, String action) {
76         try {
77             switch (PermissionActionTypes.valueOf(action)) {
78                 case Create_Item:
79                     caseCreateItem(userId, itemId);
80                     break;
81                 case Change_Item_Permissions:
82                     break;
83                 case Edit_Item:
84                     break;
85                 case Submit_Item:
86                     break;
87                 default:
88             }
89         } catch (IllegalArgumentException ex) {
90             throw new CoreException(new PermissionsErrorMessagesBuilder(INVALID_ACTION_TYPE).build());
91         }
92     }
93
94     @Override
95     public void updatePermission(String itemId, String currentUserId, String permission, Set<String> addedUsersIds, Set<String> removedUsersIds) {
96         try {
97             PermissionTypes.valueOf(permission);
98         } catch (IllegalArgumentException ex) {
99             throw new CoreException(new PermissionsErrorMessagesBuilder(INVALID_PERMISSION_TYPE).build());
100         }
101         if (isOwnerAdded(permission, addedUsersIds)) {
102             handleCurrentOwner(itemId, currentUserId);
103         }
104     }
105
106     private boolean isOwnerAdded(String permission, Set<String> addedUsersIds) {
107         return permission.equals(PermissionTypes.Owner.name()) && CollectionUtils.isNotEmpty(addedUsersIds);
108     }
109
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
114         }
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);
118     }
119
120     private void caseCreateItem(String userId, String itemId) {
121         HashSet<String> ownerId = new HashSet<>();
122         ownerId.add(userId);
123         PermissionsServicesFactory.getInstance().createInterface()
124             .updateItemPermissions(itemId, PermissionTypes.Owner.name(), ownerId, new HashSet<>());
125     }
126 }