feb3d59f7f4210bb029ce5798fc726795786dd90
[sdc.git] /
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 org.openecomp.sdc.common.errors.CoreException;
19 import org.openecomp.sdc.itempermissions.PermissionsRules;
20 import org.openecomp.sdc.itempermissions.PermissionsServicesFactory;
21 import org.openecomp.sdc.itempermissions.errors.PermissionsErrorMessagesBuilder;
22 import org.openecomp.sdc.itempermissions.impl.types.PermissionActionTypes;
23 import org.openecomp.sdc.itempermissions.impl.types.PermissionTypes;
24
25 import java.util.Collections;
26 import java.util.HashSet;
27 import java.util.Set;
28
29 import static org.openecomp.sdc.itempermissions.errors.PermissionsErrorMessages.INVALID_ACTION_TYPE;
30 import static org.openecomp.sdc.itempermissions.errors.PermissionsErrorMessages.INVALID_PERMISSION_TYPE;
31
32 /**
33  * Created by ayalaben on 6/26/2017.
34  */
35 public class PermissionsRulesImpl implements PermissionsRules {
36
37
38     @Override
39     public boolean isAllowed(String permission, String action) {
40
41         if (permission == null) {
42             return false;
43         }
44         try {
45             PermissionTypes.valueOf(permission);
46         } catch (IllegalArgumentException ex) {
47             throw new CoreException(new PermissionsErrorMessagesBuilder(INVALID_PERMISSION_TYPE).build());
48         }
49
50         try {
51             switch (PermissionActionTypes.valueOf(action)) {
52                 case Create_Item:
53                     return true;
54
55                 case Edit_Item:
56                     if (permission.equals(PermissionTypes.Contributor.name()) || permission.equals
57                             (PermissionTypes.Owner.name())) {
58                         return true;
59                     }
60                     break;
61                 case Commit_Item:
62                     if (permission.equals(PermissionTypes.Contributor.name()) || permission.equals
63                             (PermissionTypes.Owner.name())) {
64                         return true;
65                     }
66                     break;
67                 case Delete_Item:
68                     if (permission.equals(PermissionTypes.Contributor.name()) || permission.equals
69                             (PermissionTypes.Owner.name())) {
70                         return true;
71                     }
72                     break;
73
74                 case Change_Item_Permissions:
75                     if (permission.equals(PermissionTypes.Owner.name())) {
76                         return true;
77                     }
78                     break;
79
80                 case Submit_Item:
81                     if (permission.equals(PermissionTypes.Contributor.name()) || permission.equals
82                             (PermissionTypes.Owner.name())) {
83                         return true;
84                     }
85                     break;
86
87                 default:
88                     return false;
89             }
90         } catch (IllegalArgumentException ex) {
91             throw new CoreException(new PermissionsErrorMessagesBuilder(INVALID_ACTION_TYPE).build());
92         }
93
94         return false;
95     }
96
97     @Override
98     public void executeAction(String itemId, String userId, String action) {
99         try {
100             switch (PermissionActionTypes.valueOf(action)) {
101                 case Create_Item:
102                     caseCreateItem(userId, itemId);
103                     break;
104
105                 case Change_Item_Permissions:
106                     break;
107
108                 case Edit_Item:
109                     break;
110
111                 case Submit_Item:
112                     break;
113
114                 default:
115             }
116         } catch (IllegalArgumentException ex) {
117             throw new CoreException(new PermissionsErrorMessagesBuilder(INVALID_ACTION_TYPE).build());
118         }
119     }
120
121     @Override
122     public void updatePermission(String itemId, String currentUserId, String permission, Set<String>
123             addedUsersIds, Set<String> removedUsersIds) {
124         try {
125             PermissionTypes.valueOf(permission);
126         } catch (IllegalArgumentException ex) {
127             throw new CoreException(new PermissionsErrorMessagesBuilder(INVALID_PERMISSION_TYPE).build());
128         }
129
130         if (permission.equals(PermissionTypes.Owner.name())) {
131           makeCurrentUserContributor(itemId,currentUserId);
132         }
133     }
134
135     private void makeCurrentUserContributor(String itemId, String currentUserId) {
136
137         String currentPermission = PermissionsServicesFactory.getInstance().createInterface().
138                 getUserItemPermiission(itemId,currentUserId);
139
140         if(currentPermission != null) {
141
142             PermissionsServicesFactory.getInstance().createInterface()
143                     .updateItemPermissions(itemId, PermissionTypes.Contributor.name(),
144                             Collections.singleton(currentUserId), new HashSet<>());
145     }
146
147 }
148
149     private void caseCreateItem(String userId, String itemId) {
150         HashSet<String> ownerId = new HashSet<>();
151         ownerId.add(userId);
152         PermissionsServicesFactory.getInstance().createInterface()
153                 .updateItemPermissions(itemId, PermissionTypes.Owner.name(), ownerId,
154                         new HashSet<>());
155     }
156
157 }