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