summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--policy-management/src/main/java/org/onap/policy/drools/controller/internal/MavenDroolsController.java50
-rw-r--r--policy-management/src/main/java/org/onap/policy/drools/features/DroolsControllerFeatureAPI.java56
2 files changed, 91 insertions, 15 deletions
diff --git a/policy-management/src/main/java/org/onap/policy/drools/controller/internal/MavenDroolsController.java b/policy-management/src/main/java/org/onap/policy/drools/controller/internal/MavenDroolsController.java
index 8a0073c0..c8c73689 100644
--- a/policy-management/src/main/java/org/onap/policy/drools/controller/internal/MavenDroolsController.java
+++ b/policy-management/src/main/java/org/onap/policy/drools/controller/internal/MavenDroolsController.java
@@ -20,12 +20,13 @@
package org.onap.policy.drools.controller.internal;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-
import org.apache.commons.collections4.queue.CircularFifoQueue;
import org.drools.core.ClassObjectFilter;
import org.kie.api.definition.KiePackage;
@@ -34,13 +35,12 @@ import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.rule.FactHandle;
import org.kie.api.runtime.rule.QueryResults;
import org.kie.api.runtime.rule.QueryResultsRow;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.onap.policy.drools.controller.DroolsController;
import org.onap.policy.drools.core.PolicyContainer;
import org.onap.policy.drools.core.PolicySession;
import org.onap.policy.drools.core.jmx.PdpJmx;
import org.onap.policy.drools.event.comm.TopicSink;
+import org.onap.policy.drools.features.DroolsControllerFeatureAPI;
import org.onap.policy.drools.protocol.coders.EventProtocolCoder;
import org.onap.policy.drools.protocol.coders.JsonProtocolFilter;
import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration;
@@ -48,9 +48,8 @@ import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration.Cust
import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration.CustomJacksonCoder;
import org.onap.policy.drools.protocol.coders.TopicCoderFilterConfiguration.PotentialCoderFilter;
import org.onap.policy.drools.utils.ReflectionUtil;
-
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Maven-based Drools Controller that interacts with the
@@ -118,8 +117,8 @@ public class MavenDroolsController implements DroolsController {
* @param groupId maven group id
* @param artifactId maven artifact id
* @param version maven version
- * @param decoderConfiguration list of topic -> decoders -> filters mapping
- * @param encoderConfiguration list of topic -> encoders -> filters mapping
+ * @param decoderConfigurations list of topic -> decoders -> filters mapping
+ * @param encoderConfigurations list of topic -> encoders -> filters mapping
*
* @throws IllegalArgumentException invalid arguments passed in
*/
@@ -148,8 +147,8 @@ public class MavenDroolsController implements DroolsController {
/**
* init encoding/decoding configuration
- * @param decoderConfiguration list of topic -> decoders -> filters mapping
- * @param encoderConfiguration list of topic -> encoders -> filters mapping
+ * @param decoderConfigurations list of topic -> decoders -> filters mapping
+ * @param encoderConfigurations list of topic -> encoders -> filters mapping
*/
protected void init(List<TopicCoderFilterConfiguration> decoderConfigurations,
List<TopicCoderFilterConfiguration> encoderConfigurations) {
@@ -227,7 +226,7 @@ public class MavenDroolsController implements DroolsController {
* Note this is critical to be done after the Policy Container is
* instantiated to be able to fetch the corresponding classes.
*
- * @param decoderConfiguration list of topic -> decoders -> filters mapping
+ * @param coderConfigurations list of topic -> decoders -> filters mapping
*/
protected void initCoders(List<TopicCoderFilterConfiguration> coderConfigurations,
boolean decoder) {
@@ -512,11 +511,32 @@ public class MavenDroolsController implements DroolsController {
// Broadcast
if (logger.isInfoEnabled())
- logger.info(this + "BROADCAST-INJECT of " + event + " FROM " + topic + " INTO " + this.policyContainer.getName());
-
- if (!this.policyContainer.insertAll(anEvent))
+ logger.info(this + "BROADCAST-INJECT of " + event + " FROM " + topic + " INTO " + this.policyContainer.getName());
+
+ for (DroolsControllerFeatureAPI feature : DroolsControllerFeatureAPI.providers.getList()) {
+ try {
+ if (feature.beforeInsert(this, anEvent))
+ return true;
+ } catch (Exception e) {
+ logger.error("{}: feature {} before-insert failure because of {}",
+ this, feature.getClass().getName(), e.getMessage(), e);
+ }
+ }
+
+ boolean successInject = this.policyContainer.insertAll(anEvent);
+ if (!successInject)
logger.warn(this + "Failed to inject into PolicyContainer " + this.getSessionNames());
-
+
+ for (DroolsControllerFeatureAPI feature : DroolsControllerFeatureAPI.providers.getList()) {
+ try {
+ if (feature.afterInsert(this, anEvent, successInject))
+ return true;
+ } catch (Exception e) {
+ logger.error("{}: feature {} after-insert failure because of {}",
+ this, feature.getClass().getName(), e.getMessage(), e);
+ }
+ }
+
return true;
}
diff --git a/policy-management/src/main/java/org/onap/policy/drools/features/DroolsControllerFeatureAPI.java b/policy-management/src/main/java/org/onap/policy/drools/features/DroolsControllerFeatureAPI.java
new file mode 100644
index 00000000..dbcdb943
--- /dev/null
+++ b/policy-management/src/main/java/org/onap/policy/drools/features/DroolsControllerFeatureAPI.java
@@ -0,0 +1,56 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP
+ * ================================================================================
+ * Copyright (C) 2018 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.features;
+
+import org.onap.policy.drools.controller.DroolsController;
+import org.onap.policy.drools.utils.OrderedService;
+import org.onap.policy.drools.utils.OrderedServiceImpl;
+
+/**
+ * Drools Controller Feature API. Hooks into the Drools Controller operations.
+ */
+public interface DroolsControllerFeatureAPI extends OrderedService {
+
+ /**
+ * intercepts before the Drools Controller gives the Policy Container a fact to
+ * insert into its Policy Sessions
+ *
+ * @return true if this feature intercepts and takes ownership
+ * of the operation preventing the invocation of
+ * lower priority features. False, otherwise.
+ */
+ default boolean beforeInsert(DroolsController controller, Object fact) {return false;}
+
+ /**
+ * called after a fact is injected into the Policy Container
+ *
+ * @return true if this feature intercepts and takes ownership
+ * of the operation preventing the invocation of
+ * lower priority features. False, otherwise.
+ */
+ default boolean afterInsert(DroolsController controller, Object fact, boolean successInsert) {return false;}
+
+ /**
+ * Feature providers implementing this interface
+ */
+ public static final OrderedServiceImpl<DroolsControllerFeatureAPI> providers =
+ new OrderedServiceImpl<DroolsControllerFeatureAPI>(DroolsControllerFeatureAPI.class);
+}