Use lombok in xacml-pdp
[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.NoArgsConstructor;
37 import lombok.Setter;
38 import lombok.ToString;
39 import org.onap.policy.models.decisions.concepts.DecisionRequest;
40 import org.onap.policy.pdp.xacml.application.common.ToscaPolicyConversionException;
41
42 @Getter
43 @Setter
44 @ToString
45 @NoArgsConstructor
46 @XACMLRequest(ReturnPolicyIdList = true)
47 public class GuardPolicyRequest {
48     private static final String STR_GUARD = "guard";
49
50     @XACMLSubject(includeInResults = true)
51     private String onapName;
52
53     @XACMLSubject(includeInResults = true, attributeId = "urn:org:onap:onap-component")
54     private String onapComponent;
55
56     @XACMLSubject(includeInResults = true, attributeId = "urn:org:onap:onap-instance")
57     private String onapInstance;
58
59     @XACMLSubject(includeInResults = true, attributeId = "urn:org:onap:guard:request:request-id")
60     private String requestId;
61
62     @XACMLAction
63     private String action = STR_GUARD;
64
65     @XACMLEnvironment(includeInResults = true,
66             attributeId = "urn:oasis:names:tc:xacml:1.0:environment:current-dateTime")
67     private OffsetDateTime currentDateTime;
68
69     @XACMLEnvironment(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:environment:current-date")
70     private LocalDate currentDate;
71
72     @XACMLEnvironment(includeInResults = true, attributeId = "urn:oasis:names:tc:xacml:1.0:environment:current-time")
73     private OffsetTime currentTime;
74
75     @XACMLEnvironment(includeInResults = true, attributeId = "urn:org:onap:guard:timezone",
76             datatype = "urn:com:att:research:datatype:zone-offset")
77     private ZoneOffset timeZone;
78
79     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:clname:clname-id")
80     private String clnameId;
81
82     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:actor:actor-id")
83     private String actorId;
84
85     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:operation:operation-id")
86     private String operationId;
87
88     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:target-id")
89     private String targetId;
90
91     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:vf-count")
92     private Integer vfCount;
93
94     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:generic-vnf.vnf-name")
95     private String vnfName;
96
97     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:generic-vnf.vnf-id")
98     private String vnfId;
99
100     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:generic-vnf.vnf-type")
101     private String vnfType;
102
103     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:generic-vnf.nf-naming-code")
104     private String vnfNfNamingCode;
105
106     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:vserver.vserver-id")
107     private String vserverId;
108
109     @XACMLResource(includeInResults = true, attributeId = "urn:org:onap:guard:target:cloud-region.cloud-region-id")
110     private String cloudRegionId;
111
112     public static final String PREFIX_RESOURCE_ATTRIBUTE_ID = "urn:org:onap:guard:target:";
113
114     /**
115      * Parses the DecisionRequest into a StdMetadataPolicyRequest.
116      *
117      * @param decisionRequest Input DecisionRequest
118      * @return StdMetadataPolicyRequest
119      * @throws ToscaPolicyConversionException If we cannot parse the request
120      */
121     @SuppressWarnings("unchecked")
122     public static GuardPolicyRequest createInstance(DecisionRequest decisionRequest)
123             throws ToscaPolicyConversionException {
124         //
125         // Create our return object
126         //
127         var request = new GuardPolicyRequest();
128         //
129         // Add the subject attributes
130         //
131         request.onapName = decisionRequest.getOnapName();
132         request.onapComponent = decisionRequest.getOnapComponent();
133         request.onapInstance = decisionRequest.getOnapInstance();
134         request.requestId = decisionRequest.getRequestId();
135         request.currentDateTime = decisionRequest.getCurrentDateTime();
136         request.currentDate = decisionRequest.getCurrentDate();
137         request.currentTime = decisionRequest.getCurrentTime();
138         request.timeZone = decisionRequest.getTimeZone();
139         //
140         // Now pull from the resources
141         //
142         Map<String, Object> resources = decisionRequest.getResource();
143         //
144         // Just in case nothing is in there
145         //
146         if (resources == null || resources.isEmpty() || !resources.containsKey(STR_GUARD)) {
147             //
148             // Perhaps we throw an exception and then caller
149             // can put together a response
150             //
151             return request;
152         }
153         Map<String, Object> guard = (Map<String, Object>) resources.get(STR_GUARD);
154         if (guard == null || guard.isEmpty()) {
155             //
156             // again, same problem throw an exception?
157             //
158             return request;
159         }
160         //
161         // Find our fields
162         //
163         findFields(request, guard);
164         findFilterFields(request, guard);
165         return request;
166     }
167
168     protected static GuardPolicyRequest findFields(GuardPolicyRequest request, Map<String, Object> guard)
169             throws ToscaPolicyConversionException {
170         if (guard.containsKey("actor")) {
171             request.actorId = guard.get("actor").toString();
172         }
173         if (guard.containsKey("operation")) {
174             request.operationId = guard.get("operation").toString();
175         }
176         if (guard.containsKey("clname")) {
177             request.clnameId = guard.get("clname").toString();
178         }
179         if (guard.containsKey("target")) {
180             request.targetId = guard.get("target").toString();
181         }
182         if (guard.containsKey("vfCount")) {
183             try {
184                 request.vfCount = Integer.decode(guard.get("vfCount").toString());
185             } catch (NumberFormatException e) {
186                 throw new ToscaPolicyConversionException("Failed to decode vfCount", e);
187             }
188         }
189
190         return request;
191     }
192
193     protected static GuardPolicyRequest findFilterFields(GuardPolicyRequest request, Map<String, Object> guard) {
194         if (guard.containsKey("generic-vnf.vnf-name")) {
195             request.vnfName = guard.get("generic-vnf.vnf-name").toString();
196         }
197         if (guard.containsKey("generic-vnf.vnf-id")) {
198             request.vnfId = guard.get("generic-vnf.vnf-id").toString();
199         }
200         if (guard.containsKey("generic-vnf.vnf-type")) {
201             request.vnfType = guard.get("generic-vnf.vnf-type").toString();
202         }
203         if (guard.containsKey("generic-vnf.nf-naming-code")) {
204             request.vnfNfNamingCode = guard.get("generic-vnf.nf-naming-code").toString();
205         }
206         if (guard.containsKey("vserver.vserver-id")) {
207             request.vserverId = guard.get("vserver.vserver-id").toString();
208         }
209         if (guard.containsKey("cloud-region.cloud-region-id")) {
210             request.cloudRegionId = guard.get("cloud-region.cloud-region-id").toString();
211         }
212         return request;
213     }
214 }