96b2878acda97e741302634542dee0b77073bf99
[policy/xacml-pdp.git] / applications / guard / src / main / java / org / onap / policy / xacml / pdp / application / guard / GuardPolicyRequest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP
4  * ================================================================================
5  * Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  * SPDX-License-Identifier: Apache-2.0
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.policy.xacml.pdp.application.guard;
24
25 import com.att.research.xacml.std.annotations.XACMLAction;
26 import com.att.research.xacml.std.annotations.XACMLEnvironment;
27 import com.att.research.xacml.std.annotations.XACMLRequest;
28 import com.att.research.xacml.std.annotations.XACMLResource;
29 import com.att.research.xacml.std.annotations.XACMLSubject;
30 import java.time.LocalDate;
31 import java.time.OffsetDateTime;
32 import java.time.OffsetTime;
33 import java.time.ZoneOffset;
34 import java.util.Map;
35 import lombok.Getter;
36 import lombok.Setter;
37 import lombok.ToString;
38 import org.onap.policy.models.decisions.concepts.DecisionRequest;
39 import org.onap.policy.pdp.xacml.application.common.ToscaPolicyConversionException;
40
41 @Getter
42 @Setter
43 @ToString
44 @XACMLRequest(ReturnPolicyIdList = true)
45 public class GuardPolicyRequest {
46     private static final String STR_GUARD = "guard";
47
48     @XACMLSubject(includeInResults = true)
49     private String onapName;
50
51     @XACMLSubject(includeInResults = true, attributeId = "urn:org:onap:onap-component")
52     private String onapComponent;
53
54     @XACMLSubject(includeInResults = true, attributeId = "urn:org:onap:onap-instance")
55     private String onapInstance;
56
57     @XACMLSubject(includeInResults = true, attributeId = "urn:org:onap:guard:request:request-id")
58     private String requestId;
59
60     @XACMLAction
61     private String action = STR_GUARD;
62
63     @XACMLEnvironment(includeInResults = true,
64             attributeId = "urn:oasis:names:tc:xacml:1.0:environment:current-dateTime")
65     private OffsetDateTime currentDateTime;
66
67     @XACMLEnvironment(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:environment:current-date")
68     private LocalDate currentDate;
69
70     @XACMLEnvironment(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:environment:current-time")
71     private OffsetTime currentTime;
72
73     @XACMLEnvironment(includeInResults = true, attributeId = "urn:org:onap:guard:timezone",
74             datatype = "urn:com:att:research:datatype:zone-offset")
75     private ZoneOffset timeZone;
76
77     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:clname:clname-id")
78     private String clnameId;
79
80     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:actor:actor-id")
81     private String actorId;
82
83     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:operation:operation-id")
84     private String operationId;
85
86     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:target-id")
87     private String targetId;
88
89     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:vf-count")
90     private Integer vfCount;
91
92     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:generic-vnf.vnf-name")
93     private String vnfName;
94
95     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:generic-vnf.vnf-id")
96     private String vnfId;
97
98     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:generic-vnf.vnf-type")
99     private String vnfType;
100
101     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:generic-vnf.nf-naming-code")
102     private String vnfNfNamingCode;
103
104     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:vserver.vserver-id")
105     private String vserverId;
106
107     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:cloud-region.cloud-region-id")
108     private String cloudRegionId;
109
110     public static final String PREFIX_RESOURCE_ATTRIBUTE_ID = "urn:org:onap:guard:target:";
111
112     public GuardPolicyRequest() {
113         super();
114     }
115
116     /**
117      * Parses the DecisionRequest into a StdMetadataPolicyRequest.
118      *
119      * @param decisionRequest Input DecisionRequest
120      * @return StdMetadataPolicyRequest
121      * @throws ToscaPolicyConversionException If we cannot parse the request
122      */
123     @SuppressWarnings("unchecked")
124     public static GuardPolicyRequest createInstance(DecisionRequest decisionRequest)
125             throws ToscaPolicyConversionException {
126         //
127         // Create our return object
128         //
129         var request = new GuardPolicyRequest();
130         //
131         // Add the subject attributes
132         //
133         request.onapName = decisionRequest.getOnapName();
134         request.onapComponent = decisionRequest.getOnapComponent();
135         request.onapInstance = decisionRequest.getOnapInstance();
136         request.requestId = decisionRequest.getRequestId();
137         request.currentDateTime = decisionRequest.getCurrentDateTime();
138         request.currentDate = decisionRequest.getCurrentDate();
139         request.currentTime = decisionRequest.getCurrentTime();
140         request.timeZone = decisionRequest.getTimeZone();
141         //
142         // Now pull from the resources
143         //
144         Map<String, Object> resources = decisionRequest.getResource();
145         //
146         // Just in case nothing is in there
147         //
148         if (resources == null || resources.isEmpty() || !resources.containsKey(STR_GUARD)) {
149             //
150             // Perhaps we throw an exception and then caller
151             // can put together a response
152             //
153             return request;
154         }
155         Map<String, Object> guard = (Map<String, Object>) resources.get(STR_GUARD);
156         if (guard == null || guard.isEmpty()) {
157             //
158             // again, same problem throw an exception?
159             //
160             return request;
161         }
162         //
163         // Find our fields
164         //
165         findFields(request, guard);
166         findFilterFields(request, guard);
167         return request;
168     }
169
170     private static GuardPolicyRequest findFields(GuardPolicyRequest request, Map<String, Object> guard)
171             throws ToscaPolicyConversionException {
172         if (guard.containsKey("actor")) {
173             request.actorId = guard.get("actor").toString();
174         }
175         if (guard.containsKey("operation")) {
176             request.operationId = guard.get("operation").toString();
177         }
178         if (guard.containsKey("clname")) {
179             request.clnameId = guard.get("clname").toString();
180         }
181         if (guard.containsKey("target")) {
182             request.targetId = guard.get("target").toString();
183         }
184         if (guard.containsKey("vfCount")) {
185             try {
186                 request.vfCount = Integer.decode(guard.get("vfCount").toString());
187             } catch (NumberFormatException e) {
188                 throw new ToscaPolicyConversionException("Failed to decode vfCount", e);
189             }
190         }
191
192         return request;
193     }
194
195     private static GuardPolicyRequest findFilterFields(GuardPolicyRequest request, Map<String, Object> guard) {
196         if (guard.containsKey("generic-vnf.vnf-name")) {
197             request.vnfName = guard.get("generic-vnf.vnf-name").toString();
198         }
199         if (guard.containsKey("generic-vnf.vnf-id")) {
200             request.vnfId = guard.get("generic-vnf.vnf-id").toString();
201         }
202         if (guard.containsKey("generic-vnf.vnf-type")) {
203             request.vnfType = guard.get("generic-vnf.vnf-type").toString();
204         }
205         if (guard.containsKey("generic-vnf.nf-naming-code")) {
206             request.vnfNfNamingCode = guard.get("generic-vnf.nf-naming-code").toString();
207         }
208         if (guard.containsKey("vserver.vserver-id")) {
209             request.vserverId = guard.get("vserver.vserver-id").toString();
210         }
211         if (guard.containsKey("cloud-region.cloud-region-id")) {
212             request.cloudRegionId = guard.get("cloud-region.cloud-region-id").toString();
213         }
214         return request;
215     }
216 }