Fix basic Java issue in pdp drools sys comp 37/59037/3
authorkrishnajinka <krishna.jinka@gmail.com>
Sun, 5 Aug 2018 09:27:28 +0000 (18:27 +0900)
committerKrishnajinka <kris.jinka@samsung.com>
Mon, 6 Aug 2018 11:01:34 +0000 (20:01 +0900)
Modify pdp drools system component files to fix basic
Java warnings from analysis tools. Possibly flagged by
Sonar tool as well.Rework based on comments

Issue-ID: POLICY-1017
Change-Id: I1f2a5d727d2673cade5f69a07f708e16754c78e4
Signed-off-by: krisjinka <kris.jinka@samsung.com>
policy-management/src/main/java/org/onap/policy/drools/system/PolicyController.java
policy-management/src/main/java/org/onap/policy/drools/system/PolicyControllerFactory.java
policy-management/src/main/java/org/onap/policy/drools/system/PolicyEngine.java
policy-management/src/main/java/org/onap/policy/drools/system/internal/AggregatedPolicyController.java

index 9e01634..dcd4d11 100644 (file)
@@ -43,27 +43,27 @@ public interface PolicyController extends Startable, Lockable {
     /**
      * Factory that tracks and manages Policy Controllers
      */
-    public static PolicyControllerFactory factory = new IndexedPolicyControllerFactory();
+    static PolicyControllerFactory factory = new IndexedPolicyControllerFactory();
 
     /**
      * name of this Policy Controller
      */
-    public String getName();
+    String getName();
 
     /**
      * Get the topic readers of interest for this controller
      */
-    public List<? extends TopicSource> getTopicSources();
+    List<? extends TopicSource> getTopicSources();
 
     /**
      * Get the topic readers of interest for this controller
      */
-    public List<? extends TopicSink> getTopicSinks();
+    List<? extends TopicSink> getTopicSinks();
 
     /**
      * Get the Drools Controller
      */
-    public DroolsController getDrools();
+    DroolsController getDrools();
 
     /**
      * update maven configuration
@@ -71,17 +71,18 @@ public interface PolicyController extends Startable, Lockable {
      * @param newDroolsConfiguration new drools configuration
      * @return true if the update was successful, false otherwise
      */
-    public boolean updateDrools(DroolsConfiguration newDroolsConfiguration);
+    boolean updateDrools(DroolsConfiguration newDroolsConfiguration);
 
     /**
      * Get the Properties
      */
-    public Properties getProperties();
+    Properties getProperties();
 
     /**
      * Attempts delivering of an String over communication infrastructure "busType"
      * 
-     * @param eventBus Communication infrastructure identifier
+     * @param event Communication infrastructure identifier
+     * @param busType
      * @param topic topic
      * @param event the event object to send
      * 
@@ -92,13 +93,13 @@ public interface PolicyController extends Startable, Lockable {
      * @throws UnsupportedOperationException when the engine cannot deliver due to the functionality
      *         missing (ie. communication infrastructure not supported.
      */
-    public boolean deliver(CommInfrastructure busType, String topic, Object event);
+    boolean deliver(CommInfrastructure busType, String topic, Object event);
 
     /**
      * halts and permanently releases all resources
      * 
      * @throws IllegalStateException
      */
-    public void halt();
+    void halt();
 
 }
