Merge "SO API to support custom PNF workflow"
[so.git] / mso-api-handlers / mso-requests-db-repositories / src / main / java / org / onap / so / db / request / data / repository / InfraActiveRequestsRepositoryImpl.java
index e3f1576..6b5ea01 100644 (file)
@@ -24,17 +24,14 @@ package org.onap.so.db.request.data.repository;
 
 import java.sql.Timestamp;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
 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;
@@ -44,7 +41,6 @@ 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;
@@ -69,7 +65,6 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
     protected static final String SOURCE = "source";
     protected static final String START_TIME = "startTime";
     protected static final String END_TIME = "endTime";
-    protected static final String REQUEST_TYPE = "requestType";
     protected static final String SERVICE_INSTANCE_ID = "serviceInstanceId";
     protected static final String SERVICE_INSTANCE_NAME = "serviceInstanceName";
     protected static final String VNF_INSTANCE_NAME = "vnfName";
@@ -90,10 +85,11 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
     protected static final String SERVICE_VERSION = "serviceVersion";
     protected static final String REQUEST_ID = "requestId";
     protected static final String REQUESTOR_ID = "requestorId";
-    protected static final String ACTION = "action";
+    protected static final String OPENV = "operationalEnvironment";
 
     private static final List<String> VALID_COLUMNS =
