Include impacted changes for APPC-346,APPC-348
[appc.git] / appc-provider / appc-provider-bundle / src / main / java / org / onap / appc / provider / lcm / service / UpgradeService.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP : APPC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Copyright (C) 2017 Amdocs
8  * =============================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  * 
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  * 
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * 
21  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
22  * ============LICENSE_END=========================================================
23  */
24
25 package org.onap.appc.provider.lcm.service;
26
27 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.Action;
28 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.UpgradePreCheckInput;
29 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.UpgradePreCheckOutputBuilder;
30 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.UpgradeSoftwareInput;
31 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.UpgradeSoftwareOutputBuilder;
32 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.UpgradePostCheckInput;
33 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.UpgradePostCheckOutputBuilder;
34 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.UpgradeBackupInput;
35 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.UpgradeBackupOutputBuilder;
36 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.UpgradeBackoutInput;
37 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.UpgradeBackoutOutputBuilder;
38 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.Payload;
39 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.action.identifiers.ActionIdentifiers;
40 import org.opendaylight.yang.gen.v1.org.onap.appc.lcm.rev160108.common.header.CommonHeader;
41 import org.onap.appc.executor.objects.LCMCommandStatus;
42 import org.onap.appc.requesthandler.objects.RequestHandlerInput;
43 import org.onap.appc.util.JsonUtil;
44
45 import java.io.IOException;
46 import java.util.Map;
47
48 /**
49  * Provide LCM command service for attach/detach a cinder to a VM
50  */
51 public class UpgradeService extends AbstractBaseService {
52         /**
53      * Constructor
54      *
55      */
56     public UpgradeService(String upgrade) {
57         switch(upgrade){
58                 case "upgradePre":
59                 rpcName = getRpcName(Action.UpgradePreCheck);
60                 expectedAction = Action.UpgradePreCheck;
61                 break;
62                 case "upgradePost":
63                 rpcName = getRpcName(Action.UpgradePostCheck);
64                 expectedAction = Action.UpgradePostCheck;
65                 break;
66                 case "upgradeSoft":
67                 rpcName = getRpcName(Action.UpgradeSoftware);
68                 expectedAction = Action.UpgradeSoftware;
69                 break;
70                 case "upgradeBackup":
71                 rpcName = getRpcName(Action.UpgradeBackup);
72                 expectedAction =  Action.UpgradeBackup;
73                 break;
74                 case "upgradeBackout":
75                 rpcName = getRpcName(Action.UpgradeBackout);
76                 expectedAction = Action.UpgradeBackout;
77                 break;
78         }
79         logger.debug("UpgradeService starts ", upgrade);
80     }
81     
82     public UpgradePreCheckOutputBuilder upgradePreCheck(UpgradePreCheckInput input) {
83         CommonHeader commonHeader = input.getCommonHeader();
84         ActionIdentifiers actionIdentifiers = input.getActionIdentifiers();
85         Payload payload = input.getPayload();
86
87         validate(commonHeader, input.getAction(), actionIdentifiers, payload);
88         if (status == null) {
89             proceedAction(commonHeader, actionIdentifiers, payload);
90         }
91
92         UpgradePreCheckOutputBuilder outputBuilder = new UpgradePreCheckOutputBuilder();
93         outputBuilder.setStatus(status);
94         outputBuilder.setCommonHeader(input.getCommonHeader());
95         return outputBuilder;
96     }
97
98     
99     public UpgradeSoftwareOutputBuilder upgradeSoftware(UpgradeSoftwareInput input) {
100         CommonHeader commonHeader = input.getCommonHeader();
101         ActionIdentifiers actionIdentifiers = input.getActionIdentifiers();
102         Payload payload = input.getPayload();
103
104         validate(commonHeader, input.getAction(), actionIdentifiers, payload);
105         if (status == null) {
106             proceedAction(commonHeader, actionIdentifiers, payload);
107         }
108
109         UpgradeSoftwareOutputBuilder outputBuilder = new UpgradeSoftwareOutputBuilder();
110         outputBuilder.setStatus(status);
111         outputBuilder.setCommonHeader(input.getCommonHeader());
112         return outputBuilder;
113     }
114     public UpgradePostCheckOutputBuilder upgradePostCheck(UpgradePostCheckInput input) {
115         CommonHeader commonHeader = input.getCommonHeader();
116         ActionIdentifiers actionIdentifiers = input.getActionIdentifiers();
117         Payload payload = input.getPayload();
118
119         validate(commonHeader, input.getAction(), actionIdentifiers, payload);
120         if (status == null) {
121             proceedAction(commonHeader, actionIdentifiers, payload);
122         }
123
124         UpgradePostCheckOutputBuilder outputBuilder = new UpgradePostCheckOutputBuilder();
125         outputBuilder.setStatus(status);
126         outputBuilder.setCommonHeader(input.getCommonHeader());
127         return outputBuilder;
128     }
129     
130     public UpgradeBackupOutputBuilder upgradeBackup(UpgradeBackupInput input) {
131         CommonHeader commonHeader = input.getCommonHeader();
132         ActionIdentifiers actionIdentifiers = input.getActionIdentifiers();
133         Payload payload = input.getPayload();
134
135         validate(commonHeader, input.getAction(), actionIdentifiers, payload);
136         if (status == null) {
137             proceedAction(commonHeader, actionIdentifiers, payload);
138         }
139
140         UpgradeBackupOutputBuilder outputBuilder = new UpgradeBackupOutputBuilder();
141         outputBuilder.setStatus(status);
142         outputBuilder.setCommonHeader(input.getCommonHeader());
143         return outputBuilder;
144     }
145     public UpgradeBackoutOutputBuilder upgradeBackout(UpgradeBackoutInput input) {
146         CommonHeader commonHeader = input.getCommonHeader();
147         ActionIdentifiers actionIdentifiers = input.getActionIdentifiers();
148         Payload payload = input.getPayload();
149
150         validate(commonHeader, input.getAction(), actionIdentifiers, payload);
151         if (status == null) {
152             proceedAction(commonHeader, actionIdentifiers, payload);
153         }
154
155         UpgradeBackoutOutputBuilder outputBuilder = new UpgradeBackoutOutputBuilder();
156         outputBuilder.setStatus(status);
157         outputBuilder.setCommonHeader(input.getCommonHeader());
158         return outputBuilder;
159     }
160     void validate(CommonHeader commonHeader,
161                   Action action,
162                   ActionIdentifiers actionIdentifiers,
163                   Payload payload) {
164         status = validateVnfId(commonHeader, action, actionIdentifiers);
165         if (status != null) {
166             return;
167         }
168
169         // validate payload
170         String keyName = "payload";
171         if (payload == null) {
172             status = buildStatusForParamName(LCMCommandStatus.MISSING_MANDATORY_PARAMETER, keyName);
173             return;
174         }
175         String payloadString = payload.getValue();
176         status = validateMustHaveParamValue(
177             payloadString == null ? payloadString : payloadString.trim(), "payload");
178         if (status != null) {
179             return;
180         }
181
182         try {
183             Map<String, String> payloadMap = JsonUtil.convertJsonStringToFlatMap(payloadString);
184             validateMustHaveParamValue(payloadMap.get(keyName), keyName);
185         } catch (IOException e) {
186             logger.error(String.format("UpgradeService (%s) got IOException when converting payload", rpcName), e);
187             status = buildStatusForErrorMsg(LCMCommandStatus.UNEXPECTED_ERROR, e.getMessage());
188         }
189     }
190
191     void proceedAction(CommonHeader commonHeader,
192                        ActionIdentifiers actionIdentifiers,
193                        Payload payload) {
194         RequestHandlerInput requestHandlerInput =
195             getRequestHandlerInput(commonHeader, actionIdentifiers, payload, this.getClass().getName());
196         if (requestHandlerInput != null) {
197             executeAction(requestHandlerInput);
198         }
199     }
200 }