index c5787dd..e2af0fb 100644 (file)
@@ -39,477 +39,475 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
  * and retrieval for management interfaces
  */
 public interface PolicyControllerFactory {
-       /**
-        * Build a controller from a properties file
-        * 
-        * @param name the global name of this controller
-        * @param properties input parameters in form of properties for controller
-        * initialization.
-        * 
-        * @return a Policy Controller
-        * 
-        * @throws IllegalArgumentException invalid values provided in properties
-        */
-       public PolicyController build(String name, Properties properties);
-       
-       /**
-        * patches (updates) a controller from a critical configuration update.
-        * 
-        * @param name
-        * @param configController
-        * 
-        * @return a Policy Controller
-        */
-       public PolicyController patch(String name, DroolsConfiguration configController);
-       
-       /**
-        * rebuilds (updates) a controller from a configuration update.
-        * 
-        * @param controller
-        * @param configController
-        * 
-        * @return a Policy Controller
-        */
-       public PolicyController patch(PolicyController controller, 
-                                             DroolsConfiguration configController);
-       
-       /**
-        * get PolicyController from DroolsController
-        * 
-        * @param droolsController
-        * @return
-        * @throws IllegalArgumentException
-        * @throws IllegalStateException
-        */
-       public PolicyController get(DroolsController droolsController);
-       
-       /**
-        * Makes the Policy Controller identified by controllerName not operational, but
-        * does not delete its associated data
-        * 
-        * @param controllerName  name of the policy controller
-        * @throws IllegalArgumentException invalid arguments
-        */
-       public void shutdown(String controllerName);
-       
-       /**
-        * Makes the Policy Controller identified by controller not operational, but
-        * does not delete its associated data
-        * 
-        * @param controller a Policy Controller
-        * @throws IllegalArgumentException invalid arguments
-        */
-       public void shutdown(PolicyController controller);
-       
-       /**
-        * Releases all Policy Controllers from operation
-        */
-       public void shutdown();
-
-       /**
-        * Destroys this Policy Controller
-        * 
-        * @param controllerName  name of the policy controller
-        * @throws IllegalArgumentException invalid arguments
-        */
-       public void destroy(String controllerName);
-       
-       /**
-        * Destroys this Policy Controller
-        * 
-        * @param controller a Policy Controller
-        * @throws IllegalArgumentException invalid arguments
-        */
-       public void destroy(PolicyController controller);
-       
-       /**
-        * Releases all Policy Controller resources
-        */
-       public void destroy();
-       
-       /**
-        * gets the Policy Controller identified by its name
-        * 
-        * @param policyControllerName
-        * @return
-        * @throws IllegalArgumentException
-        * @throws IllegalStateException
-        */
-       public PolicyController get(String policyControllerName);
-       
-       /**
-        * gets the Policy Controller identified by group and artifact ids
-        * 
-        * @param groupId group id
-        * @param artifactId artifact id
-        * @return
-        * @throws IllegalArgumentException
-        * @throws IllegalStateException
-        */
-       public PolicyController get(String groupId, String artifactId);
-       
-       /**
-        * get features attached to the Policy Controllers
-        * @return list of features
-        */
-       public List<PolicyControllerFeatureAPI> getFeatureProviders();
-       
-       /**
-        * get named feature attached to the Policy Controllers
-        * @return the feature
-        */
-       public PolicyControllerFeatureAPI getFeatureProvider(String featureName);
-       
-       /**
-        * get features attached to the Policy Controllers
-        * @return list of features
-        */
-       public List<String> getFeatures();
-       
-       /**
-        * returns the current inventory of Policy Controllers
-        * 
-        * @return a list of Policy Controllers
-        */
-       public List<PolicyController> inventory();
+    /**
+     * Build a controller from a properties file
+     *
+     * @param name the global name of this controller
+     * @param properties input parameters in form of properties for controller
+     * initialization.
+     *
+     * @return a Policy Controller
+     *
+     * @throws IllegalArgumentException invalid values provided in properties
+     */
+    PolicyController build(String name, Properties properties);
+
+    /**
+     * patches (updates) a controller from a critical configuration update.
+     *
+     * @param name
+     * @param configController
+     *
+     * @return a Policy Controller
+     */
+    PolicyController patch(String name, DroolsConfiguration configController);
+
+    /**
+     * rebuilds (updates) a controller from a configuration update.
+     *
+     * @param controller
+     * @param configController
+     *
+     * @return a Policy Controller
+     */
+    void patch(PolicyController controller,
+               DroolsConfiguration configController);
+
+    /**
+     * get PolicyController from DroolsController
+     *
+     * @param droolsController
+     * @return
+     * @throws IllegalArgumentException
+     * @throws IllegalStateException
+     */
+    PolicyController get(DroolsController droolsController);
+
+    /**
+     * Makes the Policy Controller identified by controllerName not operational, but
+     * does not delete its associated data
+     *
+     * @param controllerName  name of the policy controller
+     * @throws IllegalArgumentException invalid arguments
+     */
+    void shutdown(String controllerName);
+
+    /**
+     * Makes the Policy Controller identified by controller not operational, but
+     * does not delete its associated data
+     *
+     * @param controller a Policy Controller
+     * @throws IllegalArgumentException invalid arguments
+     */
+    void shutdown(PolicyController controller);
+
+    /**
+     * Releases all Policy Controllers from operation
+     */
+    void shutdown();
+
+    /**
+     * Destroys this Policy Controller
+     *
+     * @param controllerName  name of the policy controller
+     * @throws IllegalArgumentException invalid arguments
+     */
+    void destroy(String controllerName);
+
+    /**
+     * Destroys this Policy Controller
+     *
+     * @param controller a Policy Controller
+     * @throws IllegalArgumentException invalid arguments
+     */
+    void destroy(PolicyController controller);
+
+    /**
+     * Releases all Policy Controller resources
+     */
+    void destroy();
+
+    /**
+     * gets the Policy Controller identified by its name
+     *
+     * @param policyControllerName
+     * @return
+     * @throws IllegalArgumentException
+     * @throws IllegalStateException
+     */
+    PolicyController get(String policyControllerName);
+
+    /**
+     * gets the Policy Controller identified by group and artifact ids
+     *
+     * @param groupId group id
+     * @param artifactId artifact id
+     * @return
+     * @throws IllegalArgumentException
+     * @throws IllegalStateException
+     */
+    PolicyController get(String groupId, String artifactId);
+
+    /**
+     * get features attached to the Policy Controllers
+     * @return list of features
+     */
+    List<PolicyControllerFeatureAPI> getFeatureProviders();
+
+    /**
+     * get named feature attached to the Policy Controllers
+     * @return the feature
+     */
+    PolicyControllerFeatureAPI getFeatureProvider(String featureName);
+
+    /**
+     * get features attached to the Policy Controllers
+     * @return list of features
+     */
+    List<String> getFeatures();
+
+    /**
+     * returns the current inventory of Policy Controllers
+     *
+     * @return a list of Policy Controllers
+     */
+    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 Logger  logger = LoggerFactory.getLogger(PolicyControllerFactory.class);         
-       
-       /**
-        * Policy Controller Name Index
-        */
-       protected HashMap<String,PolicyController> policyControllers =
-                       new HashMap<>();
-       
-       /**
-        * Group/Artifact Ids Index
-        */
-       protected HashMap<String,PolicyController> coordinates2Controller = 
-                       new HashMap<>();
-       
-       /**
-        * produces key for indexing controller names
-        * 
-        * @param group group id
-        * @param artifactId artifact id
-        * @return index key
-        */
-       protected 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 =
-                               new AggregatedPolicyController(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);
-               }
-               
-               if (droolsConfig == null)
-                       throw new IllegalArgumentException("Invalid Drools Configuration");
-               
-               PolicyController controller = this.get(name);
-               
-               if (controller == null) {
-                       logger.warn("A POLICY CONTROLLER of name " + name + 
-                                           "does not exist for patch operation: " + droolsConfig);
-                       
-                       throw new IllegalArgumentException("Not a valid controller of name " + name);
-               }
-               
-               this.patch(controller, droolsConfig);
-               
-               if (logger.isInfoEnabled())
-                       logger.info("UPDATED drools configuration: " + droolsConfig + " on " + this);
-               
-               return controller;
-       }
-       
-
-       /**
-        * {@inheritDoc}
-        */
-       @Override
-       public PolicyController patch(PolicyController controller, DroolsConfiguration droolsConfig) {
-
-               if (controller == null)
-                       throw new IllegalArgumentException("Not a valid controller:  null");
-               
-               if (!controller.updateDrools(droolsConfig)) {
-                       logger.warn("Cannot update drools configuration: " + droolsConfig + " on " + this);
-                       throw new IllegalArgumentException("Cannot update drools configuration Drools Configuration");
-               }
-               
-               if (logger.isInfoEnabled())
-                       logger.info("UPDATED drools configuration: " + droolsConfig + " on " + this);
-               
-               String coordinates = toKey(controller.getDrools().getGroupId(),
-                                                  controller.getDrools().getArtifactId());
-               
-               if (controller.getDrools().isBrained())
-                       this.coordinates2Controller.put(coordinates, controller);
-               
-               return 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
-        * @return
-        * @throws IllegalArgumentException
-        */
-       protected 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 : PolicyControllerFeatureAPI.providers.getList()) {
-                       features.add(feature.getName());
-               }
-               return features;
-       }
-       
-       /**
-        * {@inheritDoc}
-        */
-       @JsonIgnore
-       @Override
-       public List<PolicyControllerFeatureAPI> getFeatureProviders() {
-               return PolicyControllerFeatureAPI.providers.getList();
-       }
-       
-       /**
-        * {@inheritDoc}
-        */
-       @Override
-       public PolicyControllerFeatureAPI getFeatureProvider(String featureName) {
-               if (featureName == null || featureName.isEmpty())
-                       throw new IllegalArgumentException("A feature name must be provided");
-               
-               for (PolicyControllerFeatureAPI feature : PolicyControllerFeatureAPI.providers.getList()) {
-                       if (feature.getName().equals(featureName))
-                               return feature;
-               }
-               
-               throw new IllegalArgumentException("Invalid Feature Name: " + featureName);
-       }
-
-       private IllegalArgumentException makeArgEx(String argName) {
-               return new IllegalArgumentException("Invalid " + argName);
-       }
+    // 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 =
+                new AggregatedPolicyController(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);
+        }
+
+        if (droolsConfig == null)
+            throw new IllegalArgumentException("Invalid Drools Configuration");
+
+        PolicyController controller = this.get(name);
+
+        if (controller == null) {
+            logger.warn("A POLICY CONTROLLER of name " + name +
+                        "does not exist for patch operation: " + droolsConfig);
+
+            throw new IllegalArgumentException("Not a valid controller of name " + name);
+        }
+
+        this.patch(controller, droolsConfig);
+
+        if (logger.isInfoEnabled())
+            logger.info("UPDATED drools configuration: " + droolsConfig + " on " + this);
+
+        return controller;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void patch(PolicyController controller, DroolsConfiguration droolsConfig) {
+
+        if (controller == null)
+            throw new IllegalArgumentException("Not a valid controller:  null");
+
+        if (!controller.updateDrools(droolsConfig)) {
+            logger.warn("Cannot update drools configuration: " + droolsConfig + " on " + this);
+            throw new IllegalArgumentException("Cannot update drools configuration Drools Configuration");
+        }
+
+        if (logger.isInfoEnabled())
+            logger.info("UPDATED drools configuration: " + droolsConfig + " on " + 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
+     * @throws IllegalArgumentException
+     */
+    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 : PolicyControllerFeatureAPI.providers.getList()) {
+            features.add(feature.getName());
+        }
+        return features;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @JsonIgnore
+    @Override
+    public List<PolicyControllerFeatureAPI> getFeatureProviders() {
+        return PolicyControllerFeatureAPI.providers.getList();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public PolicyControllerFeatureAPI getFeatureProvider(String featureName) {
+        if (featureName == null || featureName.isEmpty())
+            throw new IllegalArgumentException("A feature name must be provided");
+
+        for (PolicyControllerFeatureAPI feature : PolicyControllerFeatureAPI.providers.getList()) {
+            if (feature.getName().equals(featureName))
+                return feature;
+        }
+
+        throw new IllegalArgumentException("Invalid Feature Name: " + featureName);
+    }
+
+    private IllegalArgumentException makeArgEx(String argName) {
+        return new IllegalArgumentException("Invalid " + argName);
+    }
 }
index 4be8502..5b8cb2f 100644 (file)
@@ -71,29 +71,29 @@ public interface PolicyEngine extends Startable, Lockable, TopicListener {
     /**
      * Policy Engine Manager
      */
-    public static final PolicyEngine manager = new PolicyEngineManager();
+    PolicyEngine manager = new PolicyEngineManager();
 
     /**
      * Default Telemetry Server Port
      */
-    public static final int TELEMETRY_SERVER_DEFAULT_PORT = 9696;
+    int TELEMETRY_SERVER_DEFAULT_PORT = 9696;
 
     /**
      * Default Telemetry Server Hostname
      */
-    public static final String TELEMETRY_SERVER_DEFAULT_HOST = "localhost";
+    String TELEMETRY_SERVER_DEFAULT_HOST = "localhost";
 
     /**
      * Default Telemetry Server Name
      */
-    public static final String TELEMETRY_SERVER_DEFAULT_NAME = "TELEMETRY";
+    String TELEMETRY_SERVER_DEFAULT_NAME = "TELEMETRY";
 
     /**
      * Boot the engine
      *
      * @param cliArgs command line arguments
      */
-    public void boot(String[] cliArgs);
+    void boot(String[] cliArgs);
 
     /**
      * configure the policy engine according to the given properties
@@ -101,7 +101,7 @@ public interface PolicyEngine extends Startable, Lockable, TopicListener {
      * @param properties Policy Engine properties
      * @throws IllegalArgumentException when invalid or insufficient properties are provided
      */
-    public void configure(Properties properties);
+    void configure(Properties properties);
 
     /**
      * configure the engine's environment. General lab installation configuration is made available
@@ -111,14 +111,14 @@ public interface PolicyEngine extends Startable, Lockable, TopicListener {
      *
      * @param properties an environment properties
      */
-    public void setEnvironment(Properties properties);
+    void setEnvironment(Properties properties);
 
     /**
      * gets the engine's environment
      *
      * @return
      */
-    public Properties getEnvironment();
+    Properties getEnvironment();
 
     /**
      * gets an environment's value, by 1) first from the engine's environment, and 2) from the OS
@@ -127,7 +127,7 @@ public interface PolicyEngine extends Startable, Lockable, TopicListener {
      * @param key environment key
      * @return environment value or null if absent
      */
-    public String getEnvironmentProperty(String key);
+    String getEnvironmentProperty(String key);
 
     /**
      * sets an engine's environment property
@@ -136,18 +136,18 @@ public interface PolicyEngine extends Startable, Lockable, TopicListener {
      * @param value
      * @return
      */
-    public String setEnvironmentProperty(String key, String value);
+    String setEnvironmentProperty(String key, String value);
 
     /**
      * registers a new Policy Controller with the Policy Engine initialized per properties.
      *
      * @param properties properties to initialize the Policy Controller
-     * @throws IllegalArgumentException when invalid or insufficient properties are provided
-     * @throws IllegalStateException when the engine is in a state where this operation is not
-     *         permitted.
      * @return the newly instantiated Policy Controller
+     * @throws IllegalArgumentException when invalid or insufficient properties are provided
+     * @throws IllegalStateException    when the engine is in a state where this operation is not
+     *                                  permitted.
      */
-    public PolicyController createPolicyController(String name, Properties properties);
+    PolicyController createPolicyController(String name, Properties properties);
 
     /**
      * updates the Policy Engine with the given configuration
@@ -155,9 +155,9 @@ public interface PolicyEngine extends Startable, Lockable, TopicListener {
      * @param configuration the configuration
      * @return success or failure
      * @throws IllegalArgumentException if invalid argument provided
-     * @throws IllegalStateException if the system is in an invalid state
+     * @throws IllegalStateException    if the system is in an invalid state
      */
-    public boolean configure(PdpdConfiguration configuration);
+    boolean configure(PdpdConfiguration configuration);
 
     /**
      * updates a set of Policy Controllers with configuration information
@@ -167,19 +167,18 @@ public interface PolicyEngine extends Startable, Lockable, TopicListener {
      * @throws IllegalArgumentException
      * @throws IllegalStateException
      */
-    public List<PolicyController> updatePolicyControllers(List<ControllerConfiguration> configuration);
+    List<PolicyController> updatePolicyControllers(List<ControllerConfiguration> configuration);
 
     /**
      * updates an already existing Policy Controller with configuration information
      *
      * @param configuration configuration
-     *
      * @return the updated Policy Controller
      * @throws IllegalArgumentException in the configuration is invalid
-     * @throws IllegalStateException if the controller is in a bad state
-     * @throws Exception any other reason
+     * @throws IllegalStateException    if the controller is in a bad state
+     * @throws Exception                any other reason
      */
-    public PolicyController updatePolicyController(ControllerConfiguration configuration);
+    PolicyController updatePolicyController(ControllerConfiguration configuration);
 
     /**
      * removes the Policy Controller identified by its name from the Policy Engine
@@ -187,21 +186,21 @@ public interface PolicyEngine extends Startable, Lockable, TopicListener {
      * @param name name of the Policy Controller
      * @return the removed Policy Controller
      */
-    public void removePolicyController(String name);
+    void removePolicyController(String name);
 
     /**
      * removes a Policy Controller from the Policy Engine
      *
      * @param controller the Policy Controller to remove from the Policy Engine
      */
-    public void removePolicyController(PolicyController controller);
+    void removePolicyController(PolicyController controller);
 
     /**
      * returns a list of the available Policy Controllers
      *
      * @return list of Policy Controllers
      */
-    public List<PolicyController> getPolicyControllers();
+    List<PolicyController> getPolicyControllers();
 
 
     /**
@@ -209,131 +208,127 @@ public interface PolicyEngine extends Startable, Lockable, TopicListener {
      *
      * @return list of controller names
      */
-    public List<String> getPolicyControllerIds();
+    List<String> getPolicyControllerIds();
 
     /**
      * get unmanaged sources
      *
      * @return unmanaged sources
      */
-    public List<TopicSource> getSources();
+    List<TopicSource> getSources();
 
     /**
      * get unmanaged sinks
      *
      * @return unmanaged sinks
      */
-    public List<TopicSink> getSinks();
+    List<TopicSink> getSinks();
 
     /**
      * get unmmanaged http servers list
      *
      * @return http servers
      */
-    public List<HttpServletServer> getHttpServers();
+    List<HttpServletServer> getHttpServers();
 
     /**
      * get properties configuration
      *
      * @return properties objects
      */
-    public Properties getProperties();
+    Properties getProperties();
 
     /**
      * get features attached to the Policy Engine
      *
      * @return list of features
      */
-    public List<PolicyEngineFeatureAPI> getFeatureProviders();
+    List<PolicyEngineFeatureAPI> getFeatureProviders();
 
     /**
      * get named feature attached to the Policy Engine
      *
      * @return the feature
      */
-    public PolicyEngineFeatureAPI getFeatureProvider(String featureName);
+    PolicyEngineFeatureAPI getFeatureProvider(String featureName);
 
     /**
      * get features attached to the Policy Engine
      *
      * @return list of features
      */
-    public List<String> getFeatures();
+    List<String> getFeatures();
 
     /**
      * Attempts the dispatching of an "event" object
      *
      * @param topic topic
      * @param event the event object to send
-     *
      * @return true if successful, false if a failure has occurred.
      * @throws IllegalArgumentException when invalid or insufficient properties are provided
-     * @throws IllegalStateException when the engine is in a state where this operation is not
-     *         permitted (ie. locked or stopped).
+     * @throws IllegalStateException    when the engine is in a state where this operation is not
+     *                                  permitted (ie. locked or stopped).
      */
-    public boolean deliver(String topic, Object event);
+    boolean deliver(String topic, Object event);
 
     /**
      * Attempts the dispatching of an "event" object over communication infrastructure "busType"
      *
      * @param topic topic
      * @param event the event object to send
-     *
      * @return true if successful, false if a failure has occurred.
-     * @throws IllegalArgumentException when invalid or insufficient properties are provided
-     * @throws IllegalStateException when the engine is in a state where this operation is not
-     *         permitted (ie. locked or stopped).
+     * @throws IllegalArgumentException      when invalid or insufficient properties are provided
+     * @throws IllegalStateException         when the engine is in a state where this operation is not
+     *                                       permitted (ie. locked or stopped).
      * @throws UnsupportedOperationException when the engine cannot deliver due to the functionality
-     *         missing (ie. communication infrastructure not supported.
+     *                                       missing (ie. communication infrastructure not supported.
      */
-    public boolean deliver(String busType, String topic, Object event);
+    boolean deliver(String busType, String topic, Object event);
 
     /**
      * Attempts the dispatching of an "event" object over communication infrastructure "busType"
      *
      * @param topic topic
      * @param event the event object to send
-     *
      * @return true if successful, false if a failure has occurred.
-     * @throws IllegalArgumentException when invalid or insufficient properties are provided
-     * @throws IllegalStateException when the engine is in a state where this operation is not
-     *         permitted (ie. locked or stopped).
+     * @throws IllegalArgumentException      when invalid or insufficient properties are provided
+     * @throws IllegalStateException         when the engine is in a state where this operation is not
+     *                                       permitted (ie. locked or stopped).
      * @throws UnsupportedOperationException when the engine cannot deliver due to the functionality
-     *         missing (ie. communication infrastructure not supported.
+     *                                       missing (ie. communication infrastructure not supported.
      */
-    public boolean deliver(CommInfrastructure busType, String topic, Object event);
+    boolean deliver(CommInfrastructure busType, String topic, Object event);
 
     /**
      * Attempts delivering of an String over communication infrastructure "busType"
      *
      * @param topic topic
      * @param event the event object to send
-     *
      * @return true if successful, false if a failure has occurred.
-     * @throws IllegalArgumentException when invalid or insufficient properties are provided
-     * @throws IllegalStateException when the engine is in a state where this operation is not
-     *         permitted (ie. locked or stopped).
+     * @throws IllegalArgumentException      when invalid or insufficient properties are provided
+     * @throws IllegalStateException         when the engine is in a state where this operation is not
+     *                                       permitted (ie. locked or stopped).
      * @throws UnsupportedOperationException when the engine cannot deliver due to the functionality
-     *         missing (ie. communication infrastructure not supported.
+     *                                       missing (ie. communication infrastructure not supported.
      */
-    public boolean deliver(CommInfrastructure busType, String topic, String event);
+    boolean deliver(CommInfrastructure busType, String topic, String event);
 
     /**
      * Invoked when the host goes into the active state.
      */
-    public void activate();
+    void activate();
 
     /**
      * Invoked when the host goes into the standby state.
      */
-    public void deactivate();
+    void deactivate();
 
     /**
      * produces a default telemetry configuration
      *
      * @return policy engine configuration
      */
-    public Properties defaultTelemetryConfig();
+    Properties defaultTelemetryConfig();
 }
 
 
@@ -357,42 +352,42 @@ class PolicyEngineManager implements PolicyEngine {
     /**
      * Is the Policy Engine running?
      */
-    protected volatile boolean alive = false;
+    private volatile boolean alive = false;
 
     /**
      * Is the engine locked?
      */
-    protected volatile boolean locked = false;
+    private volatile boolean locked = false;
 
     /**
      * Properties used to initialize the engine
      */
-    protected Properties properties;
+    private Properties properties;
 
     /**
      * Environment Properties
      */
-    protected final Properties environment = new Properties();
+    private final Properties environment = new Properties();
 
     /**
      * Policy Engine Sources
      */
-    protected List<? extends TopicSource> sources = new ArrayList<>();
+    private List<? extends TopicSource> sources = new ArrayList<>();
 
     /**
      * Policy Engine Sinks
      */
-    protected List<? extends TopicSink> sinks = new ArrayList<>();
+    private List<? extends TopicSink> sinks = new ArrayList<>();
 
     /**
      * Policy Engine HTTP Servers
      */
-    protected List<HttpServletServer> httpServers = new ArrayList<>();
+    private List<HttpServletServer> httpServers = new ArrayList<>();
 
     /**
      * gson parser to decode configuration requests
      */
-    protected final Gson decoder = new GsonBuilder().disableHtmlEscaping().create();
+    private final Gson decoder = new GsonBuilder().disableHtmlEscaping().create();
 
 
     @Override
@@ -529,8 +524,6 @@ class PolicyEngineManager implements PolicyEngine {
                         e.getMessage(), e);
             }
         }
