Add new LCM actions GetConfig, StartTraffic, StopTraffic, etc
[appc.git] / appc-provider / appc-provider-bundle / src / main / java / org / onap / appc / provider / lcm / service / LicenseManagementService.java
1 /*-\r
2  * ============LICENSE_START=======================================================\r
3  * ONAP : APPC\r
4  * ================================================================================\r
5  * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.\r
6  * ================================================================================\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  * \r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * \r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  * \r
19  * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
20  * ============LICENSE_END=========================================================\r
21  */\r
22 \r
23 package org.onap.appc.provider.lcm.service;\r
24 \r
25 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.Action;\r
26 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.LicenseManagementInput;\r
27 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.LicenseManagementOutput;\r
28 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.LicenseManagementOutputBuilder;\r
29 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.Payload;\r
30 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.action.identifiers.ActionIdentifiers;\r
31 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.CommonHeader;\r
32 import org.onap.appc.requesthandler.objects.RequestHandlerInput;\r
33 import org.onap.appc.executor.objects.LCMCommandStatus;\r
34 import org.onap.appc.util.JsonUtil;\r
35 \r
36 import java.io.IOException;\r
37 import java.util.Map;\r
38 /**\r
39  * Provide LCM command service for LicenseManagement VNF Service\r
40  */\r
41 public class LicenseManagementService extends AbstractBaseService {\r
42 \r
43     /**\r
44      * Constructor\r
45      */\r
46     public LicenseManagementService() {\r
47         super(Action.LicenseManagement);\r
48         logger.debug("LicenseManagementService starts");\r
49     }\r
50 \r
51     /**\r
52      * Process the LicenseManagement request\r
53      * @param input of LicenseManagementInput from the REST API input\r
54      * @return LicenseManagementOutputBuilder which has the process results\r
55      */\r
56     public LicenseManagementOutputBuilder process(LicenseManagementInput input) {\r
57         CommonHeader commonHeader = input.getCommonHeader();\r
58         ActionIdentifiers actionIdentifiers = input.getActionIdentifiers();\r
59         Payload payload = input.getPayload();\r
60 \r
61         validate(commonHeader, input.getAction(), actionIdentifiers, payload);\r
62         if (status == null) {\r
63             proceedAction(commonHeader,actionIdentifiers,payload);\r
64         }\r
65 \r
66         LicenseManagementOutputBuilder outputBuilder = new LicenseManagementOutputBuilder();\r
67         outputBuilder.setStatus(status);\r
68         outputBuilder.setCommonHeader(input.getCommonHeader());\r
69         return outputBuilder;\r
70     }\r
71 \r
72     /**\r
73      * Validate the input.\r
74      * Set Status if any error occurs.\r
75      *\r
76      * @param input of LicenseManagementInput from the REST API input\r
77      */\r
78     void validate(CommonHeader commonHeader,\r
79             Action action,\r
80             ActionIdentifiers actionIdentifiers,\r
81             Payload payload) {\r
82         status = validateVnfId(commonHeader, action, actionIdentifiers);\r
83         if (status != null) {\r
84             return;\r
85         }\r
86 \r
87         // validate payload\r
88         String keyName = "payload";\r
89         if (payload == null) {\r
90             status = buildStatusForParamName(LCMCommandStatus.MISSING_MANDATORY_PARAMETER, keyName);\r
91             return;\r
92         }\r
93         String payloadString = payload.getValue();\r
94         status = validateMustHaveParamValue(payloadString == null ? payloadString : payloadString.trim(), "payload");\r
95         if (status != null) {\r
96             return;\r
97         }\r
98 \r
99         try {\r
100             Map<String, String> payloadMap = JsonUtil.convertJsonStringToFlatMap(payloadString);\r
101             validateMustHaveParamValue(payloadMap.get(keyName), keyName);\r
102         } catch (IOException e) {\r
103             logger.error(String.format("LicenseManagementService (%s) got IOException when converting payload", rpcName), e);\r
104             status = buildStatusForErrorMsg(LCMCommandStatus.UNEXPECTED_ERROR, e.getMessage());\r
105         }\r
106     }\r
107 \r
108     /**\r
109      * Proceed to action for the LicenseManagement VNF action.\r
110      *\r
111      * @param input of LicenseManagementInput from the REST API input\r
112      */\r
113     void proceedAction(CommonHeader commonHeader,\r
114             ActionIdentifiers actionIdentifiers,\r
115             Payload payload) {\r
116         RequestHandlerInput requestHandlerInput = getRequestHandlerInput(commonHeader, actionIdentifiers, payload,\r
117                 this.getClass().getName());\r
118         if (requestHandlerInput != null) {\r
119             executeAction(requestHandlerInput);\r
120         }\r
121     }\r
122 }