2 * Copyright © 2017 Orange, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.transportpce.servicehandler;
10 import java.util.ArrayList;
11 import java.util.List;
12 import java.util.concurrent.Future;
13 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev170426.PathComputationRequestOutput;
14 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev170426.path.computation.request.input.ServiceAEnd;
15 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev170426.path.computation.request.input.ServiceAEndBuilder;
16 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev170426.path.computation.request.input.ServiceZEnd;
17 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev170426.path.computation.request.input.ServiceZEndBuilder;
18 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.configuration.response.common.ConfigurationResponseCommon;
19 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.configuration.response.common.ConfigurationResponseCommonBuilder;
20 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.response.parameters.ResponseParametersBuilder;
21 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.Topology;
22 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.TopologyBuilder;
23 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.LifecycleState;
24 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.State;
25 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceCreateInput;
26 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceCreateOutput;
27 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceCreateOutputBuilder;
28 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceDeleteInput;
29 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceDeleteOutput;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceDeleteOutputBuilder;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceReconfigureInput;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.list.Services;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.list.ServicesBuilder;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev161014.topology.AToZ;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev161014.topology.AToZBuilder;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev161014.topology.AToZKey;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev161014.topology.ZToA;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev161014.topology.ZToABuilder;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev161014.topology.ZToAKey;
40 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev170426.routing.constraints.sp.HardConstraintsBuilder;
41 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev170426.routing.constraints.sp.SoftConstraintsBuilder;
42 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.RxDirection;
43 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.RxDirectionBuilder;
44 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.TxDirection;
45 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.TxDirectionBuilder;
46 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.handler.header.ServiceHandlerHeaderBuilder;
47 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.path.PathDescriptionBuilder;
48 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.ServiceDeleteInputBuilder;
49 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.ServiceImplementationRequestInput;
50 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.ServiceImplementationRequestInputBuilder;
51 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.service.path.list.ServicePaths;
52 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.service.path.list.ServicePathsBuilder;
53 import org.opendaylight.yangtools.yang.common.RpcResult;
54 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
56 public final class ModelMappingUtils {
58 private ModelMappingUtils() {
61 public static ServiceImplementationRequestInput createServiceImplementationRequest(ServiceCreateInput input,
62 PathComputationRequestOutput pceResponse) {
64 ServiceImplementationRequestInputBuilder serviceImplementationRequestInputBuilder =
65 new ServiceImplementationRequestInputBuilder();
66 serviceImplementationRequestInputBuilder.setServiceName(input.getServiceName());
67 org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath
68 .rev170426.service.implementation.request.input.ServiceAEndBuilder serviceAEnd =
69 new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath
70 .rev170426.service.implementation.request.input.ServiceAEndBuilder();
71 serviceAEnd.setServiceFormat(input.getServiceAEnd().getServiceFormat())
72 .setServiceRate(input.getServiceAEnd().getServiceRate()).setClli(input.getServiceAEnd().getClli())
73 .setNodeId(input.getServiceAEnd().getNodeId())
74 .setTxDirection(new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types
75 .rev170426.service.endpoint.sp.TxDirectionBuilder()
76 .setPort(input.getServiceAEnd().getTxDirection().getPort()).build())
77 .setRxDirection(new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types
78 .rev170426.service.endpoint.sp.RxDirectionBuilder()
79 .setPort(input.getServiceAEnd().getRxDirection().getPort()).build());
80 org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath
81 .rev170426.service.implementation.request.input.ServiceZEndBuilder serviceZEnd =
82 new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath
83 .rev170426.service.implementation.request.input.ServiceZEndBuilder();
84 serviceZEnd.setServiceFormat(input.getServiceZEnd().getServiceFormat())
85 .setServiceRate(input.getServiceZEnd().getServiceRate()).setClli(input.getServiceZEnd().getClli())
86 .setNodeId(input.getServiceZEnd().getNodeId())
87 .setTxDirection(new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types
88 .rev170426.service.endpoint.sp.TxDirectionBuilder()
89 .setPort(input.getServiceZEnd().getTxDirection().getPort()).build())
90 .setRxDirection(new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types
91 .rev170426.service.endpoint.sp.RxDirectionBuilder()
92 .setPort(input.getServiceZEnd().getRxDirection().getPort()).build());
93 serviceImplementationRequestInputBuilder.setServiceAEnd(serviceAEnd.build());
94 serviceImplementationRequestInputBuilder.setServiceZEnd(serviceZEnd.build());
95 serviceImplementationRequestInputBuilder.setServiceHandlerHeader(
96 new ServiceHandlerHeaderBuilder().setRequestId(input.getSdncRequestHeader().getRequestId()).build());
97 org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath
98 .rev170426.service.implementation.request.input.PathDescriptionBuilder pathDescBuilder =
99 new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath
100 .rev170426.service.implementation.request.input
101 .PathDescriptionBuilder();
102 pathDescBuilder.setAToZDirection(pceResponse.getResponseParameters()
103 .getPathDescription().getAToZDirection());
104 pathDescBuilder.setZToADirection(pceResponse.getResponseParameters()
105 .getPathDescription().getZToADirection());
106 serviceImplementationRequestInputBuilder.setPathDescription(pathDescBuilder.build());
107 return serviceImplementationRequestInputBuilder.build();
110 public static org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426
111 .ServiceDeleteInput createServiceDeleteInput(ServiceDeleteInput serviceDeleteInput) {
112 ServiceDeleteInputBuilder builder = new ServiceDeleteInputBuilder();
113 builder.setServiceName(serviceDeleteInput.getServiceDeleteReqInfo().getServiceName());
114 builder.setServiceHandlerHeader(new ServiceHandlerHeaderBuilder().setRequestId(
115 serviceDeleteInput.getSdncRequestHeader().getRequestId()).build());
116 return builder.build();
119 public static ServiceAEnd createServiceAEnd(
120 org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.create.input
121 .ServiceAEnd serviceAEnd) {
122 ServiceAEndBuilder serviceAEndBuilder = new ServiceAEndBuilder();
123 serviceAEndBuilder.setClli(serviceAEnd.getClli());
124 serviceAEndBuilder.setNodeId(serviceAEnd.getNodeId());
125 serviceAEndBuilder.setRxDirection(createRxDirection(serviceAEnd.getRxDirection()));
126 serviceAEndBuilder.setServiceFormat(serviceAEnd.getServiceFormat());
127 serviceAEndBuilder.setServiceRate(serviceAEnd.getServiceRate());
128 serviceAEndBuilder.setTxDirection(createTxDirection(serviceAEnd.getTxDirection()));
129 return serviceAEndBuilder.build();
132 public static ServiceZEnd createServiceZEnd(
133 org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.create.input.ServiceZEnd
135 ServiceZEndBuilder serviceZEndBuilder = new ServiceZEndBuilder();
136 serviceZEndBuilder.setClli(serviceZEnd.getClli());
137 serviceZEndBuilder.setNodeId(serviceZEnd.getNodeId());
138 serviceZEndBuilder.setRxDirection(createRxDirection(serviceZEnd.getRxDirection()));
139 serviceZEndBuilder.setServiceFormat(serviceZEnd.getServiceFormat());
140 serviceZEndBuilder.setServiceRate(serviceZEnd.getServiceRate());
141 serviceZEndBuilder.setTxDirection(createTxDirection(serviceZEnd.getTxDirection()));
142 return serviceZEndBuilder.build();
145 public static RxDirection createRxDirection(
146 org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.endpoint.RxDirection
148 RxDirectionBuilder rxDirectionBuilder = new RxDirectionBuilder();
149 rxDirectionBuilder.setPort(rxDirection.getPort());
150 return rxDirectionBuilder.build();
153 public static TxDirection createTxDirection(
154 org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.endpoint.TxDirection
156 TxDirectionBuilder txDirectionBuilder = new TxDirectionBuilder();
157 txDirectionBuilder.setPort(txDirection.getPort());
158 return txDirectionBuilder.build();
161 public static Future<RpcResult<ServiceDeleteOutput>> createDeleteServiceReply(ServiceDeleteInput input,
162 String finalAck, String message, String responseCode) {
163 ConfigurationResponseCommonBuilder builder = new ConfigurationResponseCommonBuilder()
164 .setAckFinalIndicator(finalAck).setResponseMessage(message).setResponseCode(responseCode);
165 if (input.getSdncRequestHeader() != null) {
166 builder.setRequestId(input.getSdncRequestHeader().getRequestId());
168 builder.setRequestId(null);
170 ConfigurationResponseCommon configurationResponseCommon = builder.build();
171 ServiceDeleteOutput output = new ServiceDeleteOutputBuilder()
172 .setConfigurationResponseCommon(configurationResponseCommon).build();
173 return RpcResultBuilder.success(output).buildFuture();
176 public static Future<RpcResult<ServiceCreateOutput>> createCreateServiceReply(ServiceCreateInput input,
178 String message, String responseCode) {
179 ResponseParametersBuilder responseParameters = new ResponseParametersBuilder();
180 ConfigurationResponseCommonBuilder configurationResponseCommon
181 = new ConfigurationResponseCommonBuilder().setAckFinalIndicator(finalAck)
182 .setResponseMessage(message)
183 .setResponseCode(responseCode);
184 if (input.getSdncRequestHeader() != null) {
185 configurationResponseCommon.setRequestId(input.getSdncRequestHeader().getRequestId());
187 configurationResponseCommon.setRequestId(null);
189 ServiceCreateOutputBuilder output = new ServiceCreateOutputBuilder()
190 .setConfigurationResponseCommon(configurationResponseCommon.build())
191 .setResponseParameters(responseParameters.build());
192 return RpcResultBuilder.success(output.build()).buildFuture();
196 * Map Input (ServiceCreateInmput, ServiceReconfigureInput) & output
197 * (PathComputationRequestOutput) to Service.
198 * @param serviceCreateInput
199 * ServiceCreateInput parameter
200 * @param serviceReconfigureInput
201 * serviceReconfigureInput parameter
203 * PathComputationRequestOutput parameter
204 * @return Services Service data
206 public static Services mappingServices(ServiceCreateInput serviceCreateInput,
207 ServiceReconfigureInput serviceReconfigureInput, PathComputationRequestOutput output) {
208 org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.ServiceAEnd aend = null;
209 org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.ServiceZEnd zend = null;
210 ServicesBuilder service = new ServicesBuilder();
211 if (serviceCreateInput != null) {
212 aend = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service
213 .ServiceAEndBuilder(serviceCreateInput.getServiceAEnd()).build();
214 zend = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service
215 .ServiceZEndBuilder(serviceCreateInput.getServiceZEnd()).build();
216 service.setServiceName(serviceCreateInput.getServiceName()).setAdministrativeState(State.OutOfService)
217 .setOperationalState(State.OutOfService).setCommonId(serviceCreateInput.getCommonId())
218 .setConnectionType(serviceCreateInput.getConnectionType())
219 .setCustomer(serviceCreateInput.getCustomer())
220 .setCustomerContact(serviceCreateInput.getCustomerContact())
221 .setHardConstraints(serviceCreateInput.getHardConstraints())
222 .setSoftConstraints(serviceCreateInput.getSoftConstraints())
223 .setLifecycleState(LifecycleState.Planned).setServiceAEnd(aend).setServiceZEnd(zend);
225 } else if (serviceReconfigureInput != null) {
226 aend = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service
227 .ServiceAEndBuilder(serviceReconfigureInput.getServiceAEnd()).build();
228 zend = new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service
229 .ServiceZEndBuilder(serviceReconfigureInput.getServiceZEnd()).build();
230 service.setServiceName(serviceReconfigureInput.getNewServiceName())
231 .setAdministrativeState(State.OutOfService).setOperationalState(State.OutOfService)
232 .setCommonId(serviceReconfigureInput.getCommonId())
233 .setConnectionType(serviceReconfigureInput.getConnectionType())
234 .setCustomer(serviceReconfigureInput.getCustomer())
235 .setCustomerContact(serviceReconfigureInput.getCustomerContact())
236 .setHardConstraints(serviceReconfigureInput.getHardConstraints())
237 .setSoftConstraints(serviceReconfigureInput.getSoftConstraints())
238 .setLifecycleState(LifecycleState.Planned).setServiceAEnd(aend).setServiceZEnd(zend);
241 org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.response
242 .parameters.sp.ResponseParameters responseParameters = output.getResponseParameters();
243 if (responseParameters != null) {
244 // service.setPceMetric(responseParameters.getPceMetric());
245 org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426
246 .response.parameters.sp.response.parameters.PathDescription pathDescription =
247 responseParameters.getPathDescription();
248 if (pathDescription != null) {
249 List<AToZ> atozList = new ArrayList<>();
250 List<ZToA> ztoaList = new ArrayList<>();
252 for (org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426
253 .path.description.atoz.direction.AToZ tmp : pathDescription.getAToZDirection().getAToZ()) {
255 AToZKey key = new AToZKey(tmp.getKey().getId());
256 AToZ atoz = new AToZBuilder().setId(tmp.getId()).setKey(key)
257 // .setResource(tmp.getResource())
262 for (org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426
263 .path.description.ztoa.direction.ZToA
264 tmp : pathDescription.getZToADirection().getZToA()) {
265 ZToAKey key = new ZToAKey(tmp.getKey().getId());
266 ZToA ztoa = new ZToABuilder().setId(tmp.getId()).setKey(key)
267 // .setResource(tmp.getResource())
272 Topology topology = new TopologyBuilder().setAToZ(atozList).setZToA(ztoaList).build();
273 service.setTopology(topology);
276 return service.build();
280 * Map Input (ServiceCreateInmput, ServiceReconfigureInput) & output
281 * (PathComputationRequestOutput) to ServicePath.
282 * @param serviceCreateInput
283 * ServiceCreateInput parameter
284 * @param serviceReconfigureInput
285 * serviceReconfigureInput parameter
287 * PathComputationRequestOutput parameter
288 * @return ServicesPaths Service Path data
290 public static ServicePaths mappingServicePaths(ServiceCreateInput serviceCreateInput,
291 ServiceReconfigureInput serviceReconfigureInput, PathComputationRequestOutput output) {
292 ServicePathsBuilder servicePathBuilder = new ServicePathsBuilder();
293 if (serviceCreateInput != null) {
294 org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface
295 .service.types.rev170426.service.path.ServiceAEndBuilder serviceAEnd =
296 new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface
297 .service.types.rev170426.service.path.ServiceAEndBuilder();
298 serviceAEnd.setServiceFormat(serviceCreateInput.getServiceAEnd().getServiceFormat())
299 .setServiceRate(serviceCreateInput.getServiceAEnd().getServiceRate())
300 .setClli(serviceCreateInput.getServiceAEnd().getClli())
301 .setNodeId(serviceCreateInput.getServiceAEnd().getNodeId())
302 .setTxDirection(new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types
303 .rev170426.service.endpoint.sp.TxDirectionBuilder()
304 .setPort(serviceCreateInput.getServiceAEnd().getTxDirection().getPort()).build())
305 .setRxDirection(new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types
306 .rev170426.service.endpoint.sp.RxDirectionBuilder()
307 .setPort(serviceCreateInput.getServiceAEnd().getRxDirection().getPort()).build());
308 org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface
309 .service.types.rev170426.service.path.ServiceZEndBuilder serviceZEnd =
310 new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface
311 .service.types.rev170426.service.path.ServiceZEndBuilder();
312 serviceZEnd.setServiceFormat(serviceCreateInput.getServiceZEnd().getServiceFormat())
313 .setServiceRate(serviceCreateInput.getServiceZEnd().getServiceRate())
314 .setClli(serviceCreateInput.getServiceZEnd().getClli())
315 .setNodeId(serviceCreateInput.getServiceZEnd().getNodeId())
316 .setTxDirection(new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types
317 .rev170426.service.endpoint.sp.TxDirectionBuilder()
318 .setPort(serviceCreateInput.getServiceZEnd().getTxDirection().getPort()).build())
319 .setRxDirection(new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types
320 .rev170426.service.endpoint.sp.RxDirectionBuilder()
321 .setPort(serviceCreateInput.getServiceZEnd().getRxDirection().getPort()).build());
323 servicePathBuilder.setServiceAEnd(serviceAEnd.build());
324 servicePathBuilder.setServiceZEnd(serviceZEnd.build());
325 MappingConstraints mapConstraints = new MappingConstraints(serviceCreateInput.getHardConstraints(),
326 serviceCreateInput.getSoftConstraints());
327 mapConstraints.serviceToServicePathConstarints();
328 if (mapConstraints.getServicePathHardConstraints() != null) {
329 HardConstraintsBuilder hardConstraintBuilder = new HardConstraintsBuilder();
330 hardConstraintBuilder.setCustomerCode(serviceCreateInput.getHardConstraints().getCustomerCode());
331 hardConstraintBuilder.setCoRoutingOrGeneral(mapConstraints.getServicePathHardConstraints()
332 .getCoRoutingOrGeneral());
333 servicePathBuilder.setHardConstraints(hardConstraintBuilder.build());
335 if (mapConstraints.getServicePathSoftConstraints() != null) {
336 SoftConstraintsBuilder softConstraintBuilder = new SoftConstraintsBuilder();
337 softConstraintBuilder.setCustomerCode(mapConstraints.getServicePathSoftConstraints().getCustomerCode());
338 softConstraintBuilder.setCoRoutingOrGeneral(mapConstraints.getServicePathSoftConstraints()
339 .getCoRoutingOrGeneral());
340 servicePathBuilder.setSoftConstraints(softConstraintBuilder.build());
342 servicePathBuilder.setServicePathName(serviceCreateInput.getServiceName());
343 servicePathBuilder.setServiceHandlerHeader(new ServiceHandlerHeaderBuilder()
344 .setRequestId(serviceCreateInput.getSdncRequestHeader().getRequestId()).build());
345 PathDescriptionBuilder pathDescBuilder = new PathDescriptionBuilder(output.getResponseParameters()
346 .getPathDescription());
347 servicePathBuilder.setPathDescription(pathDescBuilder.build());
349 return servicePathBuilder.build();