X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=main%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fpdpx%2Fmain%2Fcomm%2Flisteners%2FXacmlPdpStateChangeListener.java;h=3102edb13d0e7bbe7927e52d3774bf72f159c88d;hb=ae182a04e4bf5c05bebcefe71d1fd000363aab09;hp=84572d92c6c6fea08d44a208f8ad0065c98353eb;hpb=72437db96093801ebef94d22418cd2e7a86a08f2;p=policy%2Fxacml-pdp.git diff --git a/main/src/main/java/org/onap/policy/pdpx/main/comm/listeners/XacmlPdpStateChangeListener.java b/main/src/main/java/org/onap/policy/pdpx/main/comm/listeners/XacmlPdpStateChangeListener.java index 84572d92..3102edb1 100644 --- a/main/src/main/java/org/onap/policy/pdpx/main/comm/listeners/XacmlPdpStateChangeListener.java +++ b/main/src/main/java/org/onap/policy/pdpx/main/comm/listeners/XacmlPdpStateChangeListener.java @@ -40,40 +40,44 @@ public class XacmlPdpStateChangeListener extends ScoListener { private TopicSinkClient client; private XacmlPdpHearbeatPublisher heartbeat; + private XacmlPdpMessage pdpInternalStatus; /** * Constructs the object. * * @param client used to send back response after receiving state change message */ - public XacmlPdpStateChangeListener(TopicSinkClient client) { + public XacmlPdpStateChangeListener(TopicSinkClient client, XacmlPdpMessage pdpStatusMessage) { super(PdpStateChange.class); PdpStateChange message = new PdpStateChange(); message.setState(PdpState.PASSIVE); - heartbeat = new XacmlPdpHearbeatPublisher(client, message); + this.pdpInternalStatus = pdpStatusMessage; this.client = client; + this.heartbeat = new XacmlPdpHearbeatPublisher(client, pdpStatusMessage); } @Override public void onTopicEvent(CommInfrastructure infra, String topic, StandardCoderObject sco, PdpStateChange message) { - XacmlPdpMessage newMessage = new XacmlPdpMessage(); try { - PdpStatus newStatus = newMessage.formatStatusMessage(message.getState()); - // Send State Change Status to PAP - if (!client.send(newStatus)) { - LOGGER.error("failed to send to topic sink {}", client.getTopic()); - throw new TopicSinkClientException("failed to send to topic sink " + client.getTopic()); - } + if (message.appliesTo(pdpInternalStatus.getPdpName(), pdpInternalStatus.getPdpGroup(), + pdpInternalStatus.getPdpSubGroup())) { - // Update the heartbeat internal state if publisher is running else create new publisher - if (XacmlPdpHearbeatPublisher.isAlive()) { - heartbeat.updateInternalState(message.getState()); - } else { - heartbeat = new XacmlPdpHearbeatPublisher(client, message); - } + pdpInternalStatus.updateInternalStatus(message); + PdpStatus newStatus = pdpInternalStatus.formatPdpStatusMessage(); + // Send State Change Status to PAP + if (!client.send(newStatus)) { + LOGGER.error("failed to send to topic sink {}", client.getTopic()); + throw new TopicSinkClientException("failed to send to topic sink " + client.getTopic()); + } + + // Starte new heartbeat if publisher is NOT alive + if (!XacmlPdpHearbeatPublisher.isAlive()) { + heartbeat = new XacmlPdpHearbeatPublisher(client, pdpInternalStatus); + } + } } catch (final Exception e) { LOGGER.error("failed to handle the PDP State Change message.", e); }