Merge changes Id0369478,I82d8306f
[so.git] / mso-api-handlers / mso-requests-db-repositories / src / main / java / org / onap / so / db / request / data / repository / InfraActiveRequestsRepositoryImpl.java
index c15c70c..e3f1576 100644 (file)
@@ -4,6 +4,7 @@
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
  * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
+ * Modifications Copyright (c) 2019 Samsung
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 
 package org.onap.so.db.request.data.repository;
 
-import org.onap.so.db.request.beans.InfraActiveRequests;
-import org.onap.so.logger.MsoLogger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.stereotype.Repository;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.persistence.EntityManager;
-import javax.persistence.NonUniqueResultException;
-import javax.persistence.Query;
-import javax.persistence.TypedQuery;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Order;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
 import java.sql.Timestamp;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -50,6 +35,24 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.concurrent.TimeUnit;
 
+import javax.persistence.EntityManager;
+import javax.persistence.NonUniqueResultException;
+import javax.persistence.Query;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Order;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import org.onap.so.db.request.beans.InfraActiveRequests;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
 
 @Repository
 @Transactional(readOnly = true)
@@ -60,8 +63,7 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
     @Autowired
     private EntityManager entityManager;
 
-    protected static MsoLogger msoLogger =
-            MsoLogger.getMsoLogger(MsoLogger.Catalog.GENERAL, InfraActiveRequestsRepositoryImpl.class);
+    protected static Logger logger = LoggerFactory.getLogger(InfraActiveRequestsRepositoryImpl.class);
 
     protected static final String REQUEST_STATUS = "requestStatus";
     protected static final String SOURCE = "source";
@@ -113,20 +115,15 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
             final List<Predicate> predicates, final Order order) {
 
         final long startTime = System.currentTimeMillis();
-        msoLogger.debug("Execute query on infra active request table");
+        logger.debug("Execute query on infra active request table");
 
         List<InfraActiveRequests> results = new ArrayList<InfraActiveRequests>();
 
-        try {
-            final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
-            crit.where(cb.and(predicates.toArray(new Predicate[0])));
-            crit.orderBy(order);
-            results = entityManager.createQuery(crit).getResultList();
+        final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
+        crit.where(cb.and(predicates.toArray(new Predicate[0])));
+        crit.orderBy(order);
+        results = entityManager.createQuery(crit).getResultList();
 
-        } finally {
-            msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
-                    "Successfully", "RequestDB", "getInfraActiveRequest", null);
-        }
         return results;
     }
 
@@ -140,19 +137,13 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
     @Override
     public InfraActiveRequests getRequestFromInfraActive(final String requestId) {
         final long startTime = System.currentTimeMillis();
-        msoLogger.debug("Get request " + requestId + " from InfraActiveRequests DB");
+        logger.debug("Get request {} from InfraActiveRequests DB", requestId);
 
         InfraActiveRequests ar = null;
-        try {
-            final Query query = entityManager.createQuery(
-                    "from InfraActiveRequests where requestId = :requestId OR clientRequestId = :requestId");
-            query.setParameter(REQUEST_ID, requestId);
-            ar = this.getSingleResult(query);
-        } finally {
-
-            msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
-                    "Successfully", "InfraRequestDB", "getRequestFromInfraActive", null);
-        }
+        final Query query = entityManager
+            .createQuery("from InfraActiveRequests where requestId = :requestId OR clientRequestId = :requestId");
+        query.setParameter(REQUEST_ID, requestId);
+        ar = this.getSingleResult(query);
         return ar;
     }
 
@@ -229,17 +220,17 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
                 }
             }
         }
