Merge "Fixed E2EService blocker SONAR IssueId: SO-118"
[so.git] / bpmn / MSOInfrastructureBPMN / src / main / java / org / openecomp / mso / bpmn / infrastructure / workflow / serviceTask / client / builder / NetworkTopologyRequestBodyBuilder.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 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  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.mso.bpmn.infrastructure.workflow.serviceTask.client.builder;
22
23 import okhttp3.RequestBody;
24 import org.apache.commons.lang3.StringUtils;
25 import org.json.JSONObject;
26 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.NetworkTopologyOperationInput;
27 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.NetworkTopologyOperationInputBuilder;
28 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.network.request.input.NetworkRequestInputBuilder;
29 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.network.request.input.network.request.input.NetworkInputParametersBuilder;
30 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.param.Param;
31 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.param.ParamBuilder;
32 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.param.ParamKey;
33 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.request.information.RequestInformation;
34 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.request.information.RequestInformationBuilder;
35 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.sdnc.request.header.SdncRequestHeader;
36 import org.opendaylight.yang.gen.v1.org.onap.sdnc.northbound.generic.resource.rev170824.sdnc.request.header.SdncRequestHeaderBuilder;
37 import org.openecomp.mso.yangDecoder.transform.api.ITransformJava2StringService;
38 import org.openecomp.mso.yangDecoder.transform.impl.TransfromJava2StringFactory;
39
40 import java.util.ArrayList;
41 import java.util.List;
42 import java.util.Map;
43
44 /**
45  * Created by 10112215 on 2017/9/20.
46  */
47 public class NetworkTopologyRequestBodyBuilder implements AbstractBuilder<Map<String, String>, RequestBody> {
48
49     public static final String URI_PATH = "GENERIC-RESOURCE-API:network-topology-operation";
50     public static final SdncRequestHeader.SvcAction SVC_DEFAULT_ACTION = SdncRequestHeader.SvcAction.Create;
51     public static final String SVC_REQUEST_ID = "MSO";
52     public static final String SDC_ACTION = "SDC_ACTION";
53     public static final RequestInformation.RequestAction REQUEST_ACTION = RequestInformation.RequestAction.CreateNetworkInstance;
54     protected static ITransformJava2StringService java2jsonService;
55
56     static
57     {
58         try {
59             java2jsonService = TransfromJava2StringFactory.getJava2jsonService();
60         } catch (Exception e) {
61             e.printStackTrace();
62             java2jsonService = null;
63         }
64     }
65
66     @Override
67     public RequestBody build(Map<String, String> input) throws Exception {
68         NetworkTopologyOperationInput sdncInput = getSdncInput(input);
69         RequestBody body = getRequestBody(sdncInput);
70         return body;
71     }
72
73     protected String getJsonInput(NetworkTopologyOperationInput sdncInput) throws Exception {
74         return java2jsonService.transformRpcDataObjectToString(URI_PATH, sdncInput);
75     }
76
77     private RequestBody getRequestBody(NetworkTopologyOperationInput sdncInput) throws Exception {
78         String jsonString = getJsonInput(sdncInput);
79         String json = (new JSONObject(jsonString)).toString();
80         return RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"),json);
81     }
82
83     protected NetworkTopologyOperationInput getSdncInput(Map<String, String> inputs) {
84         NetworkTopologyOperationInputBuilder networkTopologyOperationInputBuilder = new NetworkTopologyOperationInputBuilder();
85         {
86             loadSdncRequestHeader(inputs, networkTopologyOperationInputBuilder);
87             loadRequestInformation(networkTopologyOperationInputBuilder);
88             loadNetworkInputParameters(inputs, networkTopologyOperationInputBuilder);
89         }
90         return networkTopologyOperationInputBuilder.build();
91     }
92
93     private void loadNetworkInputParameters(Map<String, String> inputs, NetworkTopologyOperationInputBuilder networkTopologyOperationInputBuilder) {
94         NetworkRequestInputBuilder networkRequestInputBuilder = new NetworkRequestInputBuilder();
95         {
96             NetworkInputParametersBuilder networkInputParametersBuilder = new NetworkInputParametersBuilder();
97             {
98                 List<Param> paramList = getParamList(inputs);
99                 networkInputParametersBuilder.setParam(paramList);
100             }
101             networkRequestInputBuilder.setNetworkInputParameters(networkInputParametersBuilder.build());
102         }
103         networkTopologyOperationInputBuilder.setNetworkRequestInput(networkRequestInputBuilder.build());
104     }
105
106     private void loadRequestInformation(NetworkTopologyOperationInputBuilder networkTopologyOperationInputBuilder) {
107         RequestInformationBuilder requestInformationBuilder = new RequestInformationBuilder();
108         {
109             requestInformationBuilder.setRequestId(SVC_REQUEST_ID);
110             requestInformationBuilder.setRequestAction(REQUEST_ACTION);
111         }
112         networkTopologyOperationInputBuilder.setRequestInformation(requestInformationBuilder.build());
113     }
114
115     private void loadSdncRequestHeader(Map<String, String> inputs, NetworkTopologyOperationInputBuilder networkTopologyOperationInputBuilder) {
116         SdncRequestHeaderBuilder sdncRequestHeaderBuilder = new SdncRequestHeaderBuilder();
117         {
118             sdncRequestHeaderBuilder.setSvcRequestId(SVC_REQUEST_ID);
119             SdncRequestHeader.SvcAction svcAction = SVC_DEFAULT_ACTION;
120             String action = inputs.get(SDC_ACTION);
121             if (!StringUtils.isBlank(action)) {
122                 if (action.toLowerCase().contains("delete")) {
123                     svcAction = SdncRequestHeader.SvcAction.Delete;
124                 } else if (action.toLowerCase().contains("create")) {
125                     svcAction = SdncRequestHeader.SvcAction.Create;
126                 }
127             }
128             sdncRequestHeaderBuilder.setSvcAction(svcAction);
129         }
130         networkTopologyOperationInputBuilder.setSdncRequestHeader(sdncRequestHeaderBuilder.build());
131     }
132
133     private List<Param> getParamList(Map<String, String> inputs) {
134         List<Param> paramList = new ArrayList<>();
135         if (inputs != null && !inputs.isEmpty()) {
136             inputs.keySet().forEach(key -> {
137                 ParamBuilder paramBuilder = new ParamBuilder();
138                 paramBuilder.setName(key);
139                 paramBuilder.setValue(inputs.get(key));
140                 paramBuilder.setKey(new ParamKey(key));
141                 paramList.add(paramBuilder.build());
142             });
143         }
144         return paramList;
145     }
146 }