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;
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);
}