aboutsummaryrefslogtreecommitdiffstats
path: root/policy-management/src/main/java/org/onap/policy/drools/controller
diff options
context:
space:
mode:
authorStraubs, Ralph (rs8887) <rs8887@att.com>2020-07-13 10:26:50 -0400
committerjhh <jorge.hernandez-herrero@att.com>2020-07-21 08:42:21 -0500
commit8382101e6c43578b6c78dfc10bacbd165e413c69 (patch)
tree3907554ceb32fd3fbf157e33d0c5698810aa61e8 /policy-management/src/main/java/org/onap/policy/drools/controller
parente7f57317f694c7a2a673e37dbfdd6275adcd74c0 (diff)
Support multiple Policy/Controller types using 'controller.type' property
It provides a feature base to allow for custom Policy and Drools Controllers. Issue-ID: POLICY-2415 Change-Id: Ibe3f11e3ecd925537ffd03d2420bb3b8214029c9 Signed-off-by: Straubs, Ralph (rs8887) <rs8887@att.com> Signed-off-by: jhh <jorge.hernandez-herrero@att.com>
Diffstat (limited to 'policy-management/src/main/java/org/onap/policy/drools/controller')
-rw-r--r--policy-management/src/main/java/org/onap/policy/drools/controller/DroolsControllerFactory.java7
-rw-r--r--policy-management/src/main/java/org/onap/policy/drools/controller/IndexedDroolsControllerFactory.java51
2 files changed, 49 insertions, 9 deletions
diff --git a/policy-management/src/main/java/org/onap/policy/drools/controller/DroolsControllerFactory.java b/policy-management/src/main/java/org/onap/policy/drools/controller/DroolsControllerFactory.java
index 7652a671..a355f6f7 100644
--- a/policy-management/src/main/java/org/onap/policy/drools/controller/DroolsControllerFactory.java
+++ b/policy-management/src/main/java/org/onap/policy/drools/controller/DroolsControllerFactory.java
@@ -1,8 +1,8 @@
/*
* ============LICENSE_START=======================================================
- * policy-management
+ * ONAP
* ================================================================================
- * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-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.
@@ -49,6 +49,7 @@ public interface DroolsControllerFactory {
/**
* Explicit construction of a Drools Controller.
*
+ * @param properties properties containing initialization parameters
* @param groupId maven group id of drools artifact
* @param artifactId maven artifact id of drools artifact
* @param version maven version id of drools artifact
@@ -59,7 +60,7 @@ public interface DroolsControllerFactory {
* @throws IllegalArgumentException with invalid parameters
* @throws LinkageError Failure to link rules and models in Drools Libraries
*/
- DroolsController build(String groupId, String artifactId, String version,
+ DroolsController build(Properties properties, String groupId, String artifactId, String version,
List<TopicCoderFilterConfiguration> decoderConfigurations,
List<TopicCoderFilterConfiguration> encoderConfigurations) throws LinkageError;
diff --git a/policy-management/src/main/java/org/onap/policy/drools/controller/IndexedDroolsControllerFactory.java b/policy-management/src/main/java/org/onap/policy/drools/controller/IndexedDroolsControllerFactory.java
index 6d42ba53..e8234a46 100644
--- a/policy-management/src/main/java/org/onap/policy/drools/controller/IndexedDroolsControllerFactory.java
+++ b/policy-management/src/main/java/org/onap/policy/drools/controller/IndexedDroolsControllerFactory.java
@@ -24,6 +24,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Properties;
import org.onap.policy.common.endpoints.event.comm.Topic;
import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;
@@ -32,6 +33,8 @@ import org.onap.policy.common.endpoints.event.comm.TopicSource;
import org.onap.policy.common.endpoints.properties.PolicyEndPointProperties;
import org.onap.policy.drools.controller.internal.MavenDroolsController;
import org.onap.policy.drools.controller.internal.NullDroolsController;
+import org.onap.policy.drools.features.DroolsControllerFeatureApi;
+import org.onap.policy.drools.features.DroolsControllerFeatureApiConstants;
import org.onap.policy.drools.properties.DroolsPropertyConstants;
import org.onap.policy.drools.protocol.coders.JsonProtocolFilter;
import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration;
@@ -48,12 +51,12 @@ class IndexedDroolsControllerFactory implements DroolsControllerFactory {
/**
* logger.
*/
- private static Logger logger = LoggerFactory.getLogger(IndexedDroolsControllerFactory.class);
+ private static final Logger logger = LoggerFactory.getLogger(IndexedDroolsControllerFactory.class);
/**
* Policy Controller Name Index.
*/
- protected HashMap<String, DroolsController> droolsControllers = new HashMap<>();
+ protected Map<String, DroolsController> droolsControllers = new HashMap<>();
/**
* Null Drools Controller.
@@ -97,11 +100,12 @@ class IndexedDroolsControllerFactory implements DroolsControllerFactory {
List<TopicCoderFilterConfiguration> topics2DecodedClasses2Filters = codersAndFilters(properties, eventSources);
List<TopicCoderFilterConfiguration> topics2EncodedClasses2Filters = codersAndFilters(properties, eventSinks);
- return this.build(groupId, artifactId, version, topics2DecodedClasses2Filters, topics2EncodedClasses2Filters);
+ return this.build(properties, groupId, artifactId, version,
+ topics2DecodedClasses2Filters, topics2EncodedClasses2Filters);
}
@Override
- public DroolsController build(String newGroupId, String newArtifactId, String newVersion,
+ public DroolsController build(Properties properties, String newGroupId, String newArtifactId, String newVersion,
List<TopicCoderFilterConfiguration> decoderConfigurations,
List<TopicCoderFilterConfiguration> encoderConfigurations) throws LinkageError {
@@ -148,16 +152,51 @@ class IndexedDroolsControllerFactory implements DroolsControllerFactory {
/* new drools controller */
- DroolsController controller = new MavenDroolsController(newGroupId, newArtifactId, newVersion,
- decoderConfigurations, encoderConfigurations);
+ DroolsController controller = null;
+ for (DroolsControllerFeatureApi feature: getProviders()) {
+ try {
+ controller = feature.beforeInstance(properties,
+ newGroupId, newArtifactId, newVersion,
+ decoderConfigurations, encoderConfigurations);
+ if (controller != null) {
+ logger.info("feature {} ({}) beforeInstance() has intercepted drools controller {}:{}:{}",
+ feature.getName(), feature.getSequenceNumber(),
+ newGroupId, newArtifactId, newVersion);
+ break;
+ }
+ } catch (RuntimeException r) {
+ logger.error("feature {} ({}) beforeInstance() of drools controller {}:{}:{} failed",
+ feature.getName(), feature.getSequenceNumber(),
+ newGroupId, newArtifactId, newVersion, r);
+ }
+ }
+
+ if (controller == null) {
+ controller = new MavenDroolsController(newGroupId, newArtifactId, newVersion, decoderConfigurations,
+ encoderConfigurations);
+ }
synchronized (this) {
droolsControllers.put(controllerId, controller);
}
+ for (DroolsControllerFeatureApi feature: getProviders()) {
+ try {
+ feature.afterInstance(controller, properties);
+ } catch (RuntimeException r) {
+ logger.error("feature {} ({}) afterInstance() of drools controller {}:{}:{} failed",
+ feature.getName(), feature.getSequenceNumber(),
+ newGroupId, newArtifactId, newVersion, r);
+ }
+ }
+
return controller;
}
+ protected List<DroolsControllerFeatureApi> getProviders() {
+ return DroolsControllerFeatureApiConstants.getProviders().getList();
+ }
+
/**
* find out decoder classes and filters.
*