2 * Copyright © 2018 Orange, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.transportpce.servicehandler.utils;
10 import com.google.common.util.concurrent.ListenableFuture;
11 import com.google.common.util.concurrent.ListeningExecutorService;
12 import com.google.common.util.concurrent.MoreExecutors;
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;
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.rev171017.PathComputationRequestInput;
23 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.PathComputationRequestInputBuilder;
24 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.ServicePathRpcResult;
25 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.ServicePathRpcResultBuilder;
26 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.service.path.rpc.result.PathDescription;
27 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.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.rev170930.ServiceRpcResultSh;
31 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev170930.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.service.rev161014.ServiceCreateInput;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceCreateInputBuilder;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceDeleteInput;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceDeleteInputBuilder;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceRerouteInput;
47 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.ServiceRerouteInputBuilder;
48 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.TempServiceCreateInput;
49 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.TempServiceCreateInputBuilder;
50 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.TempServiceDeleteInput;
51 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.TempServiceDeleteInputBuilder;
52 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.delete.input.ServiceDeleteReqInfo;
53 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.delete.input.ServiceDeleteReqInfoBuilder;
54 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.path.description.AToZDirection;
55 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.path.description.AToZDirectionBuilder;
56 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.path.description.ZToADirection;
57 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.path.description.ZToADirectionBuilder;
58 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.RoutingConstraintsSp.PceMetric;
59 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev171016.RpcStatusEx;
60 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev171016.ServicePathNotificationTypes;
61 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev171016.service.handler.header.ServiceHandlerHeaderBuilder;
62 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
64 public final class ServiceDataUtils {
66 public static ServiceCreateInput buildServiceCreateInput() {
68 ServiceCreateInputBuilder builtInput = new ServiceCreateInputBuilder();
69 org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.create.input
70 .ServiceAEnd serviceAEnd = getServiceAEndBuild()
72 org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.create.input
73 .ServiceZEnd serviceZEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service
74 .create.input.ServiceZEndBuilder()
75 .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1).setNodeId("XPONDER-3-2")
76 .setTxDirection(getTxDirection())
77 .setRxDirection(getRxDirection())
80 builtInput.setCommonId("commonId");
81 builtInput.setConnectionType(ConnectionType.Service);
82 builtInput.setCustomer("Customer");
83 builtInput.setServiceName("service 1");
84 builtInput.setServiceAEnd(serviceAEnd);
85 builtInput.setServiceZEnd(serviceZEnd);
86 builtInput.setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request 1")
87 .setRpcAction(RpcActions.ServiceCreate).setNotificationUrl("notification url").build());
89 return builtInput.build();
92 public static PathComputationRequestInput createPceRequestInput(ServiceCreateInput input) {
93 MappingConstraints mappingConstraints =
94 new MappingConstraints(input.getHardConstraints(), input.getSoftConstraints());
95 mappingConstraints.serviceToServicePathConstarints();
96 ServiceHandlerHeaderBuilder serviceHandlerHeader = new ServiceHandlerHeaderBuilder();
97 SdncRequestHeader serviceHandler = input.getSdncRequestHeader();
98 if (serviceHandler != null) {
99 serviceHandlerHeader.setRequestId(serviceHandler.getRequestId());
101 return new PathComputationRequestInputBuilder()
102 .setServiceName(input.getServiceName())
103 .setResourceReserve(true)
104 .setServiceHandlerHeader(serviceHandlerHeader.build())
105 .setHardConstraints(mappingConstraints.getServicePathHardConstraints())
106 .setSoftConstraints(mappingConstraints.getServicePathSoftConstraints())
107 .setPceMetric(PceMetric.TEMetric)
108 .setServiceAEnd(ModelMappingUtils.createServiceAEnd(input.getServiceAEnd()))
109 .setServiceZEnd(ModelMappingUtils.createServiceZEnd(input.getServiceZEnd()))
113 public static TempServiceCreateInput buildTempServiceCreateInput() {
115 TempServiceCreateInputBuilder builtInput = new TempServiceCreateInputBuilder();
116 org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.temp.service.create.input
117 .ServiceAEnd serviceAEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014
118 .temp.service.create.input.ServiceAEndBuilder()
119 .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1).setNodeId("XPONDER-1-2")
120 .setTxDirection(getTxDirection())
121 .setRxDirection(getRxDirection())
123 org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.temp.service.create.input
124 .ServiceZEnd serviceZEnd = new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.temp
125 .service.create.input.ServiceZEndBuilder()
126 .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1).setNodeId("XPONDER-3-2")
127 .setTxDirection(getTxDirection())
128 .setRxDirection(getRxDirection())
131 builtInput.setCommonId("commonId");
132 builtInput.setConnectionType(ConnectionType.Service);
133 builtInput.setCustomer("Customer");
134 builtInput.setServiceAEnd(serviceAEnd);
135 builtInput.setServiceZEnd(serviceZEnd);
136 builtInput.setSdncRequestHeader(new SdncRequestHeaderBuilder().setRequestId("request 1")
137 .setRpcAction(RpcActions.TempServiceCreate).setNotificationUrl("notification url").build());
139 return builtInput.build();
142 public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.create.input
143 .ServiceAEndBuilder getServiceAEndBuild() {
144 return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.create.input
145 .ServiceAEndBuilder()
146 .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1).setNodeId("XPONDER-1-2")
147 .setTxDirection(getTxDirection())
148 .setRxDirection(getRxDirection());
151 public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.create.input
152 .ServiceZEndBuilder getServiceZEndBuild() {
153 return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.create.input
154 .ServiceZEndBuilder()
155 .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1).setNodeId("XPONDER-1-2")
156 .setTxDirection(getTxDirection())
157 .setRxDirection(getRxDirection());
160 private static TxDirection getTxDirection() {
161 return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service
162 .endpoint.TxDirectionBuilder().setPort(new PortBuilder().setPortDeviceName("device name")
163 .setPortName("port name").setPortRack("port rack").setPortShelf("port shelf")
164 .setPortSlot("port slot").setPortSubSlot("port subslot").setPortType("port type").build())
165 .setLgx(new LgxBuilder().setLgxDeviceName("lgx device name").setLgxPortName("lgx port name")
166 .setLgxPortRack("lgx port rack").setLgxPortShelf("lgx port shelf").build())
170 private static RxDirection getRxDirection() {
171 return new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service
172 .endpoint.RxDirectionBuilder()
173 .setPort(new PortBuilder().setPortDeviceName("device name").setPortName("port name")
174 .setPortRack("port rack").setPortShelf("port shelf").setPortSlot("port slot")
175 .setPortSubSlot("port subslot").setPortType("port type").build())
176 .setLgx(new LgxBuilder().setLgxDeviceName("lgx device name")
177 .setLgxPortName("lgx port name").setLgxPortRack("lgx port rack")
178 .setLgxPortShelf("lgx port shelf").build())
182 public static ServiceDeleteInput buildServiceDeleteInput() {
183 ServiceDeleteInputBuilder deleteInputBldr = new ServiceDeleteInputBuilder();
184 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
185 OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
186 DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
187 deleteInputBldr.setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder().setServiceName("service 1")
188 .setDueDate(datetime).setTailRetention(ServiceDeleteReqInfo.TailRetention.No).build());
189 SdncRequestHeaderBuilder sdncBuilder = new SdncRequestHeaderBuilder();
190 sdncBuilder.setNotificationUrl("notification url");
191 sdncBuilder.setRequestId("request 1");
192 sdncBuilder.setRequestSystemId("request system 1");
193 sdncBuilder.setRpcAction(RpcActions.ServiceDelete);
194 deleteInputBldr.setSdncRequestHeader(sdncBuilder.build());
195 return deleteInputBldr.build();
198 public static TempServiceDeleteInput buildTempServiceDeleteInput() {
199 TempServiceDeleteInputBuilder deleteInputBldr = new TempServiceDeleteInputBuilder();
200 deleteInputBldr.setCommonId("service 1");
201 return deleteInputBldr.build();
204 public static ServiceRerouteInput buildServiceRerouteInput() {
205 ServiceRerouteInputBuilder builder = new ServiceRerouteInputBuilder();
206 builder.setServiceName("service 1");
207 return builder.build();
210 public static ServicePathRpcResult buildServicePathRpcResult() {
211 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
212 OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
213 DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
214 ServicePathRpcResultBuilder builder = new ServicePathRpcResultBuilder();
215 builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.PathComputationRequest)
216 .setPathDescription(createPathDescription(0,1, 0, 1))
217 .setServiceName("service 1")
218 .setStatus(RpcStatusEx.Successful).setStatusMessage("success");
219 return builder.build();
222 public static ServicePathRpcResult buildServicePathRpcResult(
223 ServicePathNotificationTypes servicePathNotificationTypes, String serviceName, RpcStatusEx rpcStatusEx,
224 String message, Boolean pathDescription) {
225 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
226 OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
227 DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
228 ServicePathRpcResultBuilder builder = new ServicePathRpcResultBuilder();
229 builder.setNotificationType(servicePathNotificationTypes)
230 .setServiceName(serviceName)
231 .setStatus(rpcStatusEx).setStatusMessage(message);
232 if (pathDescription) {
233 builder.setPathDescription(createPathDescription(0L, 5L, 0L, 5L));
235 return builder.build();
238 public static ServicePathRpcResult buildFailedPceServicePathRpcResult() {
239 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
240 OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
241 DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
242 ServicePathRpcResultBuilder builder = new ServicePathRpcResultBuilder();
243 builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.PathComputationRequest)
244 .setPathDescription(createPathDescription(0, 1, 0, 1)).setServiceName("service 1")
245 .setStatus(RpcStatusEx.Failed).setStatusMessage("failed");
246 return builder.build();
249 public static ServicePathRpcResult buildFailedServicePathRpcResult() {
250 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
251 OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
252 DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
253 ServicePathRpcResultBuilder builder = new ServicePathRpcResultBuilder();
254 builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.ServiceImplementationRequest)
255 .setPathDescription(createPathDescription(0,1, 0, 1))
256 .setServiceName("service 1")
257 .setStatus(RpcStatusEx.Failed).setStatusMessage("failed");
258 return builder.build();
261 public static ServiceRpcResultSp buildServiceRpcResultSp() {
262 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
263 OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
264 DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
265 ServiceRpcResultSpBuilder builder = new ServiceRpcResultSpBuilder();
266 builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.ServiceImplementationRequest)
267 .setServiceName("service 1").setStatus(RpcStatusEx.Successful).setStatusMessage("success");
268 return builder.build();
271 public static ServiceRpcResultSp buildServiceRpcResultSp(ServicePathNotificationTypes servicePathNotificationTypes,
272 String serviceName, RpcStatusEx rpcStatusEx, String message) {
273 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
274 OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
275 DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
276 ServiceRpcResultSpBuilder builder = new ServiceRpcResultSpBuilder();
277 builder.setNotificationType(servicePathNotificationTypes).setServiceName(serviceName)
278 .setStatus(rpcStatusEx).setStatusMessage(message);
279 return builder.build();
282 public static ServiceRpcResultSh buildServiceRpcResultSh(ServiceNotificationTypes serviceNotificationTypes,
283 String serviceName, org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types
284 .rev170426.RpcStatusEx rpcStatusEx, String message) {
285 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
286 OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
287 DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
288 ServiceRpcResultShBuilder builder = new ServiceRpcResultShBuilder();
289 builder.setNotificationType(serviceNotificationTypes).setServiceName(serviceName)
290 .setStatus(rpcStatusEx).setStatusMessage(message);
291 return builder.build();
294 public static ServiceRpcResultSp buildFailedServiceRpcResultSp() {
295 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");
296 OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC);
297 DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime));
298 ServiceRpcResultSpBuilder builder = new ServiceRpcResultSpBuilder();
299 builder.setActualDate(datetime).setNotificationType(ServicePathNotificationTypes.ServiceImplementationRequest)
300 .setServiceName("service 1").setStatus(RpcStatusEx.Failed).setStatusMessage("failed");
301 return builder.build();
304 public static PathDescription createPathDescription(long azRate, long azWaveLength, long zaRate,
306 AToZDirection atozDirection = new AToZDirectionBuilder()
308 .setAToZWavelengthNumber(azWaveLength)
311 ZToADirection ztoaDirection = new ZToADirectionBuilder()
313 .setZToAWavelengthNumber(zaWaveLength)
316 PathDescription pathDescription = new PathDescriptionBuilder()
317 .setAToZDirection(atozDirection)
318 .setZToADirection(ztoaDirection)
320 return pathDescription;
323 public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.reconfigure.input
324 .ServiceAEndBuilder getServiceAEndBuildReconfigure() {
325 return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.reconfigure.input
326 .ServiceAEndBuilder()
327 .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1).setNodeId("XPONDER-1-2")
328 .setTxDirection(getTxDirection())
329 .setRxDirection(getRxDirection());
332 public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.reconfigure.input
333 .ServiceZEndBuilder getServiceZEndBuildReconfigure() {
334 return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.reconfigure.input
335 .ServiceZEndBuilder()
336 .setClli("clli").setServiceFormat(ServiceFormat.OC).setServiceRate((long) 1).setNodeId("XPONDER-1-2")
337 .setTxDirection(getTxDirection())
338 .setRxDirection(getRxDirection());
341 public static <T> ListenableFuture<T> returnFuture(T output) {
342 final ListeningExecutorService executor =
343 MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(1));
344 return executor.submit(new Callable<T>() {
346 public T call() throws Exception {
352 private ServiceDataUtils() {