d440e1cee9a8f91b6b2fe767839f07093e165790
[policy/api.git] / main / src / main / java / org / onap / policy / api / main / rest / ApiRestController.java
1 /*-\r
2  * ============LICENSE_START=======================================================\r
3  * ONAP Policy API\r
4  * ================================================================================\r
5  * Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved.\r
6  * Modifications Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved.\r
7  * Modifications Copyright (C) 2020-2022 Nordix Foundation.\r
8  * Modifications Copyright (C) 2020-2022 Bell Canada. All rights reserved.\r
9  * ================================================================================\r
10  * Licensed under the Apache License, Version 2.0 (the "License");\r
11  * you may not use this file except in compliance with the License.\r
12  * You may obtain a copy of the License at\r
13  *\r
14  *      http://www.apache.org/licenses/LICENSE-2.0\r
15  *\r
16  * Unless required by applicable law or agreed to in writing, software\r
17  * distributed under the License is distributed on an "AS IS" BASIS,\r
18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
19  * See the License for the specific language governing permissions and\r
20  * limitations under the License.\r
21  *\r
22  * SPDX-License-Identifier: Apache-2.0\r
23  * ============LICENSE_END=========================================================\r
24  */\r
25 \r
26 package org.onap.policy.api.main.rest;\r
27 \r
28 import java.util.List;\r
29 import java.util.UUID;\r
30 import javax.ws.rs.core.Response.Status;\r
31 import lombok.RequiredArgsConstructor;\r
32 import org.onap.policy.api.main.exception.PolicyApiRuntimeException;\r
33 import org.onap.policy.api.main.rest.genapi.PolicyDesignApi;\r
34 import org.onap.policy.api.main.rest.provider.healthcheck.HealthCheckProvider;\r
35 import org.onap.policy.api.main.rest.provider.statistics.ApiStatisticsManager;\r
36 import org.onap.policy.api.main.rest.provider.statistics.StatisticsProvider;\r
37 import org.onap.policy.api.main.rest.provider.statistics.StatisticsReport;\r
38 import org.onap.policy.api.main.service.ToscaServiceTemplateService;\r
39 import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure;\r
40 import org.onap.policy.common.endpoints.report.HealthCheckReport;\r
41 import org.onap.policy.common.endpoints.utils.NetLoggerUtil;\r
42 import org.onap.policy.common.endpoints.utils.NetLoggerUtil.EventType;\r
43 import org.onap.policy.models.base.PfModelException;\r
44 import org.onap.policy.models.base.PfModelRuntimeException;\r
45 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;\r
46 import org.springframework.http.HttpMethod;\r
47 import org.springframework.http.HttpStatus;\r
48 import org.springframework.http.ResponseEntity;\r
49 import org.springframework.web.bind.annotation.RestController;\r
50 \r
51 /**\r
52  * Class to provide REST API services.\r
53  *\r
54  * @author Chenfei Gao (cgao@research.att.com)\r
55  */\r
56 @RestController\r
57 @RequiredArgsConstructor\r
58 public class ApiRestController extends CommonRestController implements PolicyDesignApi {\r
59 \r
60     private enum Target {\r
61         POLICY,\r
62         POLICY_TYPE,\r
63         OTHER\r
64     }\r
65 \r
66     private final ToscaServiceTemplateService toscaServiceTemplateService;\r
67     private final HealthCheckProvider healthCheckProvider;\r
68     private final ApiStatisticsManager mgr;\r
69     private final StatisticsProvider statisticsProvider;\r
70 \r
71     /**\r
72      * Retrieves the healthcheck status of the API component.\r
73      *\r
74      * @return the Response object containing the results of the API operation\r
75      */\r
76     @Override\r
77     public ResponseEntity<HealthCheckReport> getHealthCheck(UUID requestId) {\r
78         final var report = healthCheckProvider.performHealthCheck();\r
79         updateApiStatisticsCounter(Target.OTHER, HttpStatus.resolve(report.getCode()), HttpMethod.GET);\r
80         return makeResponse(requestId, report, report.getCode());\r
81     }\r
82 \r
83     /**\r
84      * Retrieves the statistics report of the API component.\r
85      *\r
86      * @return the Response object containing the results of the API operation\r
87      */\r
88     @Override\r
89     public ResponseEntity<StatisticsReport> getStatistics(UUID requestId) {\r
90         updateApiStatisticsCounter(Target.OTHER, HttpStatus.OK, HttpMethod.GET);\r
91         return makeOkResponse(requestId, statisticsProvider.fetchCurrentStatistics());\r
92     }\r
93 \r
94     /**\r
95      * Retrieves all available policy types.\r
96      *\r
97      * @return the Response object containing the results of the API operation\r
98      */\r
99     @Override\r
100     public ResponseEntity<ToscaServiceTemplate> getAllPolicyTypes(UUID requestId) {\r
101         try {\r
102             ToscaServiceTemplate serviceTemplate = toscaServiceTemplateService.fetchPolicyTypes(null, null);\r
103             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.OK, HttpMethod.GET);\r
104             return makeOkResponse(requestId, serviceTemplate);\r
105         } catch (PfModelException | PfModelRuntimeException pfme) {\r
106             final var msg = "GET /policytypes";\r
107             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
108                 .getStatusCode()), HttpMethod.GET);\r
109             throw new PolicyApiRuntimeException(msg, pfme.getCause(), pfme.getErrorResponse(), requestId);\r
110         }\r
111     }\r
112 \r
113     /**\r
114      * Retrieves all versions of a particular policy type.\r
115      *\r
116      * @param policyTypeId the ID of specified policy type\r
117      *\r
118      * @return the Response object containing the results of the API operation\r
119      */\r
120     @Override\r
121     public ResponseEntity<ToscaServiceTemplate> getAllVersionsOfPolicyType(\r
122             String policyTypeId,\r
123             UUID requestId) {\r
124         try {\r
125             ToscaServiceTemplate serviceTemplate = toscaServiceTemplateService.fetchPolicyTypes(policyTypeId, null);\r
126             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.OK, HttpMethod.GET);\r
127             return makeOkResponse(requestId, serviceTemplate);\r
128         } catch (PfModelException | PfModelRuntimeException pfme) {\r
129             var msg = String.format("GET /policytypes/%s", policyTypeId);\r
130             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
131                 .getStatusCode()), HttpMethod.GET);\r
132             throw new PolicyApiRuntimeException(msg, pfme.getCause(), pfme.getErrorResponse(), requestId);\r
133         }\r
134     }\r
135 \r
136     /**\r
137      * Retrieves specified version of a particular policy type.\r
138      *\r
139      * @param policyTypeId the ID of specified policy type\r
140      * @param versionId the version of specified policy type\r
141      *\r
142      * @return the Response object containing the results of the API operation\r
143      */\r
144     @Override\r
145     public ResponseEntity<ToscaServiceTemplate> getSpecificVersionOfPolicyType(\r
146             String policyTypeId,\r
147             String versionId,\r
148             UUID requestId) {\r
149         try {\r
150             ToscaServiceTemplate serviceTemplate =\r
151                 toscaServiceTemplateService.fetchPolicyTypes(policyTypeId, versionId);\r
152             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.OK, HttpMethod.GET);\r
153             return makeOkResponse(requestId, serviceTemplate);\r
154         } catch (PfModelException | PfModelRuntimeException pfme) {\r
155             var msg = String.format("GET /policytypes/%s/versions/%s", policyTypeId, versionId);\r
156             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
157                 .getStatusCode()), HttpMethod.GET);\r
158             throw new PolicyApiRuntimeException(msg, pfme.getCause(), pfme.getErrorResponse(), requestId);\r
159         }\r
160     }\r
161 \r
162     /**\r
163      * Retrieves latest version of a particular policy type.\r
164      *\r
165      * @param policyTypeId the ID of specified policy type\r
166      *\r
167      * @return the Response object containing the results of the API operation\r
168      */\r
169     @Override\r
170     public ResponseEntity<ToscaServiceTemplate> getLatestVersionOfPolicyType(\r
171             String policyTypeId,\r
172             UUID requestId) {\r
173         try {\r
174             ToscaServiceTemplate serviceTemplate = toscaServiceTemplateService.fetchLatestPolicyTypes(policyTypeId);\r
175             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.OK, HttpMethod.GET);\r
176             return makeOkResponse(requestId, serviceTemplate);\r
177         } catch (PfModelException | PfModelRuntimeException pfme) {\r
178             var msg = String.format("GET /policytypes/%s/versions/latest", policyTypeId);\r
179             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
180                 .getStatusCode()), HttpMethod.GET);\r
181             throw new PolicyApiRuntimeException(msg, pfme.getCause(), pfme.getErrorResponse(), requestId);\r
182         }\r
183     }\r
184 \r
185     /**\r
186      * Creates a new policy type.\r
187      *\r
188      * @param body the body of policy type following TOSCA definition\r
189      *\r
190      * @return the Response object containing the results of the API operation\r
191      */\r
192     @Override\r
193     public ResponseEntity<ToscaServiceTemplate> createPolicyType(\r
194             ToscaServiceTemplate body,\r
195             UUID requestId) {\r
196         if (NetLoggerUtil.getNetworkLogger().isInfoEnabled()) {\r
197             NetLoggerUtil.log(EventType.IN, CommInfrastructure.REST, "/policytypes", toJson(body));\r
198         }\r
199         try {\r
200             ToscaServiceTemplate serviceTemplate = toscaServiceTemplateService.createPolicyType(body);\r
201             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.OK, HttpMethod.POST);\r
202             return makeOkResponse(requestId, serviceTemplate);\r
203         } catch (PfModelRuntimeException pfme) {\r
204             final var msg = "POST /policytypes";\r
205             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
206                 .getStatusCode()), HttpMethod.POST);\r
207             throw new PolicyApiRuntimeException(msg, pfme.getCause(), pfme.getErrorResponse(), requestId);\r
208         }\r
209     }\r
210 \r
211     /**\r
212      * Deletes specified version of a particular policy type.\r
213      *\r
214      * @param policyTypeId the ID of specified policy type\r
215      * @param versionId the version of specified policy type\r
216      *\r
217      * @return the Response object containing the results of the API operation\r
218      */\r
219     @Override\r
220     public ResponseEntity<ToscaServiceTemplate> deleteSpecificVersionOfPolicyType(\r
221             String policyTypeId,\r
222             String versionId,\r
223             UUID requestId) {\r
224         try {\r
225             ToscaServiceTemplate serviceTemplate =\r
226                 toscaServiceTemplateService.deletePolicyType(policyTypeId, versionId);\r
227             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.OK, HttpMethod.DELETE);\r
228             return makeOkResponse(requestId, serviceTemplate);\r
229         } catch (PfModelRuntimeException pfme) {\r
230             var msg = String.format("DELETE /policytypes/%s/versions/%s", policyTypeId, versionId);\r
231             updateApiStatisticsCounter(Target.POLICY_TYPE, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
232                 .getStatusCode()), HttpMethod.DELETE);\r
233             throw new PolicyApiRuntimeException(msg, pfme.getCause(), pfme.getErrorResponse(), requestId);\r
234         }\r
235     }\r
236 \r
237     /**\r
238      * Retrieves all versions of a particular policy.\r
239      *\r
240      * @param policyTypeId the ID of specified policy type\r
241      * @param policyTypeVersion the version of specified policy type\r
242      *\r
243      * @return the Response object containing the results of the API operation\r
244      */\r
245     @Override\r
246     public ResponseEntity<ToscaServiceTemplate> getAllPolicies(\r
247             String policyTypeId,\r
248             String policyTypeVersion,\r
249             PolicyFetchMode mode,\r
250             UUID requestId) {\r
251         try {\r
252             ToscaServiceTemplate serviceTemplate =\r
253                 toscaServiceTemplateService.fetchPolicies(policyTypeId, policyTypeVersion, null, null, mode);\r
254             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.GET);\r
255             return makeOkResponse(requestId, serviceTemplate);\r
256         } catch (PfModelException | PfModelRuntimeException pfme) {\r
257             var msg = String.format("GET /policytypes/%s/versions/%s/policies", policyTypeId, policyTypeVersion);\r
258             updateApiStatisticsCounter(Target.POLICY, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
259                 .getStatusCode()), HttpMethod.GET);\r
260             throw new PolicyApiRuntimeException(msg, pfme.getCause(), pfme.getErrorResponse(), requestId);\r
261         }\r
262     }\r
263 \r
264     /**\r
265      * Retrieves all versions of a particular policy.\r
266      *\r
267      * @param policyTypeId the ID of specified policy type\r
268      * @param policyTypeVersion the version of specified policy type\r
269      * @param policyId the ID of specified policy\r
270      *\r
271      * @return the Response object containing the results of the API operation\r
272      */\r
273     @Override\r
274     public ResponseEntity<ToscaServiceTemplate> getAllVersionsOfPolicy(\r
275             String policyId,\r
276             String policyTypeId,\r
277             String policyTypeVersion,\r
278             PolicyFetchMode mode,\r
279             UUID requestId) {\r
280         try {\r
281             ToscaServiceTemplate serviceTemplate =\r
282                 toscaServiceTemplateService.fetchPolicies(policyTypeId, policyTypeVersion, policyId, null, mode);\r
283             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.GET);\r
284             return makeOkResponse(requestId, serviceTemplate);\r
285         } catch (PfModelException | PfModelRuntimeException pfme) {\r
286             var msg = String.format("/policytypes/%s/versions/%s/policies/%s",\r
287                 policyTypeId, policyTypeVersion, policyId);\r
288             updateApiStatisticsCounter(Target.POLICY, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
289                 .getStatusCode()), HttpMethod.GET);\r
290             throw new PolicyApiRuntimeException(msg, pfme.getCause(), pfme.getErrorResponse(), requestId);\r
291         }\r
292     }\r
293 \r
294     /**\r
295      * Retrieves the specified version of a particular policy.\r
296      *\r
297      * @param policyTypeId the ID of specified policy type\r
298      * @param policyTypeVersion the version of specified policy type\r
299      * @param policyId the ID of specified policy\r
300      * @param policyVersion the version of specified policy\r
301      *\r
302      * @return the Response object containing the results of the API operation\r
303      */\r
304     @Override\r
305     public ResponseEntity<ToscaServiceTemplate> getSpecificVersionOfPolicy(\r
306             String policyId,\r
307             String policyTypeId,\r
308             String policyTypeVersion,\r
309             String policyVersion,\r
310             PolicyFetchMode mode,\r
311             UUID requestId) {\r
312         try {\r
313             ToscaServiceTemplate serviceTemplate = toscaServiceTemplateService\r
314                 .fetchPolicies(policyTypeId, policyTypeVersion, policyId, policyVersion, mode);\r
315             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.GET);\r
316             return makeOkResponse(requestId, serviceTemplate);\r
317         } catch (PfModelException | PfModelRuntimeException pfme) {\r
318             var msg = String.format("GET /policytypes/%s/versions/%s/policies/%s/versions/%s",\r
319                 policyTypeId, policyTypeVersion, policyId, policyVersion);\r
320             updateApiStatisticsCounter(Target.POLICY, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
321                 .getStatusCode()), HttpMethod.GET);\r
322             throw new PolicyApiRuntimeException(msg, pfme.getCause(), pfme.getErrorResponse(), requestId);\r
323         }\r
324     }\r
325 \r
326     /**\r
327      * Retrieves the latest version of a particular policy.\r
328      *\r
329      * @param policyTypeId the ID of specified policy type\r
330      * @param policyTypeVersion the version of specified policy type\r
331      * @param policyId the ID of specified policy\r
332      *\r
333      * @return the Response object containing the results of the API operation\r
334      */\r
335     @Override\r
336     public ResponseEntity<ToscaServiceTemplate> getLatestVersionOfPolicy(\r
337             String policyId,\r
338             String policyTypeId,\r
339             String policyTypeVersion,\r
340             PolicyFetchMode mode,\r
341             UUID requestId) {\r
342         try {\r
343             ToscaServiceTemplate serviceTemplate =\r
344                 toscaServiceTemplateService.fetchLatestPolicies(policyTypeId, policyTypeVersion, policyId, mode);\r
345             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.GET);\r
346             return makeOkResponse(requestId, serviceTemplate);\r
347         } catch (PfModelException | PfModelRuntimeException pfme) {\r
348             var msg = String.format("GET /policytypes/%s/versions/%s/policies/%s/versions/latest",\r
349                 policyTypeId, policyTypeVersion, policyId);\r
350             updateApiStatisticsCounter(Target.POLICY, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
351                 .getStatusCode()), HttpMethod.GET);\r
352             throw new PolicyApiRuntimeException(msg, pfme.getCause(), pfme.getErrorResponse(), requestId);\r
353         }\r
354     }\r
355 \r
356     /**\r
357      * Creates a new policy for a particular policy type and version.\r
358      *\r
359      * @param policyTypeId the ID of specified policy type\r
360      * @param policyTypeVersion the version of specified policy type\r
361      * @param body the body of policy following TOSCA definition\r
362      *\r
363      * @return the Response object containing the results of the API operation\r
364      */\r
365     @Override\r
366     public ResponseEntity<ToscaServiceTemplate> createPolicy(\r
367             String policyTypeId,\r
368             String policyTypeVersion,\r
369             ToscaServiceTemplate body,\r
370             UUID requestId) {\r
371         if (NetLoggerUtil.getNetworkLogger().isInfoEnabled()) {\r
372             NetLoggerUtil.log(EventType.IN, CommInfrastructure.REST,\r
373                 "/policytypes/" + policyTypeId + "/versions/" + policyTypeVersion + "/policies", toJson(body));\r
374         }\r
375         try {\r
376             ToscaServiceTemplate serviceTemplate =\r
377                 toscaServiceTemplateService.createPolicy(policyTypeId, policyTypeVersion, body);\r
378             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.POST);\r
379             return makeOkResponse(requestId, serviceTemplate);\r
380         } catch (PfModelRuntimeException pfme) {\r
381             var msg = String.format("POST /policytypes/%s/versions/%s/policies", policyTypeId, policyTypeVersion);\r
382             updateApiStatisticsCounter(Target.POLICY, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
383                 .getStatusCode()), HttpMethod.POST);\r
384             throw new PolicyApiRuntimeException(msg, pfme.getCause(), pfme.getErrorResponse(), requestId);\r
385         }\r
386     }\r
387 \r
388     /**\r
389      * Deletes the specified version of a particular policy.\r
390      *\r
391      * @param policyTypeId the ID of specified policy type\r
392      * @param policyTypeVersion the version of specified policy type\r
393      * @param policyId the ID of specified policy\r
394      * @param policyVersion the version of specified policy\r
395      *\r
396      * @return the Response object containing the results of the API operation\r
397      */\r
398     @Override\r
399     public ResponseEntity<ToscaServiceTemplate> deleteSpecificVersionOfPolicy(\r
400         String policyTypeId,\r
401         String policyTypeVersion,\r
402         String policyId,\r
403         String policyVersion,\r
404         UUID requestId) {\r
405         try {\r
406             ToscaServiceTemplate serviceTemplate =\r
407                 toscaServiceTemplateService.deletePolicy(policyTypeId, policyTypeVersion, policyId, policyVersion);\r
408             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.DELETE);\r
409             return makeOkResponse(requestId, serviceTemplate);\r
410         } catch (PfModelRuntimeException pfme) {\r
411             var msg = String.format("DELETE /policytypes/%s/versions/%s/policies/%s/versions/%s",\r
412                 policyTypeId, policyTypeVersion, policyId, policyVersion);\r
413             updateApiStatisticsCounter(Target.POLICY, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
414                 .getStatusCode()), HttpMethod.DELETE);\r
415             throw new PolicyApiRuntimeException(msg, pfme.getCause(), pfme.getErrorResponse(), requestId);\r
416         }\r
417     }\r
418 \r
419     /**\r
420      * Retrieves all the available policies.\r
421      *\r
422      * @return the Response object containing the results of the API operation\r
423      */\r
424     @Override\r
425     public ResponseEntity<ToscaServiceTemplate> getPolicies(\r
426             PolicyFetchMode mode,\r
427             UUID requestId) {\r
428         try {\r
429             ToscaServiceTemplate serviceTemplate =\r
430                 toscaServiceTemplateService.fetchPolicies(null, null, null, null, mode);\r
431             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.GET);\r
432             return makeOkResponse(requestId, serviceTemplate);\r
433         } catch (PfModelException | PfModelRuntimeException pfme) {\r
434             final var msg = "GET /policies/ --";\r
435             updateApiStatisticsCounter(Target.POLICY, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
436                 .getStatusCode()), HttpMethod.GET);\r
437             if (pfme.getErrorResponse().getResponseCode().equals(Status.NOT_FOUND)) {\r
438                 pfme.getErrorResponse().setErrorMessage(ERROR_MESSAGE_NO_POLICIES_FOUND);\r
439                 pfme.getErrorResponse().setErrorDetails(List.of(ERROR_MESSAGE_NO_POLICIES_FOUND));\r
440             }\r
441             throw new PolicyApiRuntimeException(msg, pfme.getCause(), pfme.getErrorResponse(), requestId);\r
442         }\r
443     }\r
444 \r
445     /**\r
446      * Retrieves the specified version of a particular policy.\r
447      *\r
448      * @param policyId the Name of specified policy\r
449      * @param policyVersion the version of specified policy\r
450      *\r
451      * @return the Response object containing the results of the API operation\r
452      */\r
453     @Override\r
454     public ResponseEntity<ToscaServiceTemplate> getSpecificPolicy(\r
455             String policyId,\r
456             String policyVersion,\r
457             PolicyFetchMode mode,\r
458             UUID requestId) {\r
459         try {\r
460             ToscaServiceTemplate serviceTemplate =\r
461                 toscaServiceTemplateService.fetchPolicies(null, null, policyId, policyVersion, mode);\r
462             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.GET);\r
463             return makeOkResponse(requestId, serviceTemplate);\r
464         } catch (PfModelException | PfModelRuntimeException pfme) {\r
465             var msg = String.format("GET /policies/%s/versions/%s", policyId, policyVersion);\r
466             updateApiStatisticsCounter(Target.POLICY, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
467                 .getStatusCode()), HttpMethod.GET);\r
468             throw new PolicyApiRuntimeException(msg, pfme.getCause(), pfme.getErrorResponse(), requestId);\r
469         }\r
470     }\r
471 \r
472     /**\r
473      * Creates one or more new policies in one call.\r
474      *\r
475      * @param body the body of policy following TOSCA definition\r
476      *\r
477      * @return the Response object containing the results of the API operation\r
478      */\r
479     @Override\r
480     public ResponseEntity<ToscaServiceTemplate> createPolicies(\r
481         ToscaServiceTemplate body,\r
482         UUID requestId) {\r
483         if (NetLoggerUtil.getNetworkLogger().isInfoEnabled()) {\r
484             NetLoggerUtil.log(EventType.IN, CommInfrastructure.REST, "/policies", toJson(body));\r
485         }\r
486         try {\r
487             ToscaServiceTemplate serviceTemplate = toscaServiceTemplateService.createPolicies(body);\r
488             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.POST);\r
489             return makeOkResponse(requestId, serviceTemplate);\r
490         } catch (PfModelRuntimeException pfme) {\r
491             final var msg = "POST /policies";\r
492             updateApiStatisticsCounter(Target.POLICY, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
493                 .getStatusCode()), HttpMethod.POST);\r
494             throw new PolicyApiRuntimeException(msg, pfme.getCause(), pfme.getErrorResponse(), requestId);\r
495         }\r
496     }\r
497 \r
498     /**\r
499      * Deletes the specified version of a particular policy.\r
500      *\r
501      * @param policyId the ID of specified policy\r
502      * @param policyVersion the version of specified policy\r
503      *\r
504      * @return the Response object containing the results of the API operation\r
505      */\r
506     @Override\r
507     public ResponseEntity<ToscaServiceTemplate> deleteSpecificPolicy(\r
508         String policyId,\r
509         String policyVersion,\r
510         UUID requestId) {\r
511         try {\r
512             ToscaServiceTemplate serviceTemplate =\r
513                 toscaServiceTemplateService.deletePolicy(null, null, policyId, policyVersion);\r
514             updateApiStatisticsCounter(Target.POLICY, HttpStatus.OK, HttpMethod.DELETE);\r
515             return makeOkResponse(requestId, serviceTemplate);\r
516         } catch (PfModelRuntimeException pfme) {\r
517             var msg = String.format("DELETE /policies/%s/versions/%s", policyId, policyVersion);\r
518             updateApiStatisticsCounter(Target.POLICY, HttpStatus.resolve(pfme.getErrorResponse().getResponseCode()\r
519                 .getStatusCode()), HttpMethod.DELETE);\r
520             throw new PolicyApiRuntimeException(msg, pfme.getCause(), pfme.getErrorResponse(), requestId);\r
521         }\r
522     }\r
523 \r
524     private void updateApiStatisticsCounter(Target target, HttpStatus result, HttpMethod http) {\r
525         mgr.updateTotalApiCallCount();\r
526         switch (target) {\r
527             case POLICY:\r
528                 updatePolicyStats(result, http);\r
529                 break;\r
530             case POLICY_TYPE:\r
531                 updatePolicyTypeStats(result, http);\r
532                 break;\r
533             default:\r
534                 mgr.updateApiCallSuccessCount();\r
535                 break;\r
536         }\r
537     }\r
538 \r
539     private void updatePolicyStats(HttpStatus result, HttpMethod http) {\r
540         if (result.equals(HttpStatus.OK)) {\r
541             switch (http) {\r
542                 case GET:\r
543                     mgr.updateApiCallSuccessCount();\r
544                     mgr.updateTotalPolicyGetCount();\r
545                     mgr.updatePolicyGetSuccessCount();\r
546                     break;\r
547                 case POST:\r
548                     mgr.updateApiCallSuccessCount();\r
549                     mgr.updateTotalPolicyPostCount();\r
550                     mgr.updatePolicyPostSuccessCount();\r
551                     break;\r
552                 case DELETE:\r
553                     mgr.updateApiCallSuccessCount();\r
554                     mgr.updateTotalPolicyDeleteCount();\r
555                     mgr.updatePolicyDeleteSuccessCount();\r
556                     break;\r
557                 default:\r
558                     mgr.updateApiCallSuccessCount();\r
559                     break;\r
560             }\r
561         } else {\r
562             switch (http) {\r
563                 case GET:\r
564                     mgr.updateApiCallFailureCount();\r
565                     mgr.updateTotalPolicyGetCount();\r
566                     mgr.updatePolicyGetFailureCount();\r
567                     break;\r
568                 case POST:\r
569                     mgr.updateApiCallFailureCount();\r
570                     mgr.updateTotalPolicyPostCount();\r
571                     mgr.updatePolicyPostFailureCount();\r
572                     break;\r
573                 case DELETE:\r
574                     mgr.updateApiCallFailureCount();\r
575                     mgr.updateTotalPolicyDeleteCount();\r
576                     mgr.updatePolicyDeleteFailureCount();\r
577                     break;\r
578                 default:\r
579                     mgr.updateApiCallFailureCount();\r
580                     break;\r
581             }\r
582         }\r
583     }\r
584 \r
585     private void updatePolicyTypeStats(HttpStatus result, HttpMethod http) {\r
586         if (result.equals(HttpStatus.OK)) {\r
587             switch (http) {\r
588                 case GET:\r
589                     mgr.updateApiCallSuccessCount();\r
590                     mgr.updateTotalPolicyTypeGetCount();\r
591                     mgr.updatePolicyTypeGetSuccessCount();\r
592                     break;\r
593                 case POST:\r
594                     mgr.updateApiCallSuccessCount();\r
595                     mgr.updateTotalPolicyTypePostCount();\r
596                     mgr.updatePolicyTypePostSuccessCount();\r
597                     break;\r
598                 case DELETE:\r
599                     mgr.updateApiCallSuccessCount();\r
600                     mgr.updateTotalPolicyTypeDeleteCount();\r
601                     mgr.updatePolicyTypeDeleteSuccessCount();\r
602                     break;\r
603                 default:\r
604                     mgr.updateApiCallSuccessCount();\r
605                     break;\r
606             }\r
607         } else {\r
608             switch (http) {\r
609                 case GET:\r
610                     mgr.updateApiCallFailureCount();\r
611                     mgr.updateTotalPolicyTypeGetCount();\r
612                     mgr.updatePolicyTypeGetFailureCount();\r
613                     break;\r
614                 case POST:\r
615                     mgr.updateApiCallFailureCount();\r
616                     mgr.updateTotalPolicyTypePostCount();\r
617                     mgr.updatePolicyTypePostFailureCount();\r
618                     break;\r
619                 case DELETE:\r
620                     mgr.updateApiCallFailureCount();\r
621                     mgr.updateTotalPolicyTypeDeleteCount();\r
622                     mgr.updatePolicyTypeDeleteFailureCount();\r
623                     break;\r
624                 default:\r
625                     mgr.updateApiCallFailureCount();\r
626                     break;\r
627             }\r
628         }\r
629     }\r
630 }\r