aboutsummaryrefslogtreecommitdiffstats
path: root/models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler
diff options
context:
space:
mode:
Diffstat (limited to 'models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler')
-rw-r--r--models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler/PdpMessageHandler.java151
-rw-r--r--models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler/PdpStateChangeMessageHandler.java125
-rw-r--r--models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler/PdpUpdateMessageHandler.java121
3 files changed, 397 insertions, 0 deletions
diff --git a/models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler/PdpMessageHandler.java b/models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler/PdpMessageHandler.java
new file mode 100644
index 000000000..d4296c6df
--- /dev/null
+++ b/models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler/PdpMessageHandler.java
@@ -0,0 +1,151 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.sim.pdp.handler;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+import org.onap.policy.common.utils.services.Registry;
+import org.onap.policy.models.pdp.concepts.PdpResponseDetails;
+import org.onap.policy.models.pdp.concepts.PdpStatus;
+import org.onap.policy.models.pdp.enums.PdpHealthStatus;
+import org.onap.policy.models.pdp.enums.PdpResponseStatus;
+import org.onap.policy.models.pdp.enums.PdpState;
+import org.onap.policy.models.sim.pdp.PdpSimulatorConstants;
+import org.onap.policy.models.sim.pdp.parameters.PdpStatusParameters;
+import org.onap.policy.models.sim.pdp.parameters.ToscaPolicyTypeIdentifierParameters;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
+
+/**
+ * This class supports the handling of pdp messages.
+ *
+ * @author Ajith Sreekumar (ajith.sreekumar@est.tech)
+ */
+public class PdpMessageHandler {
+
+ /**
+ * Method to create PdpStatus message from the parameters which will be saved to the context.
+ *
+ * @param instanceId instance id of the pdp
+ * @param pdpStatusParameters pdp status parameters read from the configuration file
+ *
+ * @return pdpStatus the pdp status message
+ */
+ public PdpStatus createPdpStatusFromParameters(final String instanceId,
+ final PdpStatusParameters pdpStatusParameters) {
+ final PdpStatus pdpStatus = new PdpStatus();
+ pdpStatus.setPdpType(pdpStatusParameters.getPdpType());
+ pdpStatus.setState(PdpState.PASSIVE);
+ pdpStatus.setHealthy(PdpHealthStatus.HEALTHY);
+ pdpStatus.setDescription(pdpStatusParameters.getDescription());
+ pdpStatus.setName(instanceId);
+ pdpStatus.setSupportedPolicyTypes(getSupportedPolicyTypesFromParameters(pdpStatusParameters));
+ return pdpStatus;
+ }
+
+ /**
+ * Method to get supported policy types from the parameters.
+ *
+ * @param pdpStatusParameters pdp status parameters
+ * @return supportedPolicyTypes list of PolicyTypeIdent
+ */
+ private List<ToscaPolicyTypeIdentifier> getSupportedPolicyTypesFromParameters(
+ final PdpStatusParameters pdpStatusParameters) {
+ final List<ToscaPolicyTypeIdentifier> supportedPolicyTypes =
+ new ArrayList<>(pdpStatusParameters.getSupportedPolicyTypes().size());
+ for (final ToscaPolicyTypeIdentifierParameters policyTypeIdentParameters : pdpStatusParameters
+ .getSupportedPolicyTypes()) {
+ supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier(policyTypeIdentParameters.getName(),
+ policyTypeIdentParameters.getVersion()));
+ }
+ return supportedPolicyTypes;
+ }
+
+ /**
+ * Method to create PdpStatus message from the context, which is to be sent by pdp simulator to pap.
+ *
+ * @return PdpStatus the pdp status message
+ */
+ public PdpStatus createPdpStatusFromContext() {
+ final PdpStatus pdpStatusContext = Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_OBJECT, PdpStatus.class);
+ final PdpStatus pdpStatus = new PdpStatus();
+ pdpStatus.setName(pdpStatusContext.getName());
+ pdpStatus.setPdpType(pdpStatusContext.getPdpType());
+ pdpStatus.setState(pdpStatusContext.getState());
+ pdpStatus.setHealthy(pdpStatusContext.getHealthy());
+ pdpStatus.setDescription(pdpStatusContext.getDescription());
+ pdpStatus.setSupportedPolicyTypes(pdpStatusContext.getSupportedPolicyTypes());
+ pdpStatus.setPolicies(pdpStatusContext.getPolicies());
+ pdpStatus.setPdpGroup(pdpStatusContext.getPdpGroup());
+ pdpStatus.setPdpSubgroup(pdpStatusContext.getPdpSubgroup());
+ return pdpStatus;
+ }
+
+ /**
+ * Method to get a final pdp status when the simulator is shut down.
+ *
+ * @return PdpStatus the pdp status message
+ */
+ public PdpStatus getTerminatedPdpStatus() {
+ final PdpStatus pdpStatusInContext = Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_OBJECT, PdpStatus.class);
+ pdpStatusInContext.setState(PdpState.TERMINATED);
+ pdpStatusInContext.setDescription("Pdp Simulator shutting down.");
+ return createPdpStatusFromContext();
+ }
+
+ /**
+ * Method create PdpResponseDetails which will be sent as part of pdp status to PAP.
+ *
+ * @param requestId request id of the PdpUpdate message from pap
+ * @param status response status to be sent back
+ * @param responseMessage response message to be sent back
+ *
+ * @return PdpResponseDetails
+ */
+ public PdpResponseDetails createPdpResonseDetails(final String requestId, final PdpResponseStatus status,
+ final String responseMessage) {
+ final PdpResponseDetails pdpResponseDetails = new PdpResponseDetails();
+ pdpResponseDetails.setResponseTo(requestId);
+ pdpResponseDetails.setResponseStatus(status);
+ pdpResponseDetails.setResponseMessage(responseMessage);
+ return pdpResponseDetails;
+ }
+
+ /**
+ * Method to retrieve list of ToscaPolicyIdentifier from the list of ToscaPolicy.
+ *
+ * @param policies list of ToscaPolicy
+ *
+ * @return policyTypeIdentifiers
+ */
+ public List<ToscaPolicyIdentifier> getToscaPolicyIdentifiers(final List<ToscaPolicy> policies) {
+ final List<ToscaPolicyIdentifier> policyIdentifiers = new ArrayList<>(policies.size());
+ for (final ToscaPolicy policy : policies) {
+ if (null != policy.getName() && null != policy.getVersion()) {
+ policyIdentifiers.add(new ToscaPolicyIdentifier(policy.getName(), policy.getVersion()));
+ }
+ }
+ return policyIdentifiers;
+ }
+}
diff --git a/models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler/PdpStateChangeMessageHandler.java b/models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler/PdpStateChangeMessageHandler.java
new file mode 100644
index 000000000..ec1fa25a3
--- /dev/null
+++ b/models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler/PdpStateChangeMessageHandler.java
@@ -0,0 +1,125 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.sim.pdp.handler;
+
+import java.util.List;
+
+import org.onap.policy.common.utils.services.Registry;
+import org.onap.policy.models.pdp.concepts.PdpResponseDetails;
+import org.onap.policy.models.pdp.concepts.PdpStateChange;
+import org.onap.policy.models.pdp.concepts.PdpStatus;
+import org.onap.policy.models.pdp.enums.PdpResponseStatus;
+import org.onap.policy.models.pdp.enums.PdpState;
+import org.onap.policy.models.sim.pdp.PdpSimulatorConstants;
+import org.onap.policy.models.sim.pdp.comm.PdpStatusPublisher;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This class supports the handling of pdp state change messages.
+ *
+ * @author Ajith Sreekumar (ajith.sreekumar@est.tech)
+ */
+public class PdpStateChangeMessageHandler {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(PdpStateChangeMessageHandler.class);
+
+ /**
+ * Method which handles a pdp state change event from PAP.
+ *
+ * @param pdpStateChangeMsg pdp state change message
+ */
+ public void handlePdpStateChangeEvent(final PdpStateChange pdpStateChangeMsg) {
+ final PdpStatus pdpStatusContext = Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_OBJECT, PdpStatus.class);
+ final PdpStatusPublisher pdpStatusPublisher = Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_PUBLISHER);
+ final PdpMessageHandler pdpMessageHandler = new PdpMessageHandler();
+ PdpResponseDetails pdpResponseDetails = null;
+ if (pdpStateChangeMsg.appliesTo(pdpStatusContext.getName(), pdpStatusContext.getPdpGroup(),
+ pdpStatusContext.getPdpSubgroup())) {
+ switch (pdpStateChangeMsg.getState()) {
+ case PASSIVE:
+ pdpResponseDetails = handlePassiveState(pdpStateChangeMsg, pdpStatusContext, pdpMessageHandler);
+ break;
+ case ACTIVE:
+ pdpResponseDetails = handleActiveState(pdpStateChangeMsg, pdpStatusContext, pdpMessageHandler);
+ break;
+ default:
+ break;
+ }
+ final PdpStatus pdpStatus = pdpMessageHandler.createPdpStatusFromContext();
+ pdpStatus.setResponse(pdpResponseDetails);
+ pdpStatus.setDescription("Pdp status response message for PdpStateChange");
+ pdpStatusPublisher.send(pdpStatus);
+ }
+ }
+
+ /**
+ * Method to handle when the new state from pap is active.
+ *
+ * @param pdpStateChangeMsg pdp state change message
+ * @param pdpStatusContext pdp status object in memory
+ * @param pdpMessageHandler the pdp message handler
+ * @return pdpResponseDetails pdp response
+ */
+ private PdpResponseDetails handleActiveState(final PdpStateChange pdpStateChangeMsg,
+ final PdpStatus pdpStatusContext, final PdpMessageHandler pdpMessageHandler) {
+ PdpResponseDetails pdpResponseDetails = null;
+ if (pdpStatusContext.getState().equals(PdpState.ACTIVE)) {
+ pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpStateChangeMsg.getRequestId(),
+ PdpResponseStatus.SUCCESS, "Pdp already in active state");
+ } else {
+ final List<ToscaPolicy> policies = Registry.get(PdpSimulatorConstants.REG_PDP_TOSCA_POLICY_LIST);
+ if (policies.isEmpty()) {
+ pdpStatusContext.setState(PdpState.ACTIVE);
+ pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpStateChangeMsg.getRequestId(),
+ PdpResponseStatus.SUCCESS, "State changed to active. No policies found.");
+ } else {
+ pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpStateChangeMsg.getRequestId(),
+ PdpResponseStatus.SUCCESS, "Pdp started. State changed to active.");
+ pdpStatusContext.setState(PdpState.ACTIVE);
+ }
+ }
+ return pdpResponseDetails;
+ }
+
+ /**
+ * Method to handle when the new state from pap is passive.
+ *
+ * @param pdpStateChangeMsg pdp state change message
+ * @param pdpStatusContext pdp status object in memory
+ * @param pdpMessageHandler the pdp message handler
+ * @return pdpResponseDetails pdp response
+ */
+ private PdpResponseDetails handlePassiveState(final PdpStateChange pdpStateChangeMsg,
+ final PdpStatus pdpStatusContext, final PdpMessageHandler pdpMessageHandler) {
+ PdpResponseDetails pdpResponseDetails = null;
+ if (pdpStatusContext.getState().equals(PdpState.PASSIVE)) {
+ pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpStateChangeMsg.getRequestId(),
+ PdpResponseStatus.SUCCESS, "Pdp already in passive state");
+ } else {
+ pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpStateChangeMsg.getRequestId(),
+ PdpResponseStatus.SUCCESS, "Pdp state changed from Active to Passive.");
+ pdpStatusContext.setState(PdpState.PASSIVE);
+ }
+ return pdpResponseDetails;
+ }
+}
diff --git a/models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler/PdpUpdateMessageHandler.java b/models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler/PdpUpdateMessageHandler.java
new file mode 100644
index 000000000..94499f43d
--- /dev/null
+++ b/models-sim/policy-models-sim-pdp/src/main/java/org/onap/policy/models/sim/pdp/handler/PdpUpdateMessageHandler.java
@@ -0,0 +1,121 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.sim.pdp.handler;
+
+import java.util.List;
+
+
+import org.onap.policy.common.endpoints.event.comm.TopicSink;
+import org.onap.policy.common.utils.services.Registry;
+import org.onap.policy.models.pdp.concepts.PdpResponseDetails;
+import org.onap.policy.models.pdp.concepts.PdpStatus;
+import org.onap.policy.models.pdp.concepts.PdpUpdate;
+import org.onap.policy.models.pdp.enums.PdpResponseStatus;
+import org.onap.policy.models.pdp.enums.PdpState;
+import org.onap.policy.models.sim.pdp.PdpSimulatorConstants;
+import org.onap.policy.models.sim.pdp.comm.PdpStatusPublisher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This class supports the handling of pdp update messages.
+ *
+ * @author Ajith Sreekumar (ajith.sreekumar@est.tech)
+ */
+public class PdpUpdateMessageHandler {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(PdpUpdateMessageHandler.class);
+
+ /**
+ * Method which handles a pdp update event from PAP.
+ *
+ * @param pdpUpdateMsg pdp update message
+ */
+ public void handlePdpUpdateEvent(final PdpUpdate pdpUpdateMsg) {
+ final PdpMessageHandler pdpMessageHandler = new PdpMessageHandler();
+ final PdpStatus pdpStatusContext = Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_OBJECT, PdpStatus.class);
+ PdpResponseDetails pdpResponseDetails = null;
+ if (pdpUpdateMsg.appliesTo(pdpStatusContext.getName(), pdpStatusContext.getPdpGroup(),
+ pdpStatusContext.getPdpSubgroup())) {
+ final PdpStatusPublisher pdpStatusPublisher = Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_PUBLISHER);
+ if (checkIfAlreadyHandled(pdpUpdateMsg, pdpStatusContext)) {
+ pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpUpdateMsg.getRequestId(),
+ PdpResponseStatus.SUCCESS, "Pdp already updated");
+ } else {
+ if (null != pdpUpdateMsg.getPdpHeartbeatIntervalMs() && pdpUpdateMsg.getPdpHeartbeatIntervalMs() > 0
+ && pdpStatusPublisher.getInterval() != pdpUpdateMsg.getPdpHeartbeatIntervalMs()) {
+ updateInterval(pdpUpdateMsg.getPdpHeartbeatIntervalMs());
+ }
+ pdpStatusContext.setPdpGroup(pdpUpdateMsg.getPdpGroup());
+ pdpStatusContext.setPdpSubgroup(pdpUpdateMsg.getPdpSubgroup());
+ pdpStatusContext
+ .setPolicies(new PdpMessageHandler().getToscaPolicyIdentifiers(pdpUpdateMsg.getPolicies()));
+ if (pdpStatusContext.getState().equals(PdpState.ACTIVE)) {
+ if (!pdpUpdateMsg.getPolicies().isEmpty()) {
+ pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpUpdateMsg.getRequestId(),
+ PdpResponseStatus.SUCCESS, "Pdp engine started and policies are running.");
+ }
+ }
+ Registry.registerOrReplace(PdpSimulatorConstants.REG_PDP_TOSCA_POLICY_LIST, pdpUpdateMsg.getPolicies());
+ if (null == pdpResponseDetails) {
+ pdpResponseDetails = pdpMessageHandler.createPdpResonseDetails(pdpUpdateMsg.getRequestId(),
+ PdpResponseStatus.SUCCESS, "Pdp update successful.");
+ }
+ }
+ final PdpStatusPublisher pdpStatusPublisherTemp =
+ Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_PUBLISHER);
+ final PdpStatus pdpStatus = pdpMessageHandler.createPdpStatusFromContext();
+ pdpStatus.setResponse(pdpResponseDetails);
+ pdpStatus.setDescription("Pdp status response message for PdpUpdate");
+ pdpStatusPublisherTemp.send(pdpStatus);
+ }
+ }
+
+
+ /**
+ * Method checks if the Pdp update message is already handled by checking the values in the context.
+ *
+ * @param pdpUpdateMsg pdp update message received from pap
+ * @param pdpStatusContext values saved in context memory
+ * @return boolean flag which tells if the information is same or not
+ */
+ private boolean checkIfAlreadyHandled(final PdpUpdate pdpUpdateMsg, final PdpStatus pdpStatusContext) {
+ return null != pdpStatusContext.getPdpGroup()
+ && pdpStatusContext.getPdpGroup().equals(pdpUpdateMsg.getPdpGroup())
+ && null != pdpStatusContext.getPdpSubgroup()
+ && pdpStatusContext.getPdpSubgroup().equals(pdpUpdateMsg.getPdpSubgroup())
+ && null != pdpStatusContext.getPolicies() && new PdpMessageHandler()
+ .getToscaPolicyIdentifiers(pdpUpdateMsg.getPolicies()).equals(pdpStatusContext.getPolicies());
+ }
+
+ /**
+ * Method to update the time interval used by the timer task.
+ *
+ * @param interval time interval received in the pdp update message from pap
+ */
+ public void updateInterval(final long interval) {
+ final PdpStatusPublisher pdpStatusPublisher = Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_PUBLISHER);
+ pdpStatusPublisher.terminate();
+ final List<TopicSink> topicSinks = Registry.get(PdpSimulatorConstants.REG_PDP_TOPIC_SINKS);
+ Registry.registerOrReplace(PdpSimulatorConstants.REG_PDP_STATUS_PUBLISHER,
+ new PdpStatusPublisher(topicSinks, interval));
+ }
+}