diff options
Diffstat (limited to 'policy-management/src/main/java/org/onap/policy/drools/system/PolicyControllerFactory.java')
-rw-r--r-- | policy-management/src/main/java/org/onap/policy/drools/system/PolicyControllerFactory.java | 376 |
1 files changed, 8 insertions, 368 deletions
diff --git a/policy-management/src/main/java/org/onap/policy/drools/system/PolicyControllerFactory.java b/policy-management/src/main/java/org/onap/policy/drools/system/PolicyControllerFactory.java index 8baf667a..05f15ead 100644 --- a/policy-management/src/main/java/org/onap/policy/drools/system/PolicyControllerFactory.java +++ b/policy-management/src/main/java/org/onap/policy/drools/system/PolicyControllerFactory.java @@ -7,9 +7,9 @@ * 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. @@ -20,19 +20,11 @@ package org.onap.policy.drools.system; -import com.fasterxml.jackson.annotation.JsonIgnore; - -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Properties; -import org.onap.policy.common.gson.annotation.GsonJsonIgnore; import org.onap.policy.drools.controller.DroolsController; -import org.onap.policy.drools.features.PolicyControllerFeatureAPI; +import org.onap.policy.drools.features.PolicyControllerFeatureApi; import org.onap.policy.drools.protocol.configuration.DroolsConfiguration; -import org.onap.policy.drools.system.internal.AggregatedPolicyController; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** @@ -149,21 +141,21 @@ public interface PolicyControllerFactory { /** * get features attached to the Policy Controllers. - * + * * @return list of features */ - List<PolicyControllerFeatureAPI> getFeatureProviders(); + List<PolicyControllerFeatureApi> getFeatureProviders(); /** * get named feature attached to the Policy Controllers. - * + * * @return the feature */ - PolicyControllerFeatureAPI getFeatureProvider(String featureName); + PolicyControllerFeatureApi getFeatureProvider(String featureName); /** * get features attached to the Policy Controllers. - * + * * @return list of features */ List<String> getFeatures(); @@ -175,355 +167,3 @@ public interface PolicyControllerFactory { */ List<PolicyController> inventory(); } - -/** - * Factory of Policy Controllers indexed by the name of the Policy Controller. - */ -class IndexedPolicyControllerFactory implements PolicyControllerFactory { - // get an instance of logger - private static final Logger logger = LoggerFactory.getLogger(PolicyControllerFactory.class); - - /** - * Policy Controller Name Index. - */ - private final HashMap<String,PolicyController> policyControllers = - new HashMap<>(); - - /** - * Group/Artifact Ids Index. - */ - private final HashMap<String,PolicyController> coordinates2Controller = - new HashMap<>(); - - /** - * produces key for indexing controller names. - * - * @param groupId group id - * @param artifactId artifact id - * @return index key - */ - private String toKey(String groupId, String artifactId) { - return groupId + ":" + artifactId; - } - - /** - * {@inheritDoc}. - */ - @Override - public synchronized PolicyController build(String name, Properties properties) { - - if (this.policyControllers.containsKey(name)) { - return this.policyControllers.get(name); - } - - /* A PolicyController does not exist */ - - PolicyController controller = newPolicyController(name, properties); - - String coordinates = toKey(controller.getDrools().getGroupId(), - controller.getDrools().getArtifactId()); - - this.policyControllers.put(name, controller); - - - if (controller.getDrools().isBrained()) { - this.coordinates2Controller.put(coordinates, controller); - } - - return controller; - } - - /** - * {@inheritDoc}. - */ - @Override - public synchronized PolicyController patch(String name, DroolsConfiguration droolsConfig) { - - if (name == null || name.isEmpty() || !this.policyControllers.containsKey(name)) { - throw makeArgEx(name); - } - - PolicyController controller = this.get(name); - - if (controller == null) { - logger.warn("A POLICY CONTROLLER of name {} does not exist for patch operation: {}", name, droolsConfig); - - throw new IllegalArgumentException("Not a valid controller of name " + name); - } - - this.patch(controller, droolsConfig); - - logger.info("UPDATED drools configuration: {} on {}", droolsConfig, this); - - return controller; - } - - - /** - * {@inheritDoc}. - */ - @Override - public void patch(PolicyController controller, DroolsConfiguration droolsConfig) { - - if (controller == null) { - throw new IllegalArgumentException("Not a valid controller: null"); - } - - if (droolsConfig == null) { - throw new IllegalArgumentException("Invalid Drools Configuration"); - } - - if (!controller.updateDrools(droolsConfig)) { - logger.warn("Cannot update drools configuration: {} on {}", droolsConfig, this); - throw new IllegalArgumentException("Cannot update drools configuration Drools Configuration"); - } - - logger.info("UPDATED drools configuration: {} on {}", droolsConfig, this); - - String coordinates = toKey(controller.getDrools().getGroupId(), - controller.getDrools().getArtifactId()); - - if (controller.getDrools().isBrained()) { - this.coordinates2Controller.put(coordinates, controller); - } - - } - - /** - * {@inheritDoc}. - */ - @Override - public void shutdown(String controllerName) { - - if (controllerName == null || controllerName.isEmpty()) { - throw makeArgEx(controllerName); - } - - synchronized (this) { - if (!this.policyControllers.containsKey(controllerName)) { - return; - } - - PolicyController controller = this.policyControllers.get(controllerName); - this.shutdown(controller); - } - } - - /** - * {@inheritDoc}. - */ - @Override - public void shutdown(PolicyController controller) { - this.unmanage(controller); - controller.shutdown(); - } - - /** - * {@inheritDoc}. - */ - @Override - public void shutdown() { - List<PolicyController> controllers = this.inventory(); - for (PolicyController controller: controllers) { - controller.shutdown(); - } - - synchronized (this) { - this.policyControllers.clear(); - this.coordinates2Controller.clear(); - } - } - - /** - * unmanage the controller. - * - * @param controller controller - * @throws IllegalArgumentException exception - */ - private void unmanage(PolicyController controller) { - PolicyController tempController = controller; - if (tempController == null) { - throw new IllegalArgumentException("Invalid Controller"); - } - - synchronized (this) { - if (!this.policyControllers.containsKey(tempController.getName())) { - return; - } - tempController = this.policyControllers.remove(tempController.getName()); - - String coordinates = toKey(tempController.getDrools().getGroupId(), - tempController.getDrools().getArtifactId()); - this.coordinates2Controller.remove(coordinates); - } - } - - /** - * {@inheritDoc}. - */ - @Override - public void destroy(String controllerName) { - - if (controllerName == null || controllerName.isEmpty()) { - throw makeArgEx(controllerName); - } - - synchronized (this) { - if (!this.policyControllers.containsKey(controllerName)) { - return; - } - - PolicyController controller = this.policyControllers.get(controllerName); - this.destroy(controller); - } - } - - /** - * {@inheritDoc}. - */ - @Override - public void destroy(PolicyController controller) { - this.unmanage(controller); - controller.halt(); - } - - /** - * {@inheritDoc}. - */ - @Override - public void destroy() { - List<PolicyController> controllers = this.inventory(); - for (PolicyController controller: controllers) { - controller.halt(); - } - - synchronized (this) { - this.policyControllers.clear(); - this.coordinates2Controller.clear(); - } - } - - /** - * {@inheritDoc}. - */ - @Override - public PolicyController get(String name) { - - if (name == null || name.isEmpty()) { - throw makeArgEx(name); - } - - synchronized (this) { - if (this.policyControllers.containsKey(name)) { - return this.policyControllers.get(name); - } else { - throw makeArgEx(name); - } - } - } - - /** - * {@inheritDoc}. - */ - @Override - public PolicyController get(String groupId, String artifactId) { - - if (groupId == null || groupId.isEmpty() - || artifactId == null || artifactId.isEmpty()) { - throw new IllegalArgumentException("Invalid group/artifact ids"); - } - - synchronized (this) { - String key = toKey(groupId,artifactId); - if (this.coordinates2Controller.containsKey(key)) { - return this.coordinates2Controller.get(key); - } else { - throw makeArgEx(key); - } - } - } - - /** - * {@inheritDoc}. - */ - @Override - public PolicyController get(DroolsController droolsController) { - - if (droolsController == null) { - throw new IllegalArgumentException("No Drools Controller provided"); - } - - synchronized (this) { - String key = toKey(droolsController.getGroupId(), droolsController.getArtifactId()); - if (this.coordinates2Controller.containsKey(key)) { - return this.coordinates2Controller.get(key); - } else { - logger.error("Drools Controller not associated with Policy Controller {}:{}", droolsController, this); - throw new IllegalStateException("Drools Controller not associated with Policy Controller " - + droolsController + ":" + this); - } - } - } - - /** - * {@inheritDoc}. - */ - @Override - public List<PolicyController> inventory() { - return new ArrayList<>(this.policyControllers.values()); - } - - /** - * {@inheritDoc}. - */ - @Override - public List<String> getFeatures() { - List<String> features = new ArrayList<>(); - for (PolicyControllerFeatureAPI feature : getProviders()) { - features.add(feature.getName()); - } - return features; - } - - /** - * {@inheritDoc}. - */ - @JsonIgnore - @GsonJsonIgnore - @Override - public List<PolicyControllerFeatureAPI> getFeatureProviders() { - return getProviders(); - } - - /** - * {@inheritDoc}. - */ - @Override - public PolicyControllerFeatureAPI getFeatureProvider(String featureName) { - if (featureName == null || featureName.isEmpty()) { - throw new IllegalArgumentException("A feature name must be provided"); - } - - for (PolicyControllerFeatureAPI feature : getProviders()) { - if (feature.getName().equals(featureName)) { - return feature; - } - } - - throw new IllegalArgumentException("Invalid Feature Name: " + featureName); - } - - private IllegalArgumentException makeArgEx(String argName) { - return new IllegalArgumentException("Invalid " + argName); - } - - // these methods can be overridden by junit tests - - protected PolicyController newPolicyController(String name, Properties properties) { - return new AggregatedPolicyController(name, properties); - } - - protected List<PolicyControllerFeatureAPI> getProviders() { - return PolicyControllerFeatureAPI.providers.getList(); - } -} |