-
-        return;
     }
 
     @Override
@@ -1473,7 +1466,7 @@ class PolicyEngineManager implements PolicyEngine {
         }
     }
 
-    public boolean controllerConfig(PdpdConfiguration config) {
+    private boolean controllerConfig(PdpdConfiguration config) {
         /* only this one supported for now */
         final List<ControllerConfiguration> configControllers = config.getControllers();
         if (configControllers == null || configControllers.isEmpty()) {
@@ -1482,26 +1475,18 @@ class PolicyEngineManager implements PolicyEngine {
         }
 
         final List<PolicyController> policyControllers = this.updatePolicyControllers(config.getControllers());
-
-        boolean success;
-
-        if (policyControllers == null || policyControllers.isEmpty()) {
-            success = false;
-        } else if (policyControllers.size() == configControllers.size()) {
+        boolean success = false;
+        if (!(policyControllers == null || policyControllers.isEmpty())
+                && (policyControllers.size() == configControllers.size())) {
             success = true;
-        } else {
-            success = false;
         }
-
         return success;
     }
 
     @Override
     public String toString() {
-        final StringBuilder builder = new StringBuilder();
-        builder.append("PolicyEngineManager [alive=").append(this.alive).append(", locked=").append(this.locked)
-                .append("]");
-        return builder.toString();
+        return "PolicyEngineManager [alive=" + this.alive + ", locked=" + this.locked +
+                "]";
     }
 
 }
index 5172fc3..0b6643f 100644 (file)
@@ -49,50 +49,50 @@ public class AggregatedPolicyController implements PolicyController, TopicListen
     /**
      * Logger
      */
-    private static Logger logger = LoggerFactory.getLogger(AggregatedPolicyController.class);
+    private static final Logger logger = LoggerFactory.getLogger(AggregatedPolicyController.class);
 
     /**
      * identifier for this policy controller
      */
-    protected final String name;
+    private final String name;
 
     /**
      * Abstracted Event Sources List regardless communication technology
      */
-    protected final List<? extends TopicSource> sources;
+    private final List<? extends TopicSource> sources;
 
     /**
      * Abstracted Event Sinks List regardless communication technology
      */
-    protected final List<? extends TopicSink> sinks;
+    private final List<? extends TopicSink> sinks;
 
     /**
      * Mapping topics to sinks
      */
     @JsonIgnore
-    protected final HashMap<String, TopicSink> topic2Sinks = new HashMap<>();
+    private final HashMap<String, TopicSink> topic2Sinks = new HashMap<>();
 
     /**
      * Is this Policy Controller running (alive) ? reflects invocation of start()/stop() only
      */
-    protected volatile boolean alive;
+    private volatile boolean alive;
 
     /**
      * Is this Policy Controller locked ? reflects if i/o controller related operations and start
      * are permitted, more specifically: start(), deliver() and onTopicEvent(). It does not affect
      * the ability to stop the underlying drools infrastructure
      */
-    protected volatile boolean locked;
+    private volatile boolean locked;
 
     /**
      * Policy Drools Controller
      */
-    protected volatile DroolsController droolsController;
+    private volatile DroolsController droolsController;
 
     /**
      * Properties used to initialize controller
      */
-    protected final Properties properties;
+    private final Properties properties;
 
     /**
      * Constructor version mainly used for bootstrapping at initialization time a policy engine
@@ -131,7 +131,7 @@ public class AggregatedPolicyController implements PolicyController, TopicListen
      * 
      * @throws IllegalArgumentException if invalid parameters are passed in
      */
-    protected void initDrools(Properties properties) {
+    private void initDrools(Properties properties) {
         try {
             // Register with drools infrastructure
             this.droolsController = DroolsController.factory.build(properties, sources, sinks);
@@ -146,7 +146,7 @@ public class AggregatedPolicyController implements PolicyController, TopicListen
      * 
      * @throws IllegalArgumentException if invalid parameters are passed in
      */
-    protected void initSinks() {
+    private void initSinks() {
         this.topic2Sinks.clear();
         for (TopicSink sink : sinks) {
             this.topic2Sinks.put(sink.getTopic(), sink);
@@ -474,7 +474,7 @@ public class AggregatedPolicyController implements PolicyController, TopicListen
         if (!this.topic2Sinks.containsKey(topic)) {
             logger.warn("{}: cannot deliver event because the sink {}:{} is not registered: {}", this, commType, topic,
                     event);
-            throw new IllegalArgumentException("Unsuported topic " + topic + " for delivery");
+            throw new IllegalArgumentException("Unsupported topic " + topic + " for delivery");
         }
 
         boolean success = this.droolsController.deliver(this.topic2Sinks.get(topic), event);
@@ -633,10 +633,8 @@ public class AggregatedPolicyController implements PolicyController, TopicListen
 
     @Override
     public String toString() {
-        StringBuilder builder = new StringBuilder();
-        builder.append("AggregatedPolicyController [name=").append(name).append(", alive=").append(alive)
-                .append(", locked=").append(locked).append(", droolsController=").append(droolsController).append("]");
-        return builder.toString();
+        return "AggregatedPolicyController [name=" + name + ", alive=" + alive +
+                ", locked=" + locked + ", droolsController=" + droolsController + "]";
     }
 
 }