package org.openecomp.sdc.healing.healers;
+import org.openecomp.sdc.common.errors.SdcRuntimeException;
import org.openecomp.sdc.common.session.SessionContextProviderFactory;
import org.openecomp.sdc.healing.interfaces.Healer;
import org.openecomp.sdc.itempermissions.dao.ItemPermissionsDao;
import java.util.Collections;
import java.util.HashSet;
import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Stream;
/**
* Created by ayalaben on 8/28/2017
.createInterface();
public Object heal(String itemId, Version version) {
- Collection<ItemPermissionsEntity> itemPermissions = permissionsDao.listItemPermissions(itemId);
+ Stream<ItemPermissionsEntity> itemPermissions = permissionsDao.listItemPermissions(itemId)
+ .stream();
- if (itemPermissions.stream().noneMatch(this::isOwnerPermission)) {
+
+ if (itemPermissions.noneMatch(this::isOwnerPermission)) {
String currentUserId =
SessionContextProviderFactory.getInstance().createInterface().get().getUser().getUserId()
.replace(HEALING_USER_SUFFIX, "");
subscribersDao.subscribe(currentUserId,itemId);
return currentUserId;
- }
- return itemPermissions.stream().filter(this::isOwnerPermission).findFirst().get().getUserId();
+ } else if (!itemHasOwnerProperty(itemId)){
+ Optional<ItemPermissionsEntity> ownerOpt = itemPermissions.filter
+ (this::isOwnerPermission).findFirst();
+ if(ownerOpt.isPresent()) {
+ updateItemOwner(itemId, ownerOpt.get().getUserId());
+ } else {
+ throw new SdcRuntimeException("Unexpected error in Owner Healer. Item id: " + itemId);
+ }
+ }
+ return itemPermissions.filter(this::isOwnerPermission).findFirst().get().getUserId();
}
private void updateItemOwner(String itemId,String userId) {
}
}
+ private boolean itemHasOwnerProperty(String itemId){
+ Item item = new Item();
+ item.setId(itemId);
+ Item retrievedItem = itemDao.get(item);
+ return Objects.nonNull(retrievedItem) && Objects.nonNull(retrievedItem.getOwner());
+ }
+
private boolean isOwnerPermission(ItemPermissionsEntity permissionsEntity) {
return permissionsEntity.getPermission().equals(PermissionTypes.Owner.name());
}