Fix Db connection issues in TOSCA control loop
[policy/models.git] / models-provider / src / main / java / org / onap / policy / models / provider / PolicyModelsProviderFactory.java
index 858b614..7cd36a5 100644 (file)
@@ -24,8 +24,7 @@ package org.onap.policy.models.provider;
 import javax.ws.rs.core.Response;
 import lombok.NonNull;
 import org.onap.policy.models.base.PfModelException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.onap.policy.models.dao.impl.ProxyDao;
 
 /**
  * A factory for creating PolicyModelsProvider objects using the default Policy Framework implementation.
@@ -33,7 +32,43 @@ import org.slf4j.LoggerFactory;
  * @author Liam Fallon (liam.fallon@est.tech)
  */
 public class PolicyModelsProviderFactory {
-    private static final Logger LOGGER = LoggerFactory.getLogger(PolicyModelsProviderFactory.class);
+
+    /**
+     * Create PolicyModelsProvider.
+     *
+     * @param pfDao the ProxyDao
+     * @param parameters the PolicyModelsProviderParameters
+     * @return the PolicyModelsProvider
+     * @throws PfModelException on errors creating an implementation of the PolicyModelProvider
+     */
+    public PolicyModelsProvider createPolicyModelsProvider(@NonNull final ProxyDao pfDao,
+            @NonNull final PolicyModelsProviderParameters parameters) throws PfModelException {
+        // Get the class for the PolicyModelsProvider
+        Class<?> implementationClass = null;
+        try {
+            // Check if the implementation class is on the classpath
+            implementationClass = Class.forName(parameters.getImplementation());
+        } catch (final Exception exc) {
+            String errorMessage = "could not find implementation of the \"PolicyModelsProvider\" interface \""
+                    + parameters.getImplementation() + "\"";
+            throw new PfModelException(Response.Status.NOT_FOUND, errorMessage, exc);
+        }
+
+        // It is, now check if it is a PolicyModelsProvider
+        if (!PolicyModelsProvider.class.isAssignableFrom(implementationClass)) {
+            String errorMessage = "the class \"" + implementationClass.getName()
+                    + "\" is not an implementation of the \"PolicyModelsProvider\" interface";
+            throw new PfModelException(Response.Status.BAD_REQUEST, errorMessage);
+        }
+
+        try {
+            return (PolicyModelsProvider) implementationClass.getConstructor(ProxyDao.class).newInstance(pfDao);
+        } catch (Exception exc) {
+            String errorMessage =
+                    "could not create an instance of PolicyModelsProvider \"" + parameters.getImplementation() + "\"";
+            throw new PfModelException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage, exc);
+        }
+    }
 
     /**
      * Creates a new PolicyModelsProvider object from its implementation.
@@ -51,7 +86,6 @@ public class PolicyModelsProviderFactory {
         } catch (final Exception exc) {
             String errorMessage = "could not find implementation of the \"PolicyModelsProvider\" interface \""
                     + parameters.getImplementation() + "\"";
-            LOGGER.warn(errorMessage);
             throw new PfModelException(Response.Status.NOT_FOUND, errorMessage, exc);
         }
 
@@ -59,7 +93,6 @@ public class PolicyModelsProviderFactory {
         if (!PolicyModelsProvider.class.isAssignableFrom(implementationClass)) {
             String errorMessage = "the class \"" + implementationClass.getName()
                     + "\" is not an implementation of the \"PolicyModelsProvider\" interface";
-            LOGGER.warn(errorMessage);
             throw new PfModelException(Response.Status.BAD_REQUEST, errorMessage);
         }
 
@@ -73,7 +106,6 @@ public class PolicyModelsProviderFactory {
         } catch (Exception exc) {
             String errorMessage =
                     "could not create an instance of PolicyModelsProvider \"" + parameters.getImplementation() + "\"";
-            LOGGER.warn(errorMessage);
             throw new PfModelException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage, exc);
         }
     }