+
+ /**
+ * 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);
+ }
+ }