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