Initial commit for ServiceHandler
[transportpce.git] / servicehandler / src / main / java / org / opendaylight / transportpce / servicehandler / MappingAndSendingSIRequest.java
1 /*
2  * Copyright © 2017 Orange, Inc. and others.  All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.transportpce.servicehandler;
10
11 import com.google.common.util.concurrent.ListenableFuture;
12 import com.google.common.util.concurrent.ListeningExecutorService;
13 import com.google.common.util.concurrent.MoreExecutors;
14 import java.util.ArrayList;
15 import java.util.List;
16 import java.util.concurrent.Callable;
17 import java.util.concurrent.CancellationException;
18 import java.util.concurrent.ExecutionException;
19 import java.util.concurrent.Executors;
20 import java.util.concurrent.Future;
21
22 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
23 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev161014.ServiceCreateInput;
24 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev161014.ServiceReconfigureInput;
25 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev161014.service.list.Services;
26 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubpce.rev170426.PathComputationRequestOutput;
27 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubrenderer.rev170426.ServiceDeleteInput;
28 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubrenderer.rev170426.ServiceDeleteInputBuilder;
29 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubrenderer.rev170426.ServiceDeleteOutput;
30 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubrenderer.rev170426.ServiceDeleteOutputBuilder;
31 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubrenderer.rev170426.ServiceImplementationRequestInput;
32 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubrenderer.rev170426.ServiceImplementationRequestInputBuilder;
33 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubrenderer.rev170426.ServiceImplementationRequestOutput;
34 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubrenderer.rev170426.ServiceImplementationRequestOutputBuilder;
35 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubrenderer.rev170426.StubrendererService;
36 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubrenderer.rev170426.service.implementation.request.input.PathDescription;
37 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubrenderer.rev170426.service.implementation.request.input.PathDescriptionBuilder;
38 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubrenderer.rev170426.service.implementation.request.input.ServiceAEnd;
39 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubrenderer.rev170426.service.implementation.request.input.ServiceAEndBuilder;
40 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubrenderer.rev170426.service.implementation.request.input.ServiceZEnd;
41 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.stubrenderer.rev170426.service.implementation.request.input.ServiceZEndBuilder;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.ServiceFormat;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.port.Port;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.port.PortBuilder;
45 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.AToZDirection;
46 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.AToZDirectionBuilder;
47 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ZToADirection;
48 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ZToADirectionBuilder;
49 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.atoz.direction.AToZ;
50 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.atoz.direction.AToZBuilder;
51 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.atoz.direction.AToZKey;
52 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ztoa.direction.ZToA;
53 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ztoa.direction.ZToABuilder;
54 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.path.description.ztoa.direction.ZToAKey;
55 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.Resource;
56 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.pce.resource.ResourceBuilder;
57 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.RxDirection;
58 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.RxDirectionBuilder;
59 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.TxDirection;
60 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.endpoint.sp.TxDirectionBuilder;
61 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.service.handler.header.ServiceHandlerHeaderBuilder;
62 import org.opendaylight.yangtools.yang.common.RpcResult;
63 import org.slf4j.Logger;
64 import org.slf4j.LoggerFactory;
65
66
67
68 /*
69  * Class for Mapping and Sending
70  * Service Implemention requests :
71  * - service implementation
72  * - service delete.
73  * @author Martial Coulibaly ( martial.coulibaly@gfi.com ) on behalf of Orange
74  *
75  */
76 public class MappingAndSendingSIRequest {
77     /* Logging. */
78     private static final Logger LOG = LoggerFactory.getLogger(MappingAndSendingSIRequest.class);
79     /* Permit to call Renderer RPCs. */
80     private StubrendererService service;
81     /* define procedure success (or not ). */
82     private Boolean success = false;
83     /* permit to call bundle service (PCE, Renderer, Servicehandler. */
84     private RpcProviderRegistry rpcRegistry;
85     /* store all error messages. */
86     private String error;
87     ServiceImplementationRequestInput serviceImplementationRequestInput = null;
88     ServiceDeleteInput serviceDeleteInput = null;
89
90     private final ListeningExecutorService executor = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(5));
91
92
93     /*
94      * MappingAndSendingSIRequest class constructor
95      * for RPC serviceCreate.
96      *
97      * @param rpcRegistry rpcRegistry
98      * @param serviceCreateInput serviceCreateInput
99      * @param pathComputationOutput pathComputationOutput
100      */
101     public MappingAndSendingSIRequest(RpcProviderRegistry rpcRegistry,
102             ServiceCreateInput serviceCreateInput,PathComputationRequestOutput pathComputationOutput) {
103         this.rpcRegistry = rpcRegistry;
104         if (rpcRegistry != null) {
105             service = rpcRegistry.getRpcService(StubrendererService.class);
106         }
107         setSuccess(false);
108         setError("");
109
110         /* Building ServiceImplementationRequestInput  / ServiceDeleteInput serviceDeleteInput. */
111         ServiceHandlerHeaderBuilder serviceHandlerHeader = new ServiceHandlerHeaderBuilder();
112         if (serviceCreateInput.getSdncRequestHeader() != null) {
113             serviceHandlerHeader.setRequestId(serviceCreateInput.getSdncRequestHeader().getRequestId());
114         }
115         //.build();
116
117         /*ServiceAEnd Build */
118         org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev161014
119             .service.create.input.ServiceAEnd tempA = serviceCreateInput.getServiceAEnd();
120
121         org.opendaylight.yang.gen.v1.http.org.openroadm.common
122             .service.types.rev161014.service.port.Port tempAPortRx =
123             serviceCreateInput.getServiceAEnd().getRxDirection().getPort();
124
125         org.opendaylight.yang.gen.v1.http.org.openroadm.common
126             .service.types.rev161014.service.port.Port tempAPortTx =
127             serviceCreateInput.getServiceAEnd().getTxDirection().getPort();
128
129         /*Port portARx = new PortBuilder()
130         .setPortDeviceName(tempAPortRx.getPortDeviceName())
131         .setPortName(tempAPortRx.getPortName())
132         .setPortRack(tempAPortRx.getPortRack())
133         .setPortShelf(tempAPortRx.getPortShelf())
134         .setPortSlot(tempAPortRx.getPortSlot())
135         .setPortSubSlot(tempAPortRx.getPortSubSlot())
136         .setPortType(tempAPortRx.getPortType())
137         .build();
138
139         Port portATx = new PortBuilder()
140         .setPortDeviceName(tempAPortTx.getPortDeviceName())
141         .setPortName(tempAPortTx.getPortName())
142         .setPortRack(tempAPortTx.getPortRack())
143         .setPortShelf(tempAPortTx.getPortShelf())
144         .setPortSlot(tempAPortTx.getPortSlot())
145         .setPortSubSlot(tempAPortTx.getPortSubSlot())
146         .setPortType(tempAPortTx.getPortType())
147         .build();
148
149         RxDirection rxDirectionAEnd = new RxDirectionBuilder()
150         .setPort(portARx )
151         .build();
152
153         TxDirection txDirectionAEnd = new TxDirectionBuilder()
154         .setPort(portATx )
155         .build();*/
156
157         RxDirection rxDirectionAEnd = getRxDirection(tempAPortRx);
158
159         TxDirection txDirectionAEnd = getTxDirection(tempAPortTx);
160
161         ServiceAEnd serviceAEnd = new ServiceAEndBuilder()
162             .setClli(tempA.getClli())
163             .setNodeId(tempA.getNodeId())
164             .setServiceFormat(ServiceFormat.valueOf(tempA.getServiceFormat().getName()))
165             .setServiceRate(tempA.getServiceRate())
166             .setRxDirection(rxDirectionAEnd)
167             .setTxDirection(txDirectionAEnd)
168             .build();
169
170         /* ServiceZEnd Build */
171         org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev161014
172             .service.create.input.ServiceZEnd tempZ = serviceCreateInput.getServiceZEnd();
173
174         org.opendaylight.yang.gen.v1.http.org.openroadm.common
175             .service.types.rev161014.service.port.Port tempZPortRx =
176             serviceCreateInput.getServiceZEnd().getRxDirection().getPort();
177
178         org.opendaylight.yang.gen.v1.http.org.openroadm.common
179             .service.types.rev161014.service.port.Port tempZPortTx =
180             serviceCreateInput.getServiceZEnd().getTxDirection().getPort();
181
182         /*Port portZRx = new PortBuilder()
183         .setPortDeviceName(tempZPortRx.getPortDeviceName())
184         .setPortName(tempZPortRx.getPortName())
185         .setPortRack(tempZPortRx.getPortRack())
186         .setPortShelf(tempZPortRx.getPortShelf())
187         .setPortSlot(tempZPortRx.getPortSlot())
188         .setPortSubSlot(tempZPortRx.getPortSubSlot())
189         .setPortType(tempZPortRx.getPortType())
190         .build();
191
192         Port portZTx = new PortBuilder()
193         .setPortDeviceName(tempZPortTx.getPortDeviceName())
194         .setPortName(tempZPortTx.getPortName())
195         .setPortRack(tempZPortTx.getPortRack())
196         .setPortShelf(tempZPortTx.getPortShelf())
197         .setPortSlot(tempZPortTx.getPortSlot())
198         .setPortSubSlot(tempZPortTx.getPortSubSlot())
199         .setPortType(tempZPortTx.getPortType())
200         .build();
201
202         RxDirection rxDirectionZEnd = new RxDirectionBuilder()
203         .setPort(portZRx )
204         .build();
205
206         TxDirection txDirectionZEnd = new TxDirectionBuilder()
207         .setPort(portZTx )
208         .build();*/
209
210         RxDirection rxDirectionZEnd = getRxDirection(tempZPortRx);
211
212         TxDirection txDirectionZEnd = getTxDirection(tempZPortTx);
213
214         ServiceZEnd serviceZEnd = new ServiceZEndBuilder()
215             .setClli(tempZ.getClli())
216             .setNodeId(tempZ.getNodeId())
217             .setServiceFormat(ServiceFormat.valueOf(tempZ.getServiceFormat().getName()))
218             .setServiceRate(tempZ.getServiceRate())
219             .setRxDirection(rxDirectionZEnd)
220             .setTxDirection(txDirectionZEnd)
221             .build();
222
223
224         /* ServiceImplementationRequestInput  Build*/
225         org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types
226             .rev170426.response.parameters.sp.response.parameters.PathDescription tmp = null;
227         try {
228             tmp = pathComputationOutput.getResponseParameters().getPathDescription();
229         } catch (NullPointerException e) {
230             LOG.error("PathDescription is null : " + e.toString());
231         }
232         PathDescriptionBuilder pathDescription = new PathDescriptionBuilder();
233         if (tmp != null) {
234             pathDescription = new PathDescriptionBuilder(tmp);
235         }
236         serviceImplementationRequestInput  = new ServiceImplementationRequestInputBuilder()
237         .setPathDescription(pathDescription.build())
238         .setServiceHandlerHeader(serviceHandlerHeader.build())
239         .setServiceName(serviceCreateInput.getServiceName())
240         .setServiceAEnd(serviceAEnd)
241         .setServiceZEnd(serviceZEnd)
242         .build();
243     }
244
245     /*
246      * MappingAndSendingSIRequest class constructor
247      * for RPC serviceReconfigure.
248      *
249      * @param rpcRegistry rpcRegistry
250      * @param serviceReconfigureInput serviceReconfigureInput
251      * @param pathComputationOutput pathComputationOutput
252      */
253
254     public MappingAndSendingSIRequest(RpcProviderRegistry rpcRegistry,
255             ServiceReconfigureInput serviceReconfigureInput,PathComputationRequestOutput pathComputationOutput) {
256         this.rpcRegistry = rpcRegistry;
257         if (rpcRegistry != null) {
258             service = rpcRegistry.getRpcService(StubrendererService.class);
259         }
260         setSuccess(false);
261         setError("");
262
263         /* Building ServiceImplementationRequestInput  / ServiceDeleteInput serviceDeleteInput .*/
264         ServiceHandlerHeaderBuilder serviceHandlerHeader = new ServiceHandlerHeaderBuilder();
265
266         /*ServiceAEnd Build .*/
267         org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev161014
268             .service.reconfigure.input.ServiceAEnd tempA = serviceReconfigureInput.getServiceAEnd();
269
270         org.opendaylight.yang.gen.v1.http.org.openroadm.common
271             .service.types.rev161014.service.port.Port tempAPortRx =
272             serviceReconfigureInput.getServiceAEnd().getRxDirection().getPort();
273
274         org.opendaylight.yang.gen.v1.http.org.openroadm.common
275             .service.types.rev161014.service.port.Port tempAPortTx =
276             serviceReconfigureInput.getServiceAEnd().getTxDirection().getPort();
277
278         /*Port portARx = new PortBuilder()
279         .setPortDeviceName(tempAPortRx.getPortDeviceName())
280         .setPortName(tempAPortRx.getPortName())
281         .setPortRack(tempAPortRx.getPortRack())
282         .setPortShelf(tempAPortRx.getPortShelf())
283         .setPortSlot(tempAPortRx.getPortSlot())
284         .setPortSubSlot(tempAPortRx.getPortSubSlot())
285         .setPortType(tempAPortRx.getPortType())
286         .build();
287
288         Port portATx = new PortBuilder()
289         .setPortDeviceName(tempAPortTx.getPortDeviceName())
290         .setPortName(tempAPortTx.getPortName())
291         .setPortRack(tempAPortTx.getPortRack())
292         .setPortShelf(tempAPortTx.getPortShelf())
293         .setPortSlot(tempAPortTx.getPortSlot())
294         .setPortSubSlot(tempAPortTx.getPortSubSlot())
295         .setPortType(tempAPortTx.getPortType())
296         .build();
297
298         RxDirection rxDirectionAEnd = new RxDirectionBuilder()
299         .setPort(portARx )
300         .build();
301
302         TxDirection txDirectionAEnd = new TxDirectionBuilder()
303         .setPort(portATx )
304         .build();*/
305
306         RxDirection rxDirectionAEnd = getRxDirection(tempAPortRx);
307
308         TxDirection txDirectionAEnd = getTxDirection(tempAPortTx);
309
310         ServiceAEnd serviceAEnd = new ServiceAEndBuilder()
311             .setClli(tempA.getClli())
312             .setNodeId(tempA.getNodeId())
313             .setServiceFormat(ServiceFormat.valueOf(tempA.getServiceFormat().getName()))
314             .setServiceRate(tempA.getServiceRate())
315             .setRxDirection(rxDirectionAEnd)
316             .setTxDirection(txDirectionAEnd)
317             .build();
318
319         /* ServiceZEnd Build .*/
320         org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev161014
321             .service.reconfigure.input.ServiceZEnd tempZ = serviceReconfigureInput.getServiceZEnd();
322
323         org.opendaylight.yang.gen.v1.http.org.openroadm.common
324             .service.types.rev161014.service.port.Port tempZPortRx =
325             serviceReconfigureInput.getServiceZEnd().getRxDirection().getPort();
326
327         org.opendaylight.yang.gen.v1.http.org.openroadm.common
328             .service.types.rev161014.service.port.Port tempZPortTx =
329             serviceReconfigureInput.getServiceZEnd().getTxDirection().getPort();
330
331         /*Port portZRx = new PortBuilder()
332         .setPortDeviceName(tempZPortRx.getPortDeviceName())
333         .setPortName(tempZPortRx.getPortName())
334         .setPortRack(tempZPortRx.getPortRack())
335         .setPortShelf(tempZPortRx.getPortShelf())
336         .setPortSlot(tempZPortRx.getPortSlot())
337         .setPortSubSlot(tempZPortRx.getPortSubSlot())
338         .setPortType(tempZPortRx.getPortType())
339         .build();
340
341         Port portZTx = new PortBuilder()
342         .setPortDeviceName(tempZPortTx.getPortDeviceName())
343         .setPortName(tempZPortTx.getPortName())
344         .setPortRack(tempZPortTx.getPortRack())
345         .setPortShelf(tempZPortTx.getPortShelf())
346         .setPortSlot(tempZPortTx.getPortSlot())
347         .setPortSubSlot(tempZPortTx.getPortSubSlot())
348         .setPortType(tempZPortTx.getPortType())
349         .build();
350
351         RxDirection rxDirectionZEnd = new RxDirectionBuilder()
352         .setPort(portZRx )
353         .build();
354
355         TxDirection txDirectionZEnd = new TxDirectionBuilder()
356         .setPort(portZTx )
357         .build();*/
358
359         RxDirection rxDirectionZEnd = getRxDirection(tempZPortRx);
360         TxDirection txDirectionZEnd = getTxDirection(tempZPortTx);
361
362         ServiceZEnd serviceZEnd = new ServiceZEndBuilder()
363             .setClli(tempZ.getClli())
364             .setNodeId(tempZ.getNodeId())
365             .setServiceFormat(ServiceFormat.valueOf(tempZ.getServiceFormat().getName()))
366             .setServiceRate(tempZ.getServiceRate())
367             .setRxDirection(rxDirectionZEnd)
368             .setTxDirection(txDirectionZEnd)
369             .build();
370
371
372         /* ServiceImplementationRequestInput  Build.*/
373
374         org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types
375             .rev170426.response.parameters.sp.response.parameters.PathDescription tmp = null;
376         try {
377             tmp = pathComputationOutput.getResponseParameters().getPathDescription();
378         } catch (NullPointerException e) {
379             LOG.error("PathDescription is null : " + e.toString());
380         }
381         PathDescriptionBuilder pathDescription = new PathDescriptionBuilder();
382         if (tmp != null) {
383             pathDescription = new PathDescriptionBuilder(tmp);
384         }
385         serviceImplementationRequestInput  = new ServiceImplementationRequestInputBuilder()
386         .setPathDescription(pathDescription.build())
387         .setServiceHandlerHeader(serviceHandlerHeader.build())
388         .setServiceName(serviceReconfigureInput.getNewServiceName())
389         .setServiceAEnd(serviceAEnd)
390         .setServiceZEnd(serviceZEnd)
391         .build();
392         LOG.info("ServiceImplementationRequestInput : " + serviceImplementationRequestInput.toString());
393     }
394
395
396     /*
397      * MappingAndSendingSIRequest class constructor
398      * for RPC serviceDelete.
399      *
400      * @param rpcRegistry RpcProviderRegistry
401      * @param requestId Request ID
402      * @param serviceName Service name
403      */
404     public MappingAndSendingSIRequest(RpcProviderRegistry rpcRegistry,String requestId, String serviceName) {
405         this.rpcRegistry = rpcRegistry;
406         if (rpcRegistry != null) {
407             service = rpcRegistry.getRpcService(StubrendererService.class);
408         }
409         setSuccess(false);
410         setError("");
411
412         /* ServiceDeleteInput Build .*/
413         ServiceHandlerHeaderBuilder serviceHandlerHeader = new ServiceHandlerHeaderBuilder();
414         if (requestId != null) {
415             serviceHandlerHeader.setRequestId(requestId);
416         }
417
418         serviceDeleteInput = new ServiceDeleteInputBuilder()
419         .setServiceHandlerHeader(serviceHandlerHeader.build())
420         .setServiceName(serviceName)
421         .build();
422     }
423
424     /*
425      * MappingAndSendingSIRequest Class constructor
426      * for modify Service in ODL Datastore.
427      *
428      * @param rpcRegistry RpcProviderRegistry
429      * @param services Services
430      */
431     public MappingAndSendingSIRequest(RpcProviderRegistry rpcRegistry,Services services) {
432         this.rpcRegistry = rpcRegistry;
433         if (rpcRegistry != null) {
434             service = rpcRegistry.getRpcService(StubrendererService.class);
435         }
436         setSuccess(false);
437         setError("");
438
439         /* Building ServiceImplementationRequestInput  / ServiceDeleteInput serviceDeleteInput .*/
440         ServiceHandlerHeaderBuilder serviceHandlerHeader = new ServiceHandlerHeaderBuilder();
441
442         /*ServiceAEnd Build .*/
443         org.opendaylight.yang.gen.v1.http.org.openroadm.common.service
444             .types.rev161014.service.ServiceAEnd tempA = services.getServiceAEnd();
445
446         org.opendaylight.yang.gen.v1.http.org.openroadm.common
447             .service.types.rev161014.service.port.Port tempAPortRx = tempA.getRxDirection().getPort();
448
449         org.opendaylight.yang.gen.v1.http.org.openroadm.common
450             .service.types.rev161014.service.port.Port tempAPortTx = tempA.getTxDirection().getPort();
451
452
453         RxDirection rxDirectionAEnd = getRxDirection(tempAPortRx);
454
455         TxDirection txDirectionAEnd = getTxDirection(tempAPortTx);
456
457         ServiceAEnd serviceAEnd = new ServiceAEndBuilder()
458             .setClli(tempA.getClli())
459             .setNodeId(tempA.getNodeId())
460             .setServiceFormat(ServiceFormat.valueOf(tempA.getServiceFormat().getName()))
461             .setServiceRate(tempA.getServiceRate())
462             .setRxDirection(rxDirectionAEnd)
463             .setTxDirection(txDirectionAEnd)
464             .build();
465
466         /* ServiceZEnd Build .*/
467         org.opendaylight.yang.gen.v1.http.org.openroadm.common.service
468             .types.rev161014.service.ServiceZEnd tempZ = services.getServiceZEnd();
469
470         org.opendaylight.yang.gen.v1.http.org.openroadm.common
471             .service.types.rev161014.service.port.Port tempZPortRx = tempZ.getRxDirection().getPort();
472
473         org.opendaylight.yang.gen.v1.http.org.openroadm.common
474             .service.types.rev161014.service.port.Port tempZPortTx = tempZ.getTxDirection().getPort();
475
476         RxDirection rxDirectionZEnd = getRxDirection(tempZPortRx);
477         TxDirection txDirectionZEnd = getTxDirection(tempZPortTx);
478
479         ServiceZEnd serviceZEnd = new ServiceZEndBuilder()
480             .setClli(tempZ.getClli())
481             .setNodeId(tempZ.getNodeId())
482             .setServiceFormat(ServiceFormat.valueOf(tempZ.getServiceFormat().getName()))
483             .setServiceRate(tempZ.getServiceRate())
484             .setRxDirection(rxDirectionZEnd)
485             .setTxDirection(txDirectionZEnd)
486             .build();
487
488
489         /* ServiceImplementationRequestInput  Build.*/
490
491
492         List<AToZ> atozList = new ArrayList<AToZ>();
493         List<ZToA> ztoaList = new ArrayList<ZToA>();
494
495         for (org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev161014.topology.AToZ
496                     tmp : services.getTopology().getAToZ()) {
497
498             AToZKey key = new AToZKey(tmp.getKey().getId());
499             Resource atozresource = new ResourceBuilder()
500                     .build();
501             AToZ atoz = new AToZBuilder()
502                 .setId(tmp.getId())
503                 .setKey(key)
504                 .setResource(atozresource)
505                 .build();
506             atozList.add(atoz);
507         }
508
509         for (org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev161014.topology.ZToA
510                     tmp : services.getTopology().getZToA()) {
511             ZToAKey key = new ZToAKey(tmp.getKey().getId());
512             Resource ztoaresource = new ResourceBuilder()
513                     .build();
514             ZToA ztoa = new ZToABuilder()
515                 .setId(tmp.getId())
516                 .setKey(key)
517                 .setResource(ztoaresource)
518                 .build();
519             ztoaList.add(ztoa);
520         }
521
522         AToZDirection atozdirection = new AToZDirectionBuilder()
523             .setAToZ(atozList)
524             .build();
525
526         ZToADirection ztoadirection = new ZToADirectionBuilder()
527             .setZToA(ztoaList)
528             .build();
529
530
531         PathDescription pathDescription = new PathDescriptionBuilder()
532             .setAToZDirection(atozdirection)
533             .setZToADirection(ztoadirection)
534             .build();
535
536         serviceImplementationRequestInput  = new ServiceImplementationRequestInputBuilder()
537         .setPathDescription(pathDescription)
538         .setServiceHandlerHeader(serviceHandlerHeader.build())
539         .setServiceName(services.getServiceName())
540         .setServiceAEnd(serviceAEnd)
541         .setServiceZEnd(serviceZEnd)
542         .build();
543         LOG.info("ServiceImplementationRequestInput : " + serviceImplementationRequestInput.toString());
544     }
545
546     /*
547      * Create RxDirection with Port
548      * information.
549      *
550      * @param tempPort Port
551      * @return RxDirection
552      */
553     public RxDirection getRxDirection(org.opendaylight.yang.gen.v1.http.org.openroadm.common
554             .service.types.rev161014.service.port.Port tempPort) {
555         Port port = new PortBuilder()
556             .setPortDeviceName(tempPort.getPortDeviceName())
557             .setPortName(tempPort.getPortName())
558             .setPortRack(tempPort.getPortRack())
559             .setPortShelf(tempPort.getPortShelf())
560             .setPortSlot(tempPort.getPortSlot())
561             .setPortSubSlot(tempPort.getPortSubSlot())
562             .setPortType(tempPort.getPortType())
563             .build();
564
565         RxDirection result = new RxDirectionBuilder()
566             .setPort(port)
567             .build();
568
569         return result;
570     }
571
572     /*
573      * Create TxDirection with Port
574      * information.
575      *
576      * @param tempPort Port
577      * @return TxDirection TxDirection
578      */
579     public TxDirection getTxDirection(org.opendaylight.yang.gen.v1.http.org.openroadm.common
580             .service.types.rev161014.service.port.Port tempPort) {
581         Port port = new PortBuilder()
582             .setPortDeviceName(tempPort.getPortDeviceName())
583             .setPortName(tempPort.getPortName())
584             .setPortRack(tempPort.getPortRack())
585             .setPortShelf(tempPort.getPortShelf())
586             .setPortSlot(tempPort.getPortSlot())
587             .setPortSubSlot(tempPort.getPortSubSlot())
588             .setPortType(tempPort.getPortType())
589             .build();
590
591         TxDirection result = new TxDirectionBuilder()
592             .setPort(port)
593             .build();
594
595         return result;
596     }
597
598     /*
599      * Send serviceImplementation request to Render.
600      *
601      * @return ServiceImplementationRequestOutput data response from Renderer
602      */
603     public ListenableFuture<ServiceImplementationRequestOutput> serviceImplementation() {
604         setSuccess(false);
605         return executor.submit(new Callable<ServiceImplementationRequestOutput>() {
606
607             @Override
608             public ServiceImplementationRequestOutput call() throws Exception {
609                 ServiceImplementationRequestOutput output = null;
610                 if (serviceImplementationRequestInput != null) {
611                     RpcResult<ServiceImplementationRequestOutput> rendererOutputResult = null;
612                     Future<RpcResult<ServiceImplementationRequestOutput>> rendererOutputFuture =
613                             service.serviceImplementationRequest(serviceImplementationRequestInput);
614                     try {
615                         rendererOutputResult = rendererOutputFuture.get();//wait to get  the result
616                     } catch (InterruptedException | CancellationException | ExecutionException e) {
617                         setError("Did not receive the expected response from renderer to pathComputationRequest RPC "
618                                 + e.toString());
619                         LOG.error(error);
620                         rendererOutputFuture.cancel(true);
621                     }
622
623                     if (rendererOutputResult != null && rendererOutputResult.isSuccessful()) {
624                         LOG.info("Renderer replied to serviceImplementation Request !");
625                         setSuccess(true);
626                         ServiceImplementationRequestOutput rendererOutput = rendererOutputResult.getResult();
627                         output = new ServiceImplementationRequestOutputBuilder()
628                         .setConfigurationResponseCommon(rendererOutput.getConfigurationResponseCommon())
629                         .build();
630                         setSuccess(true);
631                     }
632                 } else {
633                     LOG.info("serviceImplementationRequestInput is not valid");
634                 }
635
636                 return output;
637             }
638         });
639
640     }
641
642     /*
643      * Send serviceDelete request to Render.
644      *
645      * @return ServiceDeleteOutput data response from Renderer
646      */
647     public ListenableFuture<ServiceDeleteOutput> serviceDelete() {
648         setSuccess(false);
649         return executor.submit(new Callable<ServiceDeleteOutput>() {
650
651             @Override
652             public ServiceDeleteOutput call() throws Exception {
653                 ServiceDeleteOutput output = null;
654                 if (serviceDeleteInput != null) {
655                     RpcResult<ServiceDeleteOutput> rendererOutputResult = null;
656                     Future<RpcResult<ServiceDeleteOutput>> rendererOutputFuture =
657                             service.serviceDelete(serviceDeleteInput);
658
659                     try {
660                         rendererOutputResult = rendererOutputFuture.get();//wait to get  the result
661                     } catch (InterruptedException | CancellationException | ExecutionException e) {
662                         setError("Did not receive the expected response from renderer to pathComputationRequest RPC "
663                                 + e.toString());
664                         LOG.error(error);
665                         rendererOutputFuture.cancel(true);
666                     }
667
668                     if (rendererOutputResult != null && rendererOutputResult.isSuccessful()) {
669                         LOG.info("Renderer replied to serviceDelete Request!");
670                         setSuccess(true);
671                         ServiceDeleteOutput rendererOutput = rendererOutputResult.getResult();
672                         output = new ServiceDeleteOutputBuilder()
673                         .setConfigurationResponseCommon(rendererOutput.getConfigurationResponseCommon())
674                         .build();
675                         setSuccess(true);
676                     }
677                 }
678                 return output;
679             }
680         });
681
682     }
683
684
685     public Boolean getSuccess() {
686         return success;
687     }
688
689     public void setSuccess(Boolean success) {
690         this.success = success;
691     }
692
693     public String getError() {
694         return error;
695     }
696
697     public void setError(String error) {
698         this.error = error;
699     }
700
701 }