Added code to send Termination message to PAP
[policy/xacml-pdp.git] / main / src / main / java / org / onap / policy / pdpx / main / startstop / XacmlPdpActivator.java
index 2a881d4..e763367 100644 (file)
@@ -22,6 +22,7 @@ package org.onap.policy.pdpx.main.startstop;
 
 import java.nio.file.Paths;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Properties;
 import lombok.Getter;
 import lombok.Setter;
@@ -31,9 +32,11 @@ import org.onap.policy.common.endpoints.event.comm.client.TopicSinkClient;
 import org.onap.policy.common.endpoints.event.comm.client.TopicSinkClientException;
 import org.onap.policy.common.endpoints.listeners.MessageTypeDispatcher;
 import org.onap.policy.common.parameters.ParameterService;
+import org.onap.policy.common.utils.network.NetworkUtil;
 import org.onap.policy.common.utils.services.ServiceManagerContainer;
 import org.onap.policy.models.pdp.concepts.PdpStatus;
 import org.onap.policy.models.pdp.enums.PdpMessageType;
+import org.onap.policy.models.pdp.enums.PdpState;
 import org.onap.policy.pdpx.main.PolicyXacmlPdpRuntimeException;
 import org.onap.policy.pdpx.main.XacmlState;
 import org.onap.policy.pdpx.main.comm.XacmlPdpHearbeatPublisher;
@@ -89,6 +92,8 @@ public class XacmlPdpActivator extends ServiceManagerContainer {
         TopicEndpoint.manager.addTopicSources(topicProperties);
 
         XacmlPdpHearbeatPublisher heartbeat;
+        TopicSinkClient sinkClient;
+        final XacmlState state;
 
         try {
             XacmlPdpApplicationManager appmgr =
@@ -99,12 +104,12 @@ public class XacmlPdpActivator extends ServiceManagerContainer {
             XacmlPdpStatisticsManager.setCurrent(stats);
             stats.setTotalPolicyTypesCount(appmgr.getPolicyTypeCount());
 
-            XacmlState state = new XacmlState(appmgr);
+            state = new XacmlState(appmgr);
 
             this.xacmlPdpParameterGroup = xacmlPdpParameterGroup;
             this.msgDispatcher = new MessageTypeDispatcher(MSG_TYPE_NAMES);
 
-            TopicSinkClient sinkClient = new TopicSinkClient(TOPIC);
+            sinkClient = new TopicSinkClient(TOPIC);
             heartbeat = new XacmlPdpHearbeatPublisher(sinkClient, state);
 
             /*
@@ -135,6 +140,9 @@ public class XacmlPdpActivator extends ServiceManagerContainer {
             TopicEndpoint.manager::start,
             TopicEndpoint.manager::shutdown);
 
+        addAction("Terminate PDP",
+            () -> { },
+            () -> sendTerminateMessage(sinkClient, state));
         // initial heart beats act as registration messages
         addAction("Heartbeat Publisher",
             heartbeat::start,
@@ -147,9 +155,18 @@ public class XacmlPdpActivator extends ServiceManagerContainer {
         addAction("REST server",
             () -> restServer.start(),
             () -> restServer.stop());
+
         // @formatter:on
     }
 
+    /*
+     * Method used to send a terminate message to the PAP.
+     */
+    private void sendTerminateMessage(TopicSinkClient sinkClient, XacmlState state) {
+        PdpStatus terminateStatus = state.terminatePdpMessage();
+        sinkClient.send(terminateStatus);
+    }
+
     /**
      * Get the parameters used by the activator.
      *