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