X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=models-dao%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fmodels%2Fdao%2FPfDao.java;h=21f3a7fa6015338962e770a3d71e77e762a81ace;hb=389c85c8e7213c10c17896f4c63d94e2b5e9d27a;hp=692aa08bf49a17e3945ade2b54a44a5ed2b85133;hpb=4fab7a327737ebdfaf7b55c39c49f0239ff627c8;p=policy%2Fmodels.git diff --git a/models-dao/src/main/java/org/onap/policy/models/dao/PfDao.java b/models-dao/src/main/java/org/onap/policy/models/dao/PfDao.java index 692aa08bf..21f3a7fa6 100644 --- a/models-dao/src/main/java/org/onap/policy/models/dao/PfDao.java +++ b/models-dao/src/main/java/org/onap/policy/models/dao/PfDao.java @@ -1,6 +1,8 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2021, 2024 Nordix Foundation. + * Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved. + * Modifications Copyright (C) 2022 Bell Canada. 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. @@ -21,13 +23,12 @@ package org.onap.policy.models.dao; import java.util.Collection; -import java.util.Date; import java.util.List; -import java.util.Map; import org.onap.policy.models.base.PfConcept; import org.onap.policy.models.base.PfConceptKey; import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.base.PfReferenceKey; +import org.onap.policy.models.base.PfReferenceTimestampKey; import org.onap.policy.models.base.PfTimestampKey; /** @@ -35,6 +36,54 @@ import org.onap.policy.models.base.PfTimestampKey; * to and from databases using JDBC. */ public interface PfDao { + String NAME = "name"; + String VERSION = "version"; + String TIMESTAMP = "timeStamp"; + String PARENT_NAME = "parentname"; + String PARENT_VERSION = "parentversion"; + String LOCAL_NAME = "localname"; + + String TABLE_TOKEN = "__TABLE__"; + + String DELETE_FROM_TABLE = "DELETE FROM __TABLE__ c"; + + String SELECT_FROM_TABLE = "SELECT c FROM __TABLE__ c"; + + String WHERE = " WHERE "; + String AND = " AND "; + String ORDER_BY = " ORDER BY c."; + + String NAME_FILTER = "c.key.name = :name"; + String VERSION_FILTER = "c.key.version = :version"; + String TIMESTAMP_FILTER = "c.key.timeStamp = :timeStamp"; + String PARENT_NAME_FILTER = "c.key.parentKeyName = :parentname"; + String PARENT_VERSION_FILTER = "c.key.parentKeyVersion = :parentversion"; + String LOCAL_NAME_FILTER = "c.key.localName = :localname"; + + String CLONE_ERR_MSG = "Could not clone object of class \"{}\""; + + String DELETE_BY_CONCEPT_KEY = + DELETE_FROM_TABLE + WHERE + NAME_FILTER + AND + VERSION_FILTER; + + String DELETE_BY_TIMESTAMP_KEY = + DELETE_FROM_TABLE + WHERE + NAME_FILTER + AND + VERSION_FILTER + AND + TIMESTAMP_FILTER; + + String DELETE_BY_REFERENCE_KEY = + DELETE_FROM_TABLE + WHERE + PARENT_NAME_FILTER + AND + PARENT_VERSION_FILTER + AND + LOCAL_NAME_FILTER; + + String SELECT_ALL_FOR_PARENT = + SELECT_FROM_TABLE + WHERE + PARENT_NAME_FILTER + AND + PARENT_VERSION_FILTER; + + String SELECT_ALL_VERSIONS_FOR_PARENT = + SELECT_FROM_TABLE + WHERE + PARENT_NAME_FILTER; + + String SELECT_ALL_VERSIONS = SELECT_FROM_TABLE + WHERE + NAME_FILTER; + + String SELECT_BY_CONCEPT_KEY = + SELECT_FROM_TABLE + WHERE + NAME_FILTER + AND + VERSION_FILTER; + + String SELECT_BY_REFERENCE_KEY = + SELECT_FROM_TABLE + WHERE + PARENT_NAME_FILTER + AND + PARENT_VERSION_FILTER + AND + LOCAL_NAME_FILTER; /** * Initialize the Policy Framework DAO with the given parameters. @@ -50,7 +99,7 @@ public interface PfDao { void close(); /** - * Creates an Policy Framework concept on the database. + * Creates a Policy Framework concept on the database. * * @param the type of the object to create, a subclass of {@link PfConcept} * @param obj the object to create @@ -58,7 +107,7 @@ public interface PfDao { void create(T obj); /** - * Delete an Policy Framework concept on the database. + * Delete a Policy Framework concept on the database. * * @param the type of the object to delete, a subclass of {@link PfConcept} * @param obj the object to delete @@ -66,28 +115,28 @@ public interface PfDao { void delete(T obj); /** - * Delete an Policy Framework concept on the database. + * Delete a Policy Framework concept on the database. * - * @param the type of the object to delete, a subclass of {@link PfConcept} + * @param the type of the object to delete, a subclass of {@link PfConcept} * @param someClass the class of the object to delete, a subclass of {@link PfConcept} - * @param key the key of the object to delete + * @param key the key of the object to delete */ void delete(Class someClass, PfConceptKey key); /** - * Delete an Policy Framework concept on the database. + * Delete a Policy Framework concept on the database. * - * @param the type of the object to delete, a subclass of {@link PfConcept} + * @param the type of the object to delete, a subclass of {@link PfConcept} * @param someClass the class of the object to delete, a subclass of {@link PfConcept} - * @param key the key of the object to delete + * @param key the key of the object to delete */ void delete(Class someClass, PfReferenceKey key); /** - * Delete an Policy Framework concept on the database. + * Delete a Policy Framework concept on the database. * - * @param the type of the object to delete, a subclass of {@link PfConcept} - * @param someClass the class of the object to delete, a subclass of {@link PfConcept} + * @param the type of the object to delete, a subclass of {@link PfConcept} + * @param someClass the class of the object to delete, a subclass of {@link PfConcept} * @param timeStampKey the PfTimestampKey of the object to delete */ void delete(Class someClass, PfTimestampKey timeStampKey); @@ -95,7 +144,7 @@ public interface PfDao { /** * Create a collection of objects in the database. * - * @param the type of the object to create, a subclass of {@link PfConcept} + * @param the type of the object to create, a subclass of {@link PfConcept} * @param objs the objects to create */ void createCollection(Collection objs); @@ -103,7 +152,7 @@ public interface PfDao { /** * Delete a collection of objects in the database. * - * @param the type of the objects to delete, a subclass of {@link PfConcept} + * @param the type of the objects to delete, a subclass of {@link PfConcept} * @param objs the objects to delete */ void deleteCollection(Collection objs); @@ -111,9 +160,9 @@ public interface PfDao { /** * Delete a collection of objects in the database referred to by concept key. * - * @param the type of the objects to delete, a subclass of {@link PfConcept} + * @param the type of the objects to delete, a subclass of {@link PfConcept} * @param someClass the class of the objects to delete, a subclass of {@link PfConcept} - * @param keys the keys of the objects to delete + * @param keys the keys of the objects to delete * @return the number of objects deleted */ int deleteByConceptKey(Class someClass, Collection keys); @@ -121,9 +170,9 @@ public interface PfDao { /** * Delete a collection of objects in the database referred to by reference key. * - * @param the type of the objects to delete, a subclass of {@link PfConcept} + * @param the type of the objects to delete, a subclass of {@link PfConcept} * @param someClass the class of the objects to delete, a subclass of {@link PfConcept} - * @param keys the keys of the objects to delete + * @param keys the keys of the objects to delete * @return the number of objects deleted */ int deleteByReferenceKey(Class someClass, Collection keys); @@ -131,7 +180,7 @@ public interface PfDao { /** * Delete all objects of a given class in the database. * - * @param the type of the objects to delete, a subclass of {@link PfConcept} + * @param the type of the objects to delete, a subclass of {@link PfConcept} * @param someClass the class of the objects to delete, a subclass of {@link PfConcept} */ void deleteAll(Class someClass); @@ -139,12 +188,12 @@ public interface PfDao { /** * Get an object from the database, referred to by concept key. * - * @param the type of the object to get, a subclass of {@link PfConcept} + * @param the type of the object to get, a subclass of {@link PfConcept} * @param someClass the class of the object to get, a subclass of {@link PfConcept}, if name is null, all concepts - * of type T are returned, if name is not null and version is null, all versions of that concept matching the - * name are returned. - * @param name the name of the object to get, null returns all objects - * @param version the version the object to get, null returns all objects for a specified name + * of type T are returned, if name is not null and version is null, all versions of that concept + * matching the name are returned. + * @param name the name of the object to get, null returns all objects + * @param version the version the object to get, null returns all objects for a specified name * @return the objects that was retrieved from the database */ List getFiltered(Class someClass, String name, String version); @@ -152,28 +201,21 @@ public interface PfDao { /** * Get an object from the database, referred to by concept key. * - * @param the type of the object to get, a subclass of {@link PfConcept} - * @param someClass the class of the object to get, a subclass of {@link PfConcept}, if name is null, all concepts - * of type T are returned, if name is not null and version is null, all versions of that concept matching the - * name are returned. - * @param name the name of the object to get, null returns all objects - * @param version the version the object to get, null returns all objects for a specified name - * @param startTime the start timeStamp to filter from database, filter rule: startTime <= filteredRecord timeStamp - * <= endTime. null for ignore start time. - * @param endTime the end timeStamp to filter from database, filter rule: startTime <= filteredRecord timeStamp <= - * endTime. null for ignore end time - * @filterMap Map store extra key/value used to filter from database, can be null. + * @param the type of the object to get, a subclass of {@link PfConcept} + * @param someClass the class of the object to get, a subclass of {@link PfConcept}, if name is null, all + * concepts of type T are returned, if name is not null and version is null, all versions of + * that concept matching the name are returned. + * @param filterParams filter parameters * @return the objects that was retrieved from the database */ - List getFiltered(Class someClass, String name, String version, Date startTime, - Date endTime, Map filterMap); + List getFiltered(Class someClass, PfFilterParametersIntfc filterParams); /** * Get an object from the database, referred to by concept key. * - * @param the type of the object to get, a subclass of {@link PfConcept} + * @param the type of the object to get, a subclass of {@link PfConcept} * @param someClass the class of the object to get, a subclass of {@link PfConcept} - * @param key the PfConceptKey of the object to get + * @param key the PfConceptKey of the object to get * @return the object that was retrieved from the database */ T get(Class someClass, PfConceptKey key); @@ -181,9 +223,9 @@ public interface PfDao { /** * Get an object from the database, referred to by reference key. * - * @param the type of the object to get, a subclass of {@link PfConcept} + * @param the type of the object to get, a subclass of {@link PfConcept} * @param someClass the class of the object to get, a subclass of {@link PfConcept} - * @param key the PfReferenceKey of the object to get + * @param key the PfReferenceKey of the object to get * @return the object that was retrieved from the database or null if the object was not retrieved */ T get(Class someClass, PfReferenceKey key); @@ -191,17 +233,27 @@ public interface PfDao { /** * Get an object from the database, referred to by reference key. * - * @param the type of the object to get, a subclass of {@link PfConcept} - * @param someClass the class of the object to get, a subclass of {@link PfConcept} + * @param the type of the object to get, a subclass of {@link PfConcept} + * @param someClass the class of the object to get, a subclass of {@link PfConcept} * @param timestampKey the PfTimestampKey of the object to get * @return the object that was retrieved from the database or null if the object was not retrieved */ T get(Class someClass, PfTimestampKey timestampKey); + /** + * Get an object from the database, referred to by reference timestamp key. + * + * @param the type of the object to get, a subclass of {@link PfConcept} + * @param someClass the class of the object to get, a subclass of {@link PfConcept} + * @param key the PfReferenceTimestampKey of the object to get + * @return the object that was retrieved from the database or null if the object was not retrieved + */ + T get(Class someClass, PfReferenceTimestampKey key); + /** * Get all the objects in the database of a given type. * - * @param the type of the objects to get, a subclass of {@link PfConcept} + * @param the type of the objects to get, a subclass of {@link PfConcept} * @param someClass the class of the objects to get, a subclass of {@link PfConcept} * @return the objects or null if no objects were retrieved */ @@ -210,7 +262,7 @@ public interface PfDao { /** * Get all the objects in the database of the given type with the given parent concept key. * - * @param the type of the objects to get, a subclass of {@link PfConcept} + * @param the type of the objects to get, a subclass of {@link PfConcept} * @param someClass the class of the objects to get, a subclass of {@link PfConcept} * @param parentKey the parent key of the concepts to get * @return the all @@ -220,17 +272,38 @@ public interface PfDao { /** * Get all the objects in the database of a given type. * - * @param the type of the objects to get, a subclass of {@link PfConcept} + * @param the type of the objects to get, a subclass of {@link PfConcept} + * @param someClass the class of the objects to get, a subclass of {@link PfConcept} + * @param orderBy field from class to order results by + * @param numRecords number of records to be retrieved + * @return the objects or null if no objects were retrieved + */ + List getAll(Class someClass, String orderBy, Integer numRecords); + + /** + * Get all the objects in the database of a given type. + * + * @param the type of the objects to get, a subclass of {@link PfConcept} * @param someClass the class of the objects to get, a subclass of {@link PfConcept} - * @param name the name of the concepts for which to get all versions + * @param name the name of the concepts for which to get all versions * @return the objects or null if no objects were retrieved */ List getAllVersions(Class someClass, final String name); + /** + * Get all the objects in the database of a given type. + * + * @param the type of the objects to get, a subclass of {@link PfConcept} + * @param someClass the class of the objects to get, a subclass of {@link PfConcept} + * @param parentKeyName the name of the concepts for which to get all versions + * @return the objects or null if no objects were retrieved + */ + List getAllVersionsByParent(Class someClass, final String parentKeyName); + /** * Get a concept from the database with the given concept key. * - * @param the type of the object to get, a subclass of {@link PfConcept} + * @param the type of the object to get, a subclass of {@link PfConcept} * @param someClass the class of the object to get, a subclass of {@link PfConcept} * @param conceptId the concept key of the concept to get * @return the concept that matches the key or null if the concept is not retrieved @@ -240,7 +313,7 @@ public interface PfDao { /** * Get a concept from the database with the given reference key. * - * @param the type of the object to get, a subclass of {@link PfConcept} + * @param the type of the object to get, a subclass of {@link PfConcept} * @param someClass the class of the object to get, a subclass of {@link PfConcept} * @param conceptId the concept key of the concept to get * @return the concept that matches the key or null if the concept is not retrieved @@ -250,7 +323,7 @@ public interface PfDao { /** * Get the number of instances of a concept that exist in the database. * - * @param the type of the object to get, a subclass of {@link PfConcept} + * @param the type of the object to get, a subclass of {@link PfConcept} * @param someClass the class of the object to get, a subclass of {@link PfConcept} * @return the number of instances of the concept in the database */