/*- * ============LICENSE_START======================================================= * ONAP * ================================================================================ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * 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.pdp.xacml.application.common.std; import com.att.research.xacml.std.annotations.XACMLAction; import com.att.research.xacml.std.annotations.XACMLRequest; import com.att.research.xacml.std.annotations.XACMLResource; import com.att.research.xacml.std.annotations.XACMLSubject; import java.util.ArrayList; import java.util.Collection; import java.util.Map; import java.util.Map.Entry; import lombok.Getter; import lombok.Setter; import lombok.ToString; import org.onap.policy.models.decisions.concepts.DecisionRequest; @Getter @Setter @ToString @XACMLRequest(ReturnPolicyIdList = true) public class StdMatchablePolicyRequest { public static final String POLICY_TYPE_KEY = "policyType"; public static final String POLICY_SCOPE_KEY = "policyScope"; @XACMLSubject(includeInResults = true) private String onapName; @XACMLSubject(attributeId = "urn:org:onap:onap-component", includeInResults = true) private String onapComponent; @XACMLSubject(attributeId = "urn:org:onap:onap-instance", includeInResults = true) private String onapInstance; @XACMLAction() private String action; // // Unfortunately the annotations won't take an object.toString() // So I could not use the ToscaDictionary class to put these id's // into the annotations. // @XACMLResource(attributeId = "urn:org:onap:policy-scope-property", includeInResults = true) Collection policyScopes = new ArrayList<>(); @XACMLResource(attributeId = "urn:org:onap:policy-type-property", includeInResults = true) Collection policyTypes = new ArrayList<>(); public StdMatchablePolicyRequest() { super(); } /** * Parses the DecisionRequest into a MonitoringRequest. * * @param decisionRequest Input DecisionRequest * @return MonitoringRequest */ @SuppressWarnings({"rawtypes", "unchecked"}) public static StdMatchablePolicyRequest createInstance(DecisionRequest decisionRequest) { // // Create our request object // StdMatchablePolicyRequest request = new StdMatchablePolicyRequest(); // // Add the subject attributes // request.onapName = decisionRequest.getOnapName(); request.onapComponent = decisionRequest.getOnapComponent(); request.onapInstance = decisionRequest.getOnapInstance(); // // Add the action attribute // request.action = decisionRequest.getAction(); // // Add the resource attributes // Map resources = decisionRequest.getResource(); for (Entry entrySet : resources.entrySet()) { // // Making an assumption that these two fields are matchable. // Its possible we may have to load the policy type model // and use that to find the fields that are matchable. // if (POLICY_SCOPE_KEY.equals(entrySet.getKey())) { if (entrySet.getValue() instanceof Collection) { addPolicyScopes(request, (Collection) entrySet.getValue()); } else if (entrySet.getValue() instanceof String) { request.policyScopes.add(entrySet.getValue().toString()); } continue; } if (POLICY_TYPE_KEY.equals(entrySet.getKey())) { if (entrySet.getValue() instanceof Collection) { addPolicyTypes(request, (Collection) entrySet.getValue()); } if (entrySet.getValue() instanceof String) { request.policyTypes.add(entrySet.getValue().toString()); } } } return request; } private static StdMatchablePolicyRequest addPolicyScopes(StdMatchablePolicyRequest request, Collection scopes) { for (Object scope : scopes) { request.policyScopes.add(scope.toString()); } return request; } private static StdMatchablePolicyRequest addPolicyTypes(StdMatchablePolicyRequest request, Collection types) { for (Object type : types) { request.policyTypes.add(type.toString()); } return request; } }