-        if(!predicates.isEmpty()){
-               predicates.add(tableRoot.get(REQUEST_STATUS)
-                .in(Arrays.asList("PENDING", "IN_PROGRESS", "TIMEOUT", "PENDING_MANUAL_TASK")));
-
-               final Order order = cb.desc(tableRoot.get(START_TIME));
-       
-               final List<InfraActiveRequests> dupList = executeInfraQuery(crit, predicates, order);
-       
-               if (dupList != null && !dupList.isEmpty()) {
-                   infraActiveRequests = dupList.get(0);
-               }
+        if (!predicates.isEmpty()) {
+            predicates.add(tableRoot.get(REQUEST_STATUS)
+                    .in(Arrays.asList("PENDING", "IN_PROGRESS", "TIMEOUT", "PENDING_MANUAL_TASK")));
+
+            final Order order = cb.desc(tableRoot.get(START_TIME));
+
+            final List<InfraActiveRequests> dupList = executeInfraQuery(crit, predicates, order);
+
+            if (dupList != null && !dupList.isEmpty()) {
+                infraActiveRequests = dupList.get(0);
+            }
         }
 
         return infraActiveRequests;
@@ -313,7 +304,7 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
                         predicates.add(cb.between(tableRoot.get(mapKey), minTime, maxTime));
                     }
                 } catch (final Exception e) {
-                    msoLogger.debug("Exception in getOrchestrationFiltersFromInfraActive(): + " + e.getMessage(), e);
+                    logger.debug("Exception in getOrchestrationFiltersFromInfraActive(): {}", e.getMessage(), e);
                     return null;
                 }
             } else if ("DOES_NOT_EQUAL".equalsIgnoreCase(entry.getValue().get(0))) {
@@ -377,7 +368,7 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
 
                     predicates.add(cb.between(tableRoot.get(mapKey), minTime, maxTime));
                 } catch (final Exception e) {
-                    msoLogger.debug("Exception in getCloudOrchestrationFiltersFromInfraActive(): + " + e.getMessage());
+                    logger.debug("Exception in getCloudOrchestrationFiltersFromInfraActive(): {}", e.getMessage());
                     return null;
                 }
             } else {
@@ -399,7 +390,7 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
     @Override
     public List<InfraActiveRequests> getRequestListFromInfraActive(final String queryAttributeName,
             final String queryValue, final String requestType) {
-        msoLogger.debug("Get list of infra requests from DB with " + queryAttributeName + " = " + queryValue);
+        logger.debug("Get list of infra requests from DB with {} = {}", queryAttributeName, queryValue);
 
 
         try {
@@ -419,7 +410,7 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
                 return arList;
             }
         } catch (final Exception exception) {
-            msoLogger.error("Unable to execute query", exception);
+            logger.error("Unable to execute query", exception);
         }
         return Collections.emptyList();
     }
@@ -435,19 +426,15 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
     @Override
     public InfraActiveRequests getRequestFromInfraActive(final String requestId, final String requestType) {
         final long startTime = System.currentTimeMillis();
-        msoLogger.debug("Get infra request from DB with id " + requestId);
+        logger.debug("Get infra request from DB with id {}", requestId);
 
         InfraActiveRequests ar = null;
-        try {
-            final Query query = entityManager.createQuery(
-                    "from InfraActiveRequests where (requestId = :requestId OR clientRequestId = :requestId) and requestType = :requestType");
-            query.setParameter(REQUEST_ID, requestId);
-            query.setParameter(REQUEST_TYPE, requestType);
-            ar = this.getSingleResult(query);
-        } finally {
-            msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
-                    "Successfully", "RequestDB", "getRequestFromInfraActive", null);
-        }
+
+        final Query query = entityManager.createQuery(
+            "from InfraActiveRequests where (requestId = :requestId OR clientRequestId = :requestId) and requestType = :requestType");
+        query.setParameter(REQUEST_ID, requestId);
+        query.setParameter(REQUEST_TYPE, requestType);
+        ar = this.getSingleResult(query);
         return ar;
     }
 
