diff options
author | Straubs, Ralph (rs8887) <rs8887@att.com> | 2020-07-13 10:26:50 -0400 |
---|---|---|
committer | jhh <jorge.hernandez-herrero@att.com> | 2020-07-21 08:42:21 -0500 |
commit | 8382101e6c43578b6c78dfc10bacbd165e413c69 (patch) | |
tree | 3907554ceb32fd3fbf157e33d0c5698810aa61e8 /policy-management/src/main/java/org/onap/policy/drools/controller | |
parent | e7f57317f694c7a2a673e37dbfdd6275adcd74c0 (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')
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. * |