-            Arrays.asList(REQUEST_ID, SERVICE_INSTANCE_ID, SERVICE_INSTANCE_NAME, ACTION, REQUEST_STATUS);
+            Arrays.asList(REQUEST_ID, SERVICE_INSTANCE_ID, SERVICE_INSTANCE_NAME, REQUEST_STATUS, VFMODULE_INSTANCE_ID,
+                    VNF_INSTANCE_ID, NETWORK_INSTANCE_ID, VOLUME_GROUP_INSTANCE_ID);
 
 
     /*
@@ -114,34 +110,26 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
     private List<InfraActiveRequests> executeInfraQuery(final CriteriaQuery<InfraActiveRequests> crit,
             final List<Predicate> predicates, final Order order) {
 
-        final long startTime = System.currentTimeMillis();
         logger.debug("Execute query on infra active request table");
 
-        List<InfraActiveRequests> results = new ArrayList<InfraActiveRequests>();
-
         final CriteriaBuilder cb = entityManager.getCriteriaBuilder();
         crit.where(cb.and(predicates.toArray(new Predicate[0])));
         crit.orderBy(order);
-        results = entityManager.createQuery(crit).getResultList();
 
-        return results;
+        return entityManager.createQuery(crit).getResultList();
     }
 
     /*
      * (non-Javadoc)
      * 
-     * @see
-     * org.onap.so.requestsdb.InfraActiveRequestsRepositoryCustom#getRequestFromInfraActive(java.
-     * lang.String)
+     * @see org.onap.so.requestsdb.InfraActiveRequestsRepositoryCustom#getRequestFromInfraActive(java. lang.String)
      */
     @Override
     public InfraActiveRequests getRequestFromInfraActive(final String requestId) {
-        final long startTime = System.currentTimeMillis();
         logger.debug("Get request {} from InfraActiveRequests DB", requestId);
 
         InfraActiveRequests ar = null;
-        final Query query = entityManager
-            .createQuery("from InfraActiveRequests where requestId = :requestId OR clientRequestId = :requestId");
+        final Query query = entityManager.createQuery("from InfraActiveRequests where requestId = :requestId");
         query.setParameter(REQUEST_ID, requestId);
         ar = this.getSingleResult(query);
         return ar;
@@ -150,12 +138,11 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
     /*
      * (non-Javadoc)
      * 
-     * @see
-     * org.onap.so.requestsdb.InfraActiveRequestsRepositoryCustom#checkInstanceNameDuplicate(java.
-     * util.HashMap, java.lang.String, java.lang.String)
+     * @see org.onap.so.requestsdb.InfraActiveRequestsRepositoryCustom#checkInstanceNameDuplicate(java. util.HashMap,
+     * java.lang.String, java.lang.String)
      */
     @Override
-    public InfraActiveRequests checkInstanceNameDuplicate(final HashMap<String, String> instanceIdMap,
+    public InfraActiveRequests checkInstanceNameDuplicate(final Map<String, String> instanceIdMap,
             final String instanceName, final String requestScope) {
 
         final List<Predicate> predicates = new LinkedList<>();
@@ -178,13 +165,13 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
                 predicates.add(cb.equal(tableRoot.get(NETWORK_INSTANCE_NAME), instanceName));
             } else if (requestScope.equals("configuration")) {
                 predicates.add(cb.equal(tableRoot.get(CONFIGURATION_INSTANCE_NAME), instanceName));
-            } else if (requestScope.equals("operationalEnvironment")) {
+            } else if (requestScope.equals(OPENV)) {
                 predicates.add(cb.equal(tableRoot.get(OPERATIONAL_ENV_NAME), instanceName));
             }
 
         } else {
             if (instanceIdMap != null) {
-                if ("service".equals(requestScope) && instanceIdMap.get("serviceInstanceId") != null) {
+                if ("service".equals(requestScope) && instanceIdMap.get(SERVICE_INSTANCE_ID) != null) {
                     predicates
                             .add(cb.equal(tableRoot.get(SERVICE_INSTANCE_ID), instanceIdMap.get("serviceInstanceId")));
                 }
@@ -213,8 +200,7 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
                             instanceIdMap.get("configurationInstanceId")));
                 }
 
-                if (requestScope.equals("operationalEnvironment")
-                        && instanceIdMap.get("operationalEnvironmentId") != null) {
+                if (requestScope.equals(OPENV) && instanceIdMap.get("operationalEnvironmentId") != null) {
                     predicates.add(
                             cb.equal(tableRoot.get(OPERATIONAL_ENV_ID), instanceIdMap.get("operationalEnvironmentId")));
                 }
@@ -259,6 +245,8 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
                 mapKey = "serviceInstanceName";
             } else if ("vnfInstanceId".equalsIgnoreCase(mapKey)) {
                 mapKey = "vnfId";
+            } else if ("pnfId".equalsIgnoreCase(mapKey)) {
+                mapKey = "pnfId";
             } else if ("vnfInstanceName".equalsIgnoreCase(mapKey)) {
                 mapKey = "vnfName";
             } else if ("vfModuleInstanceId".equalsIgnoreCase(mapKey)) {
@@ -341,7 +329,7 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
         // as the same requestorId can also match on different API methods
         final String resourceType = orchestrationMap.get("resourceType");
         if (resourceType == null) {
-            predicates.add(cb.equal(tableRoot.get("requestScope"), "operationalEnvironment"));
+            predicates.add(cb.equal(tableRoot.get("requestScope"), OPENV));
         }
 
         for (final Map.Entry<String, String> entry : orchestrationMap.entrySet()) {
@@ -383,9 +371,8 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
     /*
      * (non-Javadoc)
      * 
-     * @see
-     * org.onap.so.requestsdb.InfraActiveRequestsRepositoryCustom#getRequestListFromInfraActive(java
-     * .lang.String, java.lang.String, java.lang.String)
+     * @see org.onap.so.requestsdb.InfraActiveRequestsRepositoryCustom#getRequestListFromInfraActive(java .lang.String,
+     * java.lang.String, java.lang.String)
      */
     @Override
     public List<InfraActiveRequests> getRequestListFromInfraActive(final String queryAttributeName,
@@ -398,12 +385,8 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
             final CriteriaQuery<InfraActiveRequests> crit = cb.createQuery(InfraActiveRequests.class);
             final Root<InfraActiveRequests> candidateRoot = crit.from(InfraActiveRequests.class);
             final Predicate isEqual = cb.equal(candidateRoot.get(queryAttributeName), queryValue);
-            final Predicate equalRequestType = cb.equal(candidateRoot.get(REQUEST_TYPE), requestType);
-            final Predicate isNull = cb.isNull(candidateRoot.get(REQUEST_TYPE));
-            final Predicate orClause = cb.or(equalRequestType, isNull);
             final Order orderDesc = cb.desc(candidateRoot.get(START_TIME));
             final Order orderAsc = cb.asc(candidateRoot.get(SOURCE));
-            crit.where(cb.and(isEqual, orClause)).orderBy(orderDesc, orderAsc);
 
             final List<InfraActiveRequests> arList = entityManager.createQuery(crit).getResultList();
             if (arList != null && !arList.isEmpty()) {
@@ -419,94 +402,29 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
     /*
      * (non-Javadoc)
      * 
-     * @see
-     * org.onap.so.requestsdb.InfraActiveRequestsRepositoryCustom#getRequestFromInfraActive(java.
-     * lang.String, java.lang.String)
+     * @see org.onap.so.requestsdb.InfraActiveRequestsRepositoryCustom#getRequestFromInfraActive(java. lang.String,
+     * java.lang.String)
      */
     @Override
     public InfraActiveRequests getRequestFromInfraActive(final String requestId, final String requestType) {
-        final long startTime = System.currentTimeMillis();
         logger.debug("Get infra request from DB with id {}", requestId);
 
         InfraActiveRequests ar = null;
 
-        final Query query = entityManager.createQuery(
-            "from InfraActiveRequests where (requestId = :requestId OR clientRequestId = :requestId) and requestType = :requestType");
+        final Query query = entityManager
+                .createQuery("from InfraActiveRequests where requestId = :requestId and requestType = :requestType");
         query.setParameter(REQUEST_ID, requestId);
-        query.setParameter(REQUEST_TYPE, requestType);
         ar = this.getSingleResult(query);
         return ar;
     }
 
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.onap.so.requestsdb.InfraActiveRequestsRepositoryCustom#checkDuplicateByVnfName(java.lang.
-     * String, java.lang.String, java.lang.String)
-     */
-    @Override
-    public InfraActiveRequests checkDuplicateByVnfName(final String vnfName, final String action,
-            final String requestType) {
-
-        final long startTime = System.currentTimeMillis();
-        logger.debug("Get infra request from DB for VNF {} and action {} and requestType {}", vnfName, action,
-            requestType);
-
-        InfraActiveRequests ar = 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;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.onap.so.requestsdb.InfraActiveRequestsRepositoryCustom#checkDuplicateByVnfId(java.lang.
-     * String, java.lang.String, java.lang.String)
-     */
-    @Override
-    public InfraActiveRequests checkDuplicateByVnfId(final String vnfId, final String action,
-            final String requestType) {
-
-        final long startTime = System.currentTimeMillis();
-        logger.debug("Get list of infra requests from DB for VNF {} and action {}", vnfId, action);
-
-        InfraActiveRequests ar = 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;
-    }
-
     /*
      * (non-Javadoc)
      * 
-     * @see
-     * org.onap.so.requestsdb.InfraActiveRequestsRepositoryCustom#checkVnfIdStatus(java.lang.String)
+     * @see org.onap.so.requestsdb.InfraActiveRequestsRepositoryCustom#checkVnfIdStatus(java.lang.String)
      */
     @Override
     public InfraActiveRequests checkVnfIdStatus(final String operationalEnvironmentId) {
-        final long startTime = System.currentTimeMillis();
         logger.debug("Get Infra request from DB for OperationalEnvironmentId {}", operationalEnvironmentId);
 
         InfraActiveRequests ar = null;
@@ -516,10 +434,9 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
         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.where(cb.and(operationalEnvEq, requestStatusNotEq));
         crit.orderBy(startTimeOrder);
         final TypedQuery<InfraActiveRequests> query = entityManager.createQuery(crit);
         final List<InfraActiveRequests> results = query.getResultList();
@@ -560,9 +477,10 @@ public class InfraActiveRequestsRepositoryImpl implements InfraActiveRequestsRep
             final Timestamp minTime = new Timestamp(startTime);
             final Timestamp maxTime = new Timestamp(endTime);
             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)));
+            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(basePredicate, additionalPredicate));
             if (maxResult != null) {