@@ -464,24 +451,19 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
             final String requestType) {
 
         final long startTime = System.currentTimeMillis();
-        msoLogger.debug("Get infra request from DB for VNF " + vnfName + " and action " + action + " and requestType "
-                + requestType);
+        logger.debug("Get infra request from DB for VNF {} and action {} and requestType {}", vnfName, action,
+            requestType);
 
         InfraActiveRequests ar = null;
-        try {
-            final Query query = entityManager.createQuery(
-                    "from InfraActiveRequests where vnfName = :vnfName and action = :action and (requestStatus = 'PENDING' or requestStatus = 'IN_PROGRESS' or requestStatus = 'TIMEOUT' or requestStatus = 'PENDING_MANUAL_TASK') and requestType = :requestType ORDER BY startTime DESC");
-            query.setParameter("vnfName", vnfName);
-            query.setParameter("action", action);
-            query.setParameter(REQUEST_TYPE, requestType);
-            @SuppressWarnings("unchecked")
-            final List<InfraActiveRequests> results = query.getResultList();
-            if (!results.isEmpty()) {
-                ar = results.get(0);
-            }
-        } finally {
-            msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
-                    "Successfully", "RequestDB", "checkDuplicateByVnfName", null);
+
+        final Query query = entityManager.createQuery(
+            "from InfraActiveRequests where vnfName = :vnfName and action = :action and (requestStatus = 'PENDING' or requestStatus = 'IN_PROGRESS' or requestStatus = 'TIMEOUT' or requestStatus = 'PENDING_MANUAL_TASK') and requestType = :requestType ORDER BY startTime DESC");
+        query.setParameter("vnfName", vnfName);
+        query.setParameter("action", action);
+        query.setParameter(REQUEST_TYPE, requestType);
+        @SuppressWarnings("unchecked") final List<InfraActiveRequests> results = query.getResultList();
+        if (!results.isEmpty()) {
+            ar = results.get(0);
         }
 
         return ar;
@@ -499,23 +481,18 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
             final String requestType) {
 
         final long startTime = System.currentTimeMillis();
-        msoLogger.debug("Get list of infra requests from DB for VNF " + vnfId + " and action " + action);
+        logger.debug("Get list of infra requests from DB for VNF {} and action {}", vnfId, action);
 
         InfraActiveRequests ar = null;
-        try {
-            final Query query = entityManager.createQuery(
-                    "from InfraActiveRequests where vnfId = :vnfId and action = :action and (requestStatus = 'PENDING' or requestStatus = 'IN_PROGRESS' or requestStatus = 'TIMEOUT' or requestStatus = 'PENDING_MANUAL_TASK') and requestType = :requestType ORDER BY startTime DESC");
-            query.setParameter("vnfId", vnfId);
-            query.setParameter("action", action);
-            query.setParameter(REQUEST_TYPE, requestType);
-            @SuppressWarnings("unchecked")
-            final List<InfraActiveRequests> results = query.getResultList();
-            if (!results.isEmpty()) {
-                ar = results.get(0);
-            }
-        } finally {
-            msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
-                    "Successfully", "RequestDB", "checkDuplicateByVnfId", null);
+
+        final Query query = entityManager.createQuery(
+            "from InfraActiveRequests where vnfId = :vnfId and action = :action and (requestStatus = 'PENDING' or requestStatus = 'IN_PROGRESS' or requestStatus = 'TIMEOUT' or requestStatus = 'PENDING_MANUAL_TASK') and requestType = :requestType ORDER BY startTime DESC");
+        query.setParameter("vnfId", vnfId);
+        query.setParameter("action", action);
+        query.setParameter(REQUEST_TYPE, requestType);
+        @SuppressWarnings("unchecked") final List<InfraActiveRequests> results = query.getResultList();
+        if (!results.isEmpty()) {
+            ar = results.get(0);
         }
 
         return ar;
@@ -530,29 +507,24 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
     @Override
     public InfraActiveRequests checkVnfIdStatus(final String operationalEnvironmentId) {
         final long startTime = System.currentTimeMillis();
-        msoLogger.debug("Get Infra request from DB for OperationalEnvironmentId " + operationalEnvironmentId);
+        logger.debug("Get Infra request from DB for OperationalEnvironmentId {}", operationalEnvironmentId);
 
         InfraActiveRequests ar = null;
-        try {
-            final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
-            final CriteriaQuery<InfraActiveRequests> crit = cb.createQuery(InfraActiveRequests.class);
-            final Root<InfraActiveRequests> candidateRoot = crit.from(InfraActiveRequests.class);
-            final Predicate operationalEnvEq =
-                    cb.equal(candidateRoot.get("operationalEnvId"), operationalEnvironmentId);
-            final Predicate requestStatusNotEq = cb.notEqual(candidateRoot.get(REQUEST_STATUS), "COMPLETE");
-            final Predicate actionEq = cb.equal(candidateRoot.get("action"), "create");
-            final Order startTimeOrder = cb.desc(candidateRoot.get("startTime"));
-            crit.select(candidateRoot);
-            crit.where(cb.and(operationalEnvEq, requestStatusNotEq, actionEq));
-            crit.orderBy(startTimeOrder);
-            final TypedQuery<InfraActiveRequests> query = entityManager.createQuery(crit);
-            final List<InfraActiveRequests> results = query.getResultList();
-            if (!results.isEmpty()) {
-                ar = results.get(0);
-            }
-        } finally {
-            msoLogger.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
-                    "Successfully", "RequestDB", "checkDuplicateByVnfName", null);
+
+        final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
+        final CriteriaQuery<InfraActiveRequests> crit = cb.createQuery(InfraActiveRequests.class);
+        final Root<InfraActiveRequests> candidateRoot = crit.from(InfraActiveRequests.class);
+        final Predicate operationalEnvEq = cb.equal(candidateRoot.get("operationalEnvId"), operationalEnvironmentId);
+        final Predicate requestStatusNotEq = cb.notEqual(candidateRoot.get(REQUEST_STATUS), "COMPLETE");
+        final Predicate actionEq = cb.equal(candidateRoot.get("action"), "create");
+        final Order startTimeOrder = cb.desc(candidateRoot.get("startTime"));
+        crit.select(candidateRoot);
+        crit.where(cb.and(operationalEnvEq, requestStatusNotEq, actionEq));
+        crit.orderBy(startTimeOrder);
+        final TypedQuery<InfraActiveRequests> query = entityManager.createQuery(crit);
+        final List<InfraActiveRequests> results = query.getResultList();
+        if (!results.isEmpty()) {
+            ar = results.get(0);
         }
 
         return ar;
@@ -579,6 +551,7 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
         }
         try {
             final CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
+
             final CriteriaQuery<InfraActiveRequests> criteriaQuery =
                     criteriaBuilder.createQuery(InfraActiveRequests.class);
             final Root<InfraActiveRequests> tableRoot = criteriaQuery.from(InfraActiveRequests.class);
@@ -586,21 +559,23 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
 
             final Timestamp minTime = new Timestamp(startTime);
             final Timestamp maxTime = new Timestamp(endTime);
-            predicates.add(criteriaBuilder.greaterThanOrEqualTo(tableRoot.get(START_TIME), minTime));
-            predicates.add(criteriaBuilder.lessThanOrEqualTo(tableRoot.get(END_TIME), maxTime));
+            final Predicate basePredicate = criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
+            final Predicate additionalPredicate = criteriaBuilder.and(
+                       criteriaBuilder.greaterThanOrEqualTo(tableRoot.get(START_TIME), minTime),
+                    criteriaBuilder.or(tableRoot.get(END_TIME).isNull(), criteriaBuilder.lessThanOrEqualTo(tableRoot.get(END_TIME), maxTime)));
 
-            criteriaQuery.where(criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()])));
+            criteriaQuery.where(criteriaBuilder.and(basePredicate, additionalPredicate));
             if (maxResult != null) {
                 return entityManager.createQuery(criteriaQuery).setMaxResults(maxResult).getResultList();
             }
             return entityManager.createQuery(criteriaQuery).getResultList();
         } catch (final Exception exception) {
-            msoLogger.error("Unable to execute query using filters: " + filters, exception);
+            logger.error("Unable to execute query using filters: {}", filters, exception);
             return Collections.emptyList();
         }
     }
 
-    private List<Predicate> getPredicates(final Map<String, String[]> filters, final CriteriaBuilder criteriaBuilder,
+    protected List<Predicate> getPredicates(final Map<String, String[]> filters, final CriteriaBuilder criteriaBuilder,
             final Root<InfraActiveRequests> tableRoot) {
         final List<Predicate> predicates = new LinkedList<>();
         for (final Entry<String, String[]> entry : filters.entrySet()) {