2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.healing.healers;
23 import org.openecomp.sdc.common.errors.SdcRuntimeException;
24 import org.openecomp.sdc.common.session.SessionContextProviderFactory;
25 import org.openecomp.sdc.healing.interfaces.Healer;
26 import org.openecomp.sdc.itempermissions.dao.ItemPermissionsDao;
27 import org.openecomp.sdc.itempermissions.dao.ItemPermissionsDaoFactory;
28 import org.openecomp.sdc.itempermissions.impl.types.PermissionTypes;
29 import org.openecomp.sdc.itempermissions.type.ItemPermissionsEntity;
30 import org.openecomp.sdc.notification.dao.SubscribersDao;
31 import org.openecomp.sdc.notification.factories.SubscribersDaoFactory;
32 import org.openecomp.sdc.versioning.dao.ItemDao;
33 import org.openecomp.sdc.versioning.dao.ItemDaoFactory;
34 import org.openecomp.sdc.versioning.dao.types.Version;
35 import org.openecomp.sdc.versioning.types.Item;
40 * Created by ayalaben on 8/28/2017
42 public class OwnerHealer implements Healer {
43 private static final String HEALING_USER_SUFFIX = "_healer";
44 private static final ItemPermissionsDao permissionsDao =
45 ItemPermissionsDaoFactory.getInstance().createInterface();
46 private static final ItemDao itemDao = ItemDaoFactory.getInstance().createInterface();
48 private static final SubscribersDao subscribersDao = SubscribersDaoFactory.getInstance()
52 public boolean isHealingNeeded(String itemId, Version version) {
53 return permissionsDao.listItemPermissions(itemId).stream().noneMatch(this::isOwnerPermission) ||
54 isOwnerMissingOnItem(itemId);
57 public void heal(String itemId, Version version) {
58 Collection<ItemPermissionsEntity> itemPermissions = permissionsDao.listItemPermissions(itemId);
60 if (itemPermissions.stream().noneMatch(this::isOwnerPermission)) {
61 String currentUserId =
62 SessionContextProviderFactory.getInstance().createInterface().get().getUser().getUserId()
63 .replace(HEALING_USER_SUFFIX, "");
65 permissionsDao.updateItemPermissions(itemId, PermissionTypes.Owner.name(),
66 Collections.singleton(currentUserId), new HashSet<>());
68 updateItemOwner(itemId, currentUserId);
70 subscribersDao.subscribe(currentUserId, itemId);
72 } else if (isOwnerMissingOnItem(itemId)) {
73 Optional<ItemPermissionsEntity> ownerOpt =
74 itemPermissions.stream().filter(this::isOwnerPermission).findFirst();
75 if (ownerOpt.isPresent()) {
76 updateItemOwner(itemId, ownerOpt.get().getUserId());
78 throw new SdcRuntimeException("Unexpected error in Owner Healer. Item id: " + itemId);
83 private void updateItemOwner(String itemId, String userId) {
84 Item item = new Item();
86 Item retrievedItem = itemDao.get(item);
87 if (Objects.nonNull(retrievedItem)) {
88 retrievedItem.setOwner(userId);
89 itemDao.update(retrievedItem);
93 private boolean isOwnerMissingOnItem(String itemId) {
94 Item item = new Item();
96 Item retrievedItem = itemDao.get(item);
97 return Objects.nonNull(retrievedItem) && Objects.isNull(retrievedItem.getOwner());
100 private boolean isOwnerPermission(ItemPermissionsEntity permissionsEntity) {
101 return permissionsEntity.getPermission().equals(PermissionTypes.Owner.name());