Catalog alignment
[sdc.git] / catalog-model / src / main / java / org / openecomp / sdc / be / model / operations / impl / UserAdminOperation.java
index bea9df9..16073f4 100644 (file)
@@ -35,35 +35,39 @@ import org.openecomp.sdc.be.dao.janusgraph.JanusGraphGenericDao;
 import org.openecomp.sdc.be.dao.utils.UserStatusEnum;
 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
+import org.openecomp.sdc.be.model.Component;
 import org.openecomp.sdc.be.model.User;
-import org.openecomp.sdc.be.model.operations.api.IUserAdminOperation;
+import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
+import org.openecomp.sdc.be.model.operations.StorageException;
 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
 import org.openecomp.sdc.be.resources.data.UserData;
 import org.openecomp.sdc.common.datastructure.Wrapper;
+import org.openecomp.sdc.common.log.enums.EcompLoggerErrorCode;
 import org.openecomp.sdc.common.log.wrappers.Logger;
 import org.openecomp.sdc.common.util.MethodActivationStatusEnum;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.stereotype.Component;
 
-import java.util.*;
+import javax.validation.constraints.NotNull;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import static org.apache.commons.collections.CollectionUtils.isEmpty;
 
-@Component("user-operation")
-public class UserAdminOperation implements IUserAdminOperation {
+@org.springframework.stereotype.Component
+public class UserAdminOperation {
 
-    private JanusGraphGenericDao janusGraphGenericDao;
+    private final JanusGraphGenericDao janusGraphGenericDao;
+    private final ToscaOperationFacade toscaOperationFacade;
 
-    public UserAdminOperation(@Qualifier("janusgraph-generic-dao")
-                                  JanusGraphGenericDao janusGraphGenericDao) {
-        super();
+    public UserAdminOperation(JanusGraphGenericDao janusGraphGenericDao, ToscaOperationFacade toscaOperationFacade) {
         this.janusGraphGenericDao = janusGraphGenericDao;
-
+        this.toscaOperationFacade = toscaOperationFacade;
     }
 
     private static final Logger log = Logger.getLogger(UserAdminOperation.class.getName());
 
-    @Override
     public Either<User, ActionStatus> getUserData(String id, boolean inTransaction) {
         return getUserData(id, true, inTransaction);
     }
@@ -124,7 +128,7 @@ public class UserAdminOperation implements IUserAdminOperation {
     private void validateUserExists(Wrapper<Either<User, ActionStatus>> resultWrapper, Wrapper<UserData> userWrapper, String id) {
         if (id == null) {
             log.info("User userId  is empty");
-            resultWrapper.setInnerElement(Either.right(ActionStatus.MISSING_INFORMATION));
+            resultWrapper.setInnerElement(Either.right(ActionStatus.MISSING_USER_ID));
             return;
         }
         id = id.toLowerCase();
@@ -138,21 +142,19 @@ public class UserAdminOperation implements IUserAdminOperation {
         }
     }
 
-    @Override
-    public Either<User, StorageOperationStatus> saveUserData(User user) {
+    public User saveUserData(User user) {
         Either<UserData, JanusGraphOperationStatus> result = null;
         try {
             UserData userData = convertToUserData(user);
             result = janusGraphGenericDao.createNode(userData, UserData.class);
             if (result.isRight()) {
-                log.debug("Problem while saving User  {}. Reason - {}", userData.getUserId(), result.right().value());
-                return Either.right(StorageOperationStatus.GENERAL_ERROR);
+                log.error("Problem while saving User  {}. Reason - {}", userData.getUserId(), result.right().value());
+                throw new StorageException(StorageOperationStatus.GENERAL_ERROR);
             }
             log.debug("User {} saved successfully", userData.getUserId());
-            return Either.left(convertToUser(result.left().value()));
+            return convertToUser(result.left().value());
 
         } finally {
-
             if (result == null || result.isRight()) {
                 log.error("saveUserData - Failed");
                 janusGraphGenericDao.rollback();
@@ -163,24 +165,20 @@ public class UserAdminOperation implements IUserAdminOperation {
         }
     }
 
-    @Override
-    public Either<User, StorageOperationStatus> updateUserData(User user) {
+    public User updateUserData(User user) {
         Either<UserData, JanusGraphOperationStatus> result = null;
         try {
             log.debug("updateUserData - start");
             UserData userData = convertToUserData(user);
             result = janusGraphGenericDao.updateNode(userData, UserData.class);
             if (result.isRight()) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Problem while updating User {}. Reason - {}", userData.toString(), result.right().value());
-                }
-                return Either.right(StorageOperationStatus.GENERAL_ERROR);
+                log.error("Problem while updating User {}. Reason - {}", userData.toString(), result.right().value());
+                throw new StorageException(StorageOperationStatus.GENERAL_ERROR);
             }
             log.debug("User {} updated successfully",userData.getUserId());
-            return Either.left(convertToUser(result.left().value()));
+            return convertToUser(result.left().value());
 
         } finally {
-
             if (result == null || result.isRight()) {
                 log.error("updateUserData - Failed");
                 janusGraphGenericDao.rollback();
@@ -192,20 +190,11 @@ public class UserAdminOperation implements IUserAdminOperation {
         }
     }
 
-    @Override
-    public Either<User, StorageOperationStatus> deActivateUser(User user) {
-        Either<User, StorageOperationStatus> result;
+    public User deActivateUser(User user) {
         user.setStatus(UserStatusEnum.INACTIVE);
-        Either<User, StorageOperationStatus> status = updateUserData(user);
-        if (status.isRight()) {
-            result = Either.right(status.right().value());
-        } else {
-            result = Either.left(user);
-        }
-        return result;
+        return updateUserData(user);
     }
 
-    @Override
     public Either<User, ActionStatus> deleteUserData(String id) {
         Either<User, ActionStatus> result;
         Either<UserData, JanusGraphOperationStatus> eitherGet = janusGraphGenericDao
@@ -269,34 +258,48 @@ public class UserAdminOperation implements IUserAdminOperation {
         }
     }
 
-    public Either<List<Edge>, StorageOperationStatus> getUserPendingTasksList(User user, Map<String, Object> properties) {
+    public @NotNull List<Edge> getUserPendingTasksList(User user, List<Object> states) {
+
+        JanusGraphVertex userVertex = janusGraphGenericDao.getVertexByProperty(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User), user.getUserId())
+            .left()
+            .on(this::handleJanusGraphError);
 
-        Either<JanusGraphVertex, JanusGraphOperationStatus> vertexUser = janusGraphGenericDao
-            .getVertexByProperty(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.User), user.getUserId());
-        if (vertexUser.isRight()) {
-            JanusGraphOperationStatus tos = vertexUser.right().value();
-            log.debug("Failed to get User {} from graph while retrieving pending tasks. Reason - {}", user.getUserId(), tos);
-            return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(tos));
-        }
         List<Edge> pendingTasks = new ArrayList<>();
-        Either<List<Edge>, JanusGraphOperationStatus> edges = janusGraphGenericDao
-            .getOutgoingEdgesByCriteria(vertexUser.left().value(), GraphEdgeLabels.STATE, properties);
-        if (edges.isRight() || edges.left().value() == null) {
-            JanusGraphOperationStatus tos = edges.right().value();
-            if (tos == JanusGraphOperationStatus.NOT_FOUND) {
-                return Either.left(pendingTasks);
-            } else {
-                log.debug("Failed while retrieving pending tasks for user {} . Reason - {}", user.getUserId(), tos);
-                return Either.right(DaoStatusConverter.convertJanusGraphStatusToStorageStatus(tos));
+        for (Object state : states) {
+            Map<String, Object> property = new HashMap<>();
+            property.put(GraphPropertiesDictionary.STATE.getProperty(), state);
+            List<Edge> edges = janusGraphGenericDao.getOutgoingEdgesByCriteria(userVertex, GraphEdgeLabels.STATE, property)
+                    .left()
+                    .on(this::handleJanusGraphError);
+            for (Edge edge : edges) {
+                Vertex vertex = edge.inVertex();
+                if (!isComponentDeleted(vertex)) {
+                    pendingTasks.add(edge);
+                }
             }
         }
-        for (Edge edge : edges.left().value()) {
-            if (!isComponentDeleted(edge.inVertex())) {
-                pendingTasks.add(edge);
+        logPendingTasks(user, pendingTasks);
+        return pendingTasks;
+    }
+
+    public @NotNull List<Component> getUserActiveComponents(User user, List<Object> states) {
+        List<Component> components = new ArrayList<>();
+        List<Edge> edges = getUserPendingTasksList(user, states);
+        for (Edge edge : edges) {
+            JanusGraphVertex componentVertex = (JanusGraphVertex) edge.inVertex();
+            String componentId = (String) janusGraphGenericDao.getProperty(componentVertex, GraphPropertyEnum.UNIQUE_ID.getProperty());
+            Either<Component, StorageOperationStatus> toscaFullElement = toscaOperationFacade.getToscaFullElement(componentId);
+            if (toscaFullElement.isLeft()) {
+                components.add(toscaFullElement.left().value());
+            } else {
+                log.warn(EcompLoggerErrorCode.SCHEMA_ERROR, "", "", "Failed to retrieve component {} from graph db", componentId);
             }
         }
-        logPendingTasks(user, pendingTasks);
-        return Either.left(pendingTasks);
+        return components;
+    }
+
+    private <T> T handleJanusGraphError(JanusGraphOperationStatus janusGraphOperationStatus) {
+        throw new StorageException(janusGraphOperationStatus);
     }
 
     private boolean isComponentDeleted(Vertex componentVertex) {
@@ -318,7 +321,6 @@ public class UserAdminOperation implements IUserAdminOperation {
         }
     }
 
-    @Override
     public Either<List<User>, ActionStatus> getAllUsersWithRole(String role, String status) {
         try {
             Map<String, Object> propertiesToMatch = new HashMap<>();