2  * ============LICENSE_START=======================================================
 
   3  *  Copyright (C) 2019-2020 Nordix Foundation.
 
   4  *  Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
 
   5  * ================================================================================
 
   6  * Licensed under the Apache License, Version 2.0 (the "License");
 
   7  * you may not use this file except in compliance with the License.
 
   8  * You may obtain a copy of the License at
 
  10  *      http://www.apache.org/licenses/LICENSE-2.0
 
  12  * Unless required by applicable law or agreed to in writing, software
 
  13  * distributed under the License is distributed on an "AS IS" BASIS,
 
  14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  15  * See the License for the specific language governing permissions and
 
  16  * limitations under the License.
 
  18  * SPDX-License-Identifier: Apache-2.0
 
  19  * ============LICENSE_END=========================================================
 
  22 package org.onap.policy.models.sim.pdp.handler;
 
  24 import java.util.ArrayList;
 
  25 import java.util.List;
 
  27 import org.onap.policy.common.utils.services.Registry;
 
  28 import org.onap.policy.models.pdp.concepts.PdpResponseDetails;
 
  29 import org.onap.policy.models.pdp.concepts.PdpStatus;
 
  30 import org.onap.policy.models.pdp.enums.PdpHealthStatus;
 
  31 import org.onap.policy.models.pdp.enums.PdpResponseStatus;
 
  32 import org.onap.policy.models.pdp.enums.PdpState;
 
  33 import org.onap.policy.models.sim.pdp.PdpSimulatorConstants;
 
  34 import org.onap.policy.models.sim.pdp.parameters.PdpStatusParameters;
 
  35 import org.onap.policy.models.sim.pdp.parameters.ToscaPolicyTypeIdentifierParameters;
 
  36 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
 
  37 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;
 
  38 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
 
  41  * This class supports the handling of pdp messages.
 
  43  * @author Ajith Sreekumar (ajith.sreekumar@est.tech)
 
  45 public class PdpMessageHandler {
 
  48      * Method to create PdpStatus message from the parameters which will be saved to the context.
 
  50      * @param instanceId instance id of the pdp
 
  51      * @param pdpStatusParameters pdp status parameters read from the configuration file
 
  53      * @return pdpStatus the pdp status message
 
  55     public PdpStatus createPdpStatusFromParameters(final String instanceId,
 
  56             final PdpStatusParameters pdpStatusParameters) {
 
  57         final PdpStatus pdpStatus = new PdpStatus();
 
  58         pdpStatus.setPdpType(pdpStatusParameters.getPdpType());
 
  59         pdpStatus.setState(PdpState.PASSIVE);
 
  60         pdpStatus.setHealthy(PdpHealthStatus.HEALTHY);
 
  61         pdpStatus.setDescription(pdpStatusParameters.getDescription());
 
  62         pdpStatus.setName(instanceId);
 
  67      * Method to get supported policy types from the parameters.
 
  69      * @param pdpStatusParameters pdp status parameters
 
  70      * @return supportedPolicyTypes list of PolicyTypeIdent
 
  72     private List<ToscaPolicyTypeIdentifier> getSupportedPolicyTypesFromParameters(
 
  73             final PdpStatusParameters pdpStatusParameters) {
 
  74         final List<ToscaPolicyTypeIdentifier> supportedPolicyTypes =
 
  75                 new ArrayList<>(pdpStatusParameters.getSupportedPolicyTypes().size());
 
  76         for (final ToscaPolicyTypeIdentifierParameters policyTypeIdentParameters : pdpStatusParameters
 
  77                 .getSupportedPolicyTypes()) {
 
  78             supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier(policyTypeIdentParameters.getName(),
 
  79                     policyTypeIdentParameters.getVersion()));
 
  81         return supportedPolicyTypes;
 
  85      * Method to create PdpStatus message from the context, which is to be sent by pdp simulator to pap.
 
  87      * @return PdpStatus the pdp status message
 
  89     public PdpStatus createPdpStatusFromContext() {
 
  90         final PdpStatus pdpStatusContext = Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_OBJECT, PdpStatus.class);
 
  91         final PdpStatus pdpStatus = new PdpStatus();
 
  92         pdpStatus.setName(pdpStatusContext.getName());
 
  93         pdpStatus.setPdpType(pdpStatusContext.getPdpType());
 
  94         pdpStatus.setState(pdpStatusContext.getState());
 
  95         pdpStatus.setHealthy(pdpStatusContext.getHealthy());
 
  96         pdpStatus.setDescription(pdpStatusContext.getDescription());
 
  97         pdpStatus.setPolicies(pdpStatusContext.getPolicies());
 
  98         pdpStatus.setPdpGroup(pdpStatusContext.getPdpGroup());
 
  99         pdpStatus.setPdpSubgroup(pdpStatusContext.getPdpSubgroup());
 
 104      * Method to get a final pdp status when the simulator is shut down.
 
 106      * @return PdpStatus the pdp status message
 
 108     public PdpStatus getTerminatedPdpStatus() {
 
 109         final PdpStatus pdpStatusInContext = Registry.get(PdpSimulatorConstants.REG_PDP_STATUS_OBJECT, PdpStatus.class);
 
 110         pdpStatusInContext.setState(PdpState.TERMINATED);
 
 111         pdpStatusInContext.setDescription("Pdp Simulator shutting down.");
 
 112         return createPdpStatusFromContext();
 
 116      * Method create PdpResponseDetails which will be sent as part of pdp status to PAP.
 
 118      * @param requestId request id of the PdpUpdate message from pap
 
 119      * @param status response status to be sent back
 
 120      * @param responseMessage response message to be sent back
 
 122      * @return PdpResponseDetails
 
 124     public PdpResponseDetails createPdpResonseDetails(final String requestId, final PdpResponseStatus status,
 
 125             final String responseMessage) {
 
 126         final PdpResponseDetails pdpResponseDetails = new PdpResponseDetails();
 
 127         pdpResponseDetails.setResponseTo(requestId);
 
 128         pdpResponseDetails.setResponseStatus(status);
 
 129         pdpResponseDetails.setResponseMessage(responseMessage);
 
 130         return pdpResponseDetails;
 
 134      * Method to retrieve list of ToscaPolicyIdentifier from the list of ToscaPolicy.
 
 136      * @param policies list of ToscaPolicy
 
 138      * @return policyTypeIdentifiers
 
 140     public List<ToscaPolicyIdentifier> getToscaPolicyIdentifiers(final List<ToscaPolicy> policies) {
 
 141         final List<ToscaPolicyIdentifier> policyIdentifiers = new ArrayList<>(policies.size());
 
 142         for (final ToscaPolicy policy : policies) {
 
 143             if (null != policy.getName() && null != policy.getVersion()) {
 
 144                 policyIdentifiers.add(new ToscaPolicyIdentifier(policy.getName(), policy.getVersion()));
 
 147         return policyIdentifiers;