X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=models-provider%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fmodels%2Fprovider%2FPolicyModelsProviderFactory.java;h=f3ec6e566ac0a54e3c8f1132ecc36d6af005551a;hb=938005505883cf7a636a8840e20e3dc8a0ad9176;hp=718668b9788c5bf056f31f1585e512f331d1c0fb;hpb=cc740771e3fdf02bc6e9e02f1d4f4d6cc39afcb0;p=policy%2Fmodels.git diff --git a/models-provider/src/main/java/org/onap/policy/models/provider/PolicyModelsProviderFactory.java b/models-provider/src/main/java/org/onap/policy/models/provider/PolicyModelsProviderFactory.java index 718668b97..f3ec6e566 100644 --- a/models-provider/src/main/java/org/onap/policy/models/provider/PolicyModelsProviderFactory.java +++ b/models-provider/src/main/java/org/onap/policy/models/provider/PolicyModelsProviderFactory.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019, 2023 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. @@ -20,14 +21,10 @@ package org.onap.policy.models.provider; -import javax.ws.rs.core.Response; - +import jakarta.ws.rs.core.Response; import lombok.NonNull; - import org.onap.policy.models.base.PfModelException; -import org.onap.policy.models.dao.impl.DefaultPfDao; -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. @@ -35,7 +32,43 @@ import org.slf4j.LoggerFactory; * @author Liam Fallon (liam.fallon@est.tech) */ public class PolicyModelsProviderFactory { - private static final Logger LOGGER = LoggerFactory.getLogger(DefaultPfDao.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. @@ -53,25 +86,26 @@ public class PolicyModelsProviderFactory { } catch (final Exception exc) { String errorMessage = "could not find implementation of the \"PolicyModelsProvider\" interface \"" + parameters.getImplementation() + "\""; - LOGGER.warn(errorMessage, exc); 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.getCanonicalName() + 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); } try { - return (PolicyModelsProvider) implementationClass.getConstructor(PolicyModelsProviderParameters.class) - .newInstance(parameters); + PolicyModelsProvider provider = (PolicyModelsProvider) implementationClass + .getConstructor(PolicyModelsProviderParameters.class).newInstance(parameters); + + provider.init(); + + return provider; } catch (Exception exc) { String errorMessage = "could not create an instance of PolicyModelsProvider \"" + parameters.getImplementation() + "\""; - LOGGER.warn(errorMessage, exc); throw new PfModelException(Response.Status.INTERNAL_SERVER_ERROR, errorMessage, exc); } }