Owner healer - owner in tile 73/28773/3
authorayalaben <ayala.benzvi@amdocs.com>
Mon, 22 Jan 2018 10:22:32 +0000 (12:22 +0200)
committerayalaben <ayala.benzvi@amdocs.com>
Mon, 22 Jan 2018 12:19:57 +0000 (14:19 +0200)
Change-Id: Ia9bea13d4e6e78e6222e9565074137c58d167eb6
Issue-ID: SDC-946
Signed-off-by: ayalaben <ayala.benzvi@amdocs.com>
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/OwnerHealer.java

index e47fbc4..711848c 100644 (file)
@@ -1,5 +1,6 @@
 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;
@@ -17,6 +18,8 @@ import java.util.Collection;
 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
@@ -31,9 +34,11 @@ public class OwnerHealer implements Healer {
       .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, "");
@@ -46,8 +51,16 @@ public class OwnerHealer implements Healer {
       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) {
@@ -60,6 +73,13 @@ public class OwnerHealer implements Healer {
     }
   }
 
+  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());
   }