Address more sonar issues in policy-models
[policy/models.git] / models-dao / src / main / java / org / onap / policy / models / dao / impl / DefaultPfDao.java
index e982667..ad9ef12 100644 (file)
@@ -1,7 +1,7 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2019 Nordix Foundation.
- *  Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ *  Copyright (C) 2019-2020 Nordix Foundation.
+ *  Modifications Copyright (C) 2019-2020 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -66,9 +66,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 +82,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;
 
@@ -113,7 +118,7 @@ public class DefaultPfDao implements PfDao {
         } catch (final Exception ex) {
             String errorMessage = "Creation of Policy Framework persistence unit \""
                     + daoParameters.getPersistenceUnit() + "\" failed";
-            LOGGER.warn(errorMessage, ex);
+            LOGGER.warn(errorMessage);
             throw new PfModelException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage, ex);
         }
         LOGGER.debug("Created Policy Framework persistence unit \"{}\"", daoParameters.getPersistenceUnit());
@@ -221,7 +226,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,20 +352,20 @@ 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;
 
         try {
             if (filterMap != null) {
-                StringBuilder bld = new StringBuilder(filterQueryString);
-                for (String key : filterMap.keySet()) {
-                    bld.append("c." + key + "= :" + key + AND);
-                }
-                filterQueryString = bld.toString();
+                filterQueryString = buildFilter(filterMap, filterQueryString);
             }
             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 +388,9 @@ public class DefaultPfDao implements PfDao {
                     query.setParameter("endTime", endTime);
                 }
             }
+            if (getRecordNum > 0) {
+                query.setMaxResults(getRecordNum);
+            }
 
             LOGGER.error("filterQueryString is  \"{}\"", filterQueryString);
             return query.getResultList();
@@ -391,42 +399,39 @@ public class DefaultPfDao implements PfDao {
         }
     }
 
+    private String buildFilter(final Map<String, Object> filterMap, String filterQueryString) {
+        StringBuilder bld = new StringBuilder(filterQueryString);
+        for (String key : filterMap.keySet()) {
+            bld.append("c." + key + "= :" + key + AND);
+        }
+        return bld.toString();
+    }
+
     @Override
     public <T extends PfConcept> T get(final Class<T> someClass, final PfConceptKey key) {
-        if (someClass == null) {
-            return null;
-        }
-        final EntityManager mg = getEntityManager();
-        try {
-            final T t = mg.find(someClass, key);
-            return checkAndReturn(someClass, t);
-        } finally {
-            mg.close();
-        }
+        return genericGet(someClass, key);
     }
 
     @Override
     public <T extends PfConcept> T get(final Class<T> someClass, final PfReferenceKey key) {
-        if (someClass == null) {
-            return null;
-        }
-        final EntityManager mg = getEntityManager();
-        try {
-            final T t = mg.find(someClass, key);
-            return checkAndReturn(someClass, t);
-        } finally {
-            mg.close();
-        }
+        return genericGet(someClass, key);
     }
 
     @Override
     public <T extends PfConcept> T get(final Class<T> someClass, final PfTimestampKey key) {
+        return genericGet(someClass, key);
+    }
+
+    private <T extends PfConcept> T genericGet(final Class<T> someClass, final Object key) {
         if (someClass == null) {
             return null;
         }
         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();
@@ -563,7 +568,7 @@ public class DefaultPfDao implements PfDao {
      * @return the updated query string
      */
     private <T extends PfConcept> String setQueryTable(final String queryString, final Class<T> tableClass) {
-        return queryString.replaceAll(TABLE_TOKEN, tableClass.getSimpleName());
+        return queryString.replace(TABLE_TOKEN, tableClass.getSimpleName());
     }
 
     /**