Merge changes I1ed16552,Ia080da84
[transportpce.git] / servicehandler / src / test / java / org / opendaylight / transportpce / servicehandler / utils / ServiceDataUtils.java
1 /*
2  * Copyright © 2018 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 package org.opendaylight.transportpce.servicehandler.utils;
9
10 import com.google.common.util.concurrent.ListenableFuture;
11 import com.google.common.util.concurrent.ListeningExecutorService;
12 import com.google.common.util.concurrent.MoreExecutors;
13 import java.time.OffsetDateTime;
14 import java.time.ZoneOffset;
15 import java.time.format.DateTimeFormatter;
16 import java.util.concurrent.Callable;
17 import java.util.concurrent.Executors;
18 import org.opendaylight.transportpce.servicehandler.MappingConstraints;
19 import org.opendaylight.transportpce.servicehandler.ModelMappingUtils;
20 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.PathComputationRequestInput;
21 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.PathComputationRequestInputBuilder;
22 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.ServicePathRpcResult;
23 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.ServicePathRpcResultBuilder;
24 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.service.path.rpc.result.PathDescription;
25 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.service.path.rpc.result.PathDescriptionBuilder;
26 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev200520.ServiceRpcResultSp;
27 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev200520.ServiceRpcResultSpBuilder;
28 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev171017.ServiceRpcResultSh;
29 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev171017.ServiceRpcResultShBuilder;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev181130.NodeIdType;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.ConnectionType;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.RpcActions;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.ServiceNotificationTypes;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.sdnc.request.header.SdncRequestHeader;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.sdnc.request.header.SdncRequestHeaderBuilder;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.service.endpoint.RxDirection;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.service.endpoint.TxDirection;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.service.lgx.LgxBuilder;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.service.port.PortBuilder;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constrains.rev190329.routing.constraints.HardConstraintsBuilder;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constrains.rev190329.routing.constraints.SoftConstraintsBuilder;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.format.rev190531.ServiceFormat;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceCreateInput;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceCreateInputBuilder;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceDeleteInput;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceDeleteInputBuilder;
47 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceFeasibilityCheckInput;
48 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceFeasibilityCheckInputBuilder;
49 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceReconfigureInput;
50 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceReconfigureInputBuilder;
51 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceRerouteInput;
52 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceRerouteInputBuilder;
53 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceRestorationInput;
54 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceRestorationInput.Option;
55 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceRestorationInputBuilder;
56 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.TempServiceCreateInput;
57 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.TempServiceCreateInputBuilder;
58 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.TempServiceDeleteInput;
59 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.TempServiceDeleteInputBuilder;
60 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.delete.input.ServiceDeleteReqInfo;
61 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.delete.input.ServiceDeleteReqInfoBuilder;
62 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.feasibility.check.inputs.ServiceAEnd;
63 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.feasibility.check.inputs.ServiceAEndBuilder;
64 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.feasibility.check.inputs.ServiceZEnd;
65 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.feasibility.check.inputs.ServiceZEndBuilder;
66 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.path.description.AToZDirection;
67 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.path.description.AToZDirectionBuilder;
68 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.path.description.ZToADirection;
69 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev200629.path.description.ZToADirectionBuilder;
70 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.RoutingConstraintsSp.PceMetric;
71 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.RpcStatusEx;
72 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.ServicePathNotificationTypes;
73 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.handler.header.ServiceHandlerHeaderBuilder;
74 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
75
76 public final class ServiceDataUtils {
77
78     public static ServiceCreateInput buildServiceCreateInput() {
79
80         org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.create.input
81             .ServiceAEnd serviceAEnd = getServiceAEndBuild()
82             .build();
83         org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.create.input
84             .ServiceZEnd serviceZEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service
85             .create.input.ServiceZEndBuilder()
86             .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1)
87             .setNodeId(new NodeIdType("XPONDER-3-2"))
88             .setTxDirection(getTxDirection())
89             .setRxDirection(getRxDirection())
90             .build();
91
92         ServiceCreateInputBuilder builtInput = new ServiceCreateInputBuilder()
93             .setCommonId("commonId")
94             .setConnectionType(ConnectionType.Service)
95             .setCustomer("Customer")
96             .setServiceName("service 1")
97             .setServiceAEnd(serviceAEnd)
98             .setServiceZEnd(serviceZEnd)
99             .setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request 1")
100                 .setRpcAction(RpcActions.ServiceCreate).setNotificationUrl("notification url").build());
101
102         return builtInput.build();
103     }
104
105     public static ServiceCreateInput buildServiceCreateInputWithHardConstraints() {
106
107         org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.create.input
108                 .ServiceAEnd serviceAEnd = getServiceAEndBuild()
109                 .build();
110         org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.create.input
111                 .ServiceZEnd serviceZEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service
112                 .create.input.ServiceZEndBuilder()
113                 .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1)
114                 .setNodeId(new NodeIdType("XPONDER-3-2"))
115                 .setTxDirection(getTxDirection())
116                 .setRxDirection(getRxDirection())
117                 .build();
118
119         ServiceCreateInputBuilder builtInput = new ServiceCreateInputBuilder()
120             .setCommonId("commonId")
121             .setConnectionType(ConnectionType.Service)
122             .setCustomer("Customer")
123             .setServiceName("service 1")
124             .setServiceAEnd(serviceAEnd)
125             .setServiceZEnd(serviceZEnd)
126             .setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request 1")
127                 .setRpcAction(RpcActions.ServiceCreate).setNotificationUrl("notification url").build())
128             .setHardConstraints(new HardConstraintsBuilder().build());
129
130         return builtInput.build();
131     }
132
133     public static ServiceCreateInput buildServiceCreateInputWithSoftConstraints() {
134
135         org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.create.input
136                 .ServiceAEnd serviceAEnd = getServiceAEndBuild()
137                 .build();
138         org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.create.input
139                 .ServiceZEnd serviceZEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service
140                 .create.input.ServiceZEndBuilder()
141                 .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1)
142                 .setNodeId(new NodeIdType("XPONDER-3-2"))
143                 .setTxDirection(getTxDirection())
144                 .setRxDirection(getRxDirection())
145                 .build();
146
147         ServiceCreateInputBuilder builtInput = new ServiceCreateInputBuilder()
148             .setCommonId("commonId")
149             .setConnectionType(ConnectionType.Service)
150             .setCustomer("Customer")
151             .setServiceName("service 1")
152             .setServiceAEnd(serviceAEnd)
153             .setServiceZEnd(serviceZEnd)
154             .setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request 1")
155                 .setRpcAction(RpcActions.ServiceCreate).setNotificationUrl("notification url").build())
156             .setSoftConstraints(new SoftConstraintsBuilder().build());
157
158         return builtInput.build();
159     }
160
161     public static PathComputationRequestInput createPceRequestInput(ServiceCreateInput input) {
162         MappingConstraints mappingConstraints =
163                 new MappingConstraints(input.getHardConstraints(), input.getSoftConstraints());
164         mappingConstraints.serviceToServicePathConstarints();
165         ServiceHandlerHeaderBuilder serviceHandlerHeader = new ServiceHandlerHeaderBuilder();
166         SdncRequestHeader serviceHandler = input.getSdncRequestHeader();
167         if (serviceHandler != null) {
168             serviceHandlerHeader.setRequestId(serviceHandler.getRequestId());
169         }
170         return new PathComputationRequestInputBuilder()
171             .setServiceName(input.getServiceName())
172             .setResourceReserve(true)
173             .setServiceHandlerHeader(serviceHandlerHeader.build())
174             .setHardConstraints(mappingConstraints.getServicePathHardConstraints())
175             .setSoftConstraints(mappingConstraints.getServicePathSoftConstraints())
176             .setPceMetric(PceMetric.TEMetric)
177             .setServiceAEnd(ModelMappingUtils.createServiceAEnd(input.getServiceAEnd()))
178             .setServiceZEnd(ModelMappingUtils.createServiceZEnd(input.getServiceZEnd()))
179             .build();
180     }
181
182     public static TempServiceCreateInput buildTempServiceCreateInput() {
183
184         org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.temp.service.create.input
185             .ServiceAEnd serviceAEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531
186             .temp.service.create.input.ServiceAEndBuilder()
187             .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1)
188             .setNodeId(new NodeIdType("XPONDER-1-2"))
189             .setTxDirection(getTxDirection())
190             .setRxDirection(getRxDirection())
191             .build();
192         org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.temp.service.create.input
193             .ServiceZEnd serviceZEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.temp
194             .service.create.input.ServiceZEndBuilder()
195             .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1)
196             .setNodeId(new NodeIdType("XPONDER-3-2"))
197             .setTxDirection(getTxDirection())
198             .setRxDirection(getRxDirection())
199             .build();
200
201         TempServiceCreateInputBuilder builtInput = new TempServiceCreateInputBuilder()
202             .setCommonId("commonId")
203             .setConnectionType(ConnectionType.Service)
204             .setCustomer("Customer")
205             .setServiceAEnd(serviceAEnd)
206             .setServiceZEnd(serviceZEnd)
207             .setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request 1")
208                 .setRpcAction(RpcActions.TempServiceCreate).setNotificationUrl("notification url").build());
209
210         return builtInput.build();
211     }
212
213     public static ServiceFeasibilityCheckInput buildServiceFeasibilityCheckInput() {
214
215         ServiceAEnd serviceAEnd = new ServiceAEndBuilder()
216                     .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1)
217                     .setNodeId(new NodeIdType("XPONDER-1-2"))
218                     .setTxDirection(getTxDirection()).setRxDirection(getRxDirection()).build();
219         ServiceZEnd serviceZEnd = new ServiceZEndBuilder()
220                     .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1)
221                     .setNodeId(new NodeIdType("XPONDER-3-2"))
222                     .setTxDirection(getTxDirection()).setRxDirection(getRxDirection()).build();
223         ServiceAEnd serviceAEndvalue = new ServiceAEndBuilder().build();
224
225         ServiceFeasibilityCheckInputBuilder builtInput = new ServiceFeasibilityCheckInputBuilder()
226             .setCommonId("commonId")
227             .setConnectionType(ConnectionType.Service)
228             .setCustomer("Customer")
229             .setServiceAEnd(serviceAEnd)
230             .setServiceZEnd(serviceZEnd)
231             .setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request 1")
232                 .setRpcAction(RpcActions.ServiceFeasibilityCheck).setNotificationUrl("notification url").build());
233         return builtInput.build();
234     }
235
236     public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.create.input
237         .ServiceAEndBuilder getServiceAEndBuild() {
238         return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.create.input
239             .ServiceAEndBuilder()
240             .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1)
241             .setNodeId(new NodeIdType("XPONDER-1-2"))
242             .setTxDirection(getTxDirection())
243             .setRxDirection(getRxDirection());
244     }
245
246     public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.create.input
247         .ServiceZEndBuilder getServiceZEndBuild() {
248         return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.create.input
249             .ServiceZEndBuilder()
250             .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1)
251             .setNodeId(new NodeIdType("XPONDER-1-2"))
252             .setTxDirection(getTxDirection())
253             .setRxDirection(getRxDirection());
254     }
255
256     private static TxDirection getTxDirection() {
257         return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.service
258                 .endpoint.TxDirectionBuilder().setPort(new PortBuilder().setPortDeviceName("device name")
259                         .setPortName("port name").setPortRack("port rack").setPortShelf("port shelf")
260                         .setPortSlot("port slot").setPortSubSlot("port subslot").setPortType("port type").build())
261                         .setLgx(new LgxBuilder().setLgxDeviceName("lgx device name").setLgxPortName("lgx port name")
262                                 .setLgxPortRack("lgx port rack").setLgxPortShelf("lgx port shelf").build())
263                         .build();
264     }
265
266     private static RxDirection getRxDirection() {
267         return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.service
268                 .endpoint.RxDirectionBuilder()
269                 .setPort(new PortBuilder().setPortDeviceName("device name").setPortName("port name")
270                     .setPortRack("port rack").setPortShelf("port shelf").setPortSlot("port slot")
271                     .setPortSubSlot("port subslot").setPortType("port type").build())
272                 .setLgx(new LgxBuilder().setLgxDeviceName("lgx device name")
273                     .setLgxPortName("lgx port name").setLgxPortRack("lgx port rack")
274                     .setLgxPortShelf("lgx port shelf").build())
275                         .build();
276     }
277
278     public static ServiceDeleteInput buildServiceDeleteInput() {
279
280         ServiceDeleteInputBuilder deleteInputBldr = new ServiceDeleteInputBuilder();
281         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
282         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
283         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
284         deleteInputBldr.setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder().setServiceName("service 1")
285             .setDueDate(datetime).setTailRetention(ServiceDeleteReqInfo.TailRetention.No).build());
286         SdncRequestHeaderBuilder sdncBuilder = new SdncRequestHeaderBuilder()
287             .setNotificationUrl("notification url")
288             .setRequestId("request 1")
289             .setRequestSystemId("request system 1")
290             .setRpcAction(RpcActions.ServiceDelete);
291         deleteInputBldr.setSdncRequestHeader(sdncBuilder.build());
292         return deleteInputBldr.build();
293     }
294
295     public static TempServiceDeleteInput buildTempServiceDeleteInput() {
296         TempServiceDeleteInputBuilder deleteInputBldr = new TempServiceDeleteInputBuilder()
297             .setCommonId("service 1");
298         return deleteInputBldr.build();
299     }
300
301     public static TempServiceDeleteInput buildTempServiceDeleteInput(String commonId) {
302         TempServiceDeleteInputBuilder deleteInputBldr = new TempServiceDeleteInputBuilder()
303             .setCommonId(commonId);
304         return deleteInputBldr.build();
305     }
306
307     public static ServiceRerouteInput buildServiceRerouteInput() {
308         ServiceRerouteInputBuilder builder = new ServiceRerouteInputBuilder()
309             .setServiceName("service 1");
310         return builder.build();
311     }
312
313     public static ServiceRestorationInput buildServiceRestorationInput() {
314         ServiceRestorationInputBuilder builder = new ServiceRestorationInputBuilder()
315             .setServiceName("service 1")
316             .setOption(Option.Permanent);
317         return builder.build();
318     }
319
320     public static ServiceReconfigureInput buildServiceReconfigureInput() {
321
322         org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.reconfigure.input
323             .ServiceAEnd serviceAEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service
324                 .reconfigure.input.ServiceAEndBuilder()
325                 .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1)
326                 .setNodeId(new NodeIdType("XPONDER-1-2")).setTxDirection(getTxDirection())
327                 .setRxDirection(getRxDirection())
328                 .build();
329         org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.reconfigure.input
330             .ServiceZEnd serviceZEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service
331                 .reconfigure.input.ServiceZEndBuilder()
332                 .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1)
333                 .setNodeId(new NodeIdType("XPONDER-3-2")).setTxDirection(getTxDirection())
334                 .setRxDirection(getRxDirection())
335                 .build();
336
337         ServiceReconfigureInputBuilder builtInput = new ServiceReconfigureInputBuilder()
338             .setCommonId("commonId")
339             .setConnectionType(ConnectionType.Service)
340             .setCustomer("Customer")
341             .setServiceName("service 1")
342             .setServiceAEnd(serviceAEnd)
343             .setServiceZEnd(serviceZEnd);
344         return builtInput.build();
345     }
346
347     public static ServicePathRpcResult buildServicePathRpcResult() {
348         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
349         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
350         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
351         ServicePathRpcResultBuilder builder = new ServicePathRpcResultBuilder();
352         builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.PathComputationRequest)
353             .setPathDescription(createPathDescription(0,1, 0, 1))
354             .setServiceName("service 1")
355             .setStatus(RpcStatusEx.Successful).setStatusMessage("success");
356         return builder.build();
357     }
358
359     public static ServicePathRpcResult buildServicePathRpcResult(
360             ServicePathNotificationTypes servicePathNotificationTypes, String serviceName, RpcStatusEx rpcStatusEx,
361             String message, Boolean pathDescription) {
362         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
363         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
364         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
365         ServicePathRpcResultBuilder builder = new ServicePathRpcResultBuilder();
366         builder.setNotificationType(servicePathNotificationTypes)
367                 .setServiceName(serviceName)
368                 .setStatus(rpcStatusEx).setStatusMessage(message);
369         if (pathDescription) {
370             builder.setPathDescription(createPathDescription(0L, 5L, 0L, 5L));
371         }
372         return builder.build();
373     }
374
375     public static ServicePathRpcResult buildFailedPceServicePathRpcResult() {
376         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
377         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
378         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
379         ServicePathRpcResultBuilder builder = new ServicePathRpcResultBuilder();
380         builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.PathComputationRequest)
381                 .setPathDescription(createPathDescription(0, 1, 0, 1)).setServiceName("service 1")
382                 .setStatus(RpcStatusEx.Failed).setStatusMessage("failed");
383         return builder.build();
384     }
385
386     public static ServicePathRpcResult buildFailedServicePathRpcResult() {
387         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
388         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
389         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
390         ServicePathRpcResultBuilder builder = new ServicePathRpcResultBuilder();
391         builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.ServiceImplementationRequest)
392             .setPathDescription(createPathDescription(0,1, 0, 1))
393             .setServiceName("service 1")
394                 .setStatus(RpcStatusEx.Failed).setStatusMessage("failed");
395         return builder.build();
396     }
397
398     public static ServiceRpcResultSp buildServiceRpcResultSp() {
399         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
400         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
401         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
402         ServiceRpcResultSpBuilder builder = new ServiceRpcResultSpBuilder();
403         builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.ServiceImplementationRequest)
404                 .setServiceName("service 1").setStatus(RpcStatusEx.Successful).setStatusMessage("success");
405         return builder.build();
406     }
407
408     public static ServiceRpcResultSp buildServiceRpcResultSp(ServicePathNotificationTypes servicePathNotificationTypes,
409             String serviceName, RpcStatusEx rpcStatusEx, String message) {
410         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
411         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
412         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
413         ServiceRpcResultSpBuilder builder = new ServiceRpcResultSpBuilder();
414         builder.setNotificationType(servicePathNotificationTypes).setServiceName(serviceName)
415                 .setStatus(rpcStatusEx).setStatusMessage(message);
416         return builder.build();
417     }
418
419     public static ServiceRpcResultSh buildServiceRpcResultSh(
420             ServiceNotificationTypes serviceNotificationTypes,
421             String serviceName,
422             org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.RpcStatusEx
423                 rpcStatusEx,
424             String message) {
425         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
426         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
427         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
428         ServiceRpcResultShBuilder builder = new ServiceRpcResultShBuilder();
429         builder.setNotificationType(serviceNotificationTypes).setServiceName(serviceName)
430                 .setStatus(rpcStatusEx).setStatusMessage(message);
431         return builder.build();
432     }
433
434     public static ServiceRpcResultSp buildFailedServiceRpcResultSp() {
435         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
436         OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
437         DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
438         ServiceRpcResultSpBuilder builder = new ServiceRpcResultSpBuilder();
439         builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.ServiceImplementationRequest)
440                 .setServiceName("service 1").setStatus(RpcStatusEx.Failed).setStatusMessage("failed");
441         return builder.build();
442     }
443
444     public static PathDescription createPathDescription(long azRate, long azWaveLength, long zaRate,
445         long zaWaveLength) {
446         AToZDirection atozDirection = new AToZDirectionBuilder()
447             .setRate(azRate)
448             .setAToZWavelengthNumber(azWaveLength)
449             .setAToZ(null)
450             .build();
451         ZToADirection ztoaDirection = new ZToADirectionBuilder()
452             .setRate(zaRate)
453             .setZToAWavelengthNumber(zaWaveLength)
454             .setZToA(null)
455             .build();
456         PathDescription pathDescription = new PathDescriptionBuilder()
457             .setAToZDirection(atozDirection)
458             .setZToADirection(ztoaDirection)
459             .build();
460         return pathDescription;
461     }
462
463     public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.reconfigure.input
464         .ServiceAEndBuilder getServiceAEndBuildReconfigure() {
465         return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.reconfigure.input
466             .ServiceAEndBuilder()
467             .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1)
468             .setNodeId(new NodeIdType("XPONDER-1-2"))
469             .setTxDirection(getTxDirection())
470             .setRxDirection(getRxDirection());
471     }
472
473     public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.reconfigure.input
474         .ServiceZEndBuilder getServiceZEndBuildReconfigure() {
475         return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.reconfigure.input
476             .ServiceZEndBuilder()
477             .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1)
478             .setNodeId(new NodeIdType("XPONDER-1-2"))
479             .setTxDirection(getTxDirection())
480             .setRxDirection(getRxDirection());
481     }
482
483     public static <T> ListenableFuture<T> returnFuture(T output) {
484         final ListeningExecutorService executor =
485                 MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(1));
486         return executor.submit(new Callable<T>() {
487             @Override
488             public T call() throws Exception {
489                 return output;
490             }
491         });
492     }
493
494     private ServiceDataUtils() {
495     }
496
497 }