Refactor xacml-pdp to remove various statics
[policy/xacml-pdp.git] / main / src / main / java / org / onap / policy / pdpx / main / comm / listeners / XacmlPdpStateChangeListener.java
index f5b2fbf..98f6d0e 100644 (file)
@@ -27,9 +27,7 @@ import org.onap.policy.common.endpoints.listeners.ScoListener;
 import org.onap.policy.common.utils.coder.StandardCoderObject;
 import org.onap.policy.models.pdp.concepts.PdpStateChange;
 import org.onap.policy.models.pdp.concepts.PdpStatus;
-import org.onap.policy.models.pdp.enums.PdpState;
-import org.onap.policy.pdpx.main.comm.XacmlPdpHeartbeatPublisher;
-import org.onap.policy.pdpx.main.comm.XacmlPdpMessage;
+import org.onap.policy.pdpx.main.XacmlState;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -37,41 +35,40 @@ public class XacmlPdpStateChangeListener extends ScoListener<PdpStateChange> {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(XacmlPdpStateChangeListener.class);
 
-    private TopicSinkClient client;
+    private final TopicSinkClient client;
 
-    private XacmlPdpHeartbeatPublisher heartbeat;
+    private final XacmlState state;
 
     /**
      * Constructs the object.
      *
      * @param client used to send back response after receiving state change message
+     * @param state tracks the state of this PDP
      */
-    public XacmlPdpStateChangeListener(TopicSinkClient client) {
+    public XacmlPdpStateChangeListener(TopicSinkClient client, XacmlState state) {
         super(PdpStateChange.class);
-        heartbeat = new XacmlPdpHeartbeatPublisher(client, PdpState.PASSIVE);
         this.client = client;
+        this.state = state;
     }
 
     @Override
     public void onTopicEvent(CommInfrastructure infra, String topic, StandardCoderObject sco, PdpStateChange message) {
 
-        XacmlPdpMessage newMessage = new XacmlPdpMessage();
         try {
-            PdpStatus newStatus = newMessage.formatStatusMessage(message.getState());
+            if (!state.shouldHandle(message)) {
+                LOGGER.debug("PDP State Change message discarded - {}", message);
+                return;
+            }
+
+            LOGGER.info("PDP State Change message has been received from the PAP - {}", message);
+            PdpStatus newStatus = state.updateInternalState(message);
 
             // Send State Change Status to PAP
             if (!client.send(newStatus)) {
-                LOGGER.error("failed to send to topic sink " + client.getTopic());
+                LOGGER.error("failed to send to topic sink {}", client.getTopic());
                 throw new TopicSinkClientException("failed to send to topic sink " + client.getTopic());
             }
 
-            // Update the heartbeat internal state if publisher is running else create new publisher
-            if (XacmlPdpHeartbeatPublisher.isAlive()) {
-                heartbeat.updateInternalState(message.getState());
-            } else {
-                heartbeat = new XacmlPdpHeartbeatPublisher(client, message.getState());
-            }
-
         } catch (final Exception e) {
             LOGGER.error("failed to handle the PDP State Change message.", e);
         }