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