Implement validation and hierarchical get
[policy/models.git] / models-dao / src / main / java / org / onap / policy / models / dao / impl / DefaultPfDao.java
index e982667..6707e70 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2019 Nordix Foundation.
+ *  Copyright (C) 2019-2020 Nordix Foundation.
  *  Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -26,11 +26,13 @@ import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.Persistence;
 import javax.persistence.TypedQuery;
 import javax.ws.rs.core.Response;
+
 import org.onap.policy.models.base.PfConcept;
 import org.onap.policy.models.base.PfConceptKey;
 import org.onap.policy.models.base.PfModelException;
@@ -66,9 +68,11 @@ public class DefaultPfDao implements PfDao {
 
     private static final String WHERE      = " WHERE ";
     private static final String AND        = " AND ";
+    private static final String ORDER      = " ORDER BY ";
 
     private static final String NAME_FILTER            = "c.key.name = :name";
     private static final String VERSION_FILTER         = "c.key.version = :version";
+    private static final String TIMESTAMP_FILTER       = "c.key.timeStamp = :timeStamp";
     private static final String TIMESTAMP_START_FILTER = "c.key.timeStamp >= :startTime";
     private static final String TIMESTAMP_END_FILTER   = "c.key.timeStamp <= :endTime";
     private static final String PARENT_NAME_FILTER     = "c.key.parentKeyName = :parentname";
@@ -80,6 +84,9 @@ public class DefaultPfDao implements PfDao {
     private static final String DELETE_BY_CONCEPT_KEY =
             DELETE_FROM_TABLE + WHERE + NAME_FILTER + AND + VERSION_FILTER;
 
+    private static final String DELETE_BY_TIMESTAMP_KEY =
+            DELETE_FROM_TABLE + WHERE + NAME_FILTER + AND + VERSION_FILTER  + AND + TIMESTAMP_FILTER;
+
     private static final String DELETE_BY_REFERENCE_KEY =
             DELETE_FROM_TABLE + WHERE + PARENT_NAME_FILTER + AND + PARENT_VERSION_FILTER + AND + LOCAL_NAME_FILTER;
 
@@ -221,7 +228,7 @@ public class DefaultPfDao implements PfDao {
         try {
             // @formatter:off
             mg.getTransaction().begin();
-            mg.createQuery(setQueryTable(DELETE_BY_CONCEPT_KEY, someClass), someClass)
+            mg.createQuery(setQueryTable(DELETE_BY_TIMESTAMP_KEY, someClass), someClass)
                     .setParameter(NAME,    key.getName())
                     .setParameter(VERSION, key.getVersion())
                     .setParameter(TIMESTAMP, key.getTimeStamp())
@@ -347,7 +354,8 @@ public class DefaultPfDao implements PfDao {
 
     @Override
     public <T extends PfConcept> List<T> getFiltered(final Class<T> someClass, final String name, final String version,
-            final Date startTime, final Date endTime, final Map<String, Object> filterMap) {
+            final Date startTime, final Date endTime, final Map<String, Object> filterMap, final String sortOrder,
+            final int getRecordNum) {
         final EntityManager mg = getEntityManager();
 
         String filterQueryString = SELECT_FROM_TABLE + WHERE;
@@ -361,6 +369,9 @@ public class DefaultPfDao implements PfDao {
                 filterQueryString = bld.toString();
             }
             filterQueryString = addKeyFilterString(filterQueryString, name, startTime, endTime);
+            if (getRecordNum > 0) {
+                filterQueryString += ORDER + " c.key.timeStamp " + sortOrder;
+            }
             TypedQuery<T> query = mg.createQuery(setQueryTable(filterQueryString, someClass), someClass);
 
             if (filterMap != null) {
@@ -383,6 +394,9 @@ public class DefaultPfDao implements PfDao {
                     query.setParameter("endTime", endTime);
                 }
             }
+            if (getRecordNum > 0) {
+                query.setMaxResults(getRecordNum);
+            }
 
             LOGGER.error("filterQueryString is  \"{}\"", filterQueryString);
             return query.getResultList();
@@ -399,6 +413,9 @@ public class DefaultPfDao implements PfDao {
         final EntityManager mg = getEntityManager();
         try {
             final T t = mg.find(someClass, key);
+            if (t != null) {
+                mg.refresh(t);
+            }
             return checkAndReturn(someClass, t);
         } finally {
             mg.close();
@@ -413,6 +430,9 @@ public class DefaultPfDao implements PfDao {
         final EntityManager mg = getEntityManager();
         try {
             final T t = mg.find(someClass, key);
+            if (t != null) {
+                mg.refresh(t);
+            }
             return checkAndReturn(someClass, t);
         } finally {
             mg.close();
@@ -427,6 +447,9 @@ public class DefaultPfDao implements PfDao {
         final EntityManager mg = getEntityManager();
         try {
             final T t = mg.find(someClass, key);
+            if (t != null) {
+                mg.refresh(t);
+            }
             return checkAndReturn(someClass, t);
         } finally {
             mg.close();