/*-
* ============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");
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.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.
* @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.
} 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);
}
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);
}
} 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);
}
}