Merge "Catalog RPC Implementation"
[transportpce.git] / servicehandler / src / main / java / org / opendaylight / transportpce / servicehandler / ModelMappingUtils.java
1 /*
2  * Copyright © 2017 Orange, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.transportpce.servicehandler;
9
10 import com.google.common.collect.ImmutableMap;
11 import com.google.common.util.concurrent.ListenableFuture;
12 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.PathComputationRequestOutput;
13 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceAEnd;
14 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceAEndBuilder;
15 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceZEnd;
16 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.path.computation.request.input.ServiceZEndBuilder;
17 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808.service.path.rpc.result.PathDescription;
18 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInputBuilder;
19 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
20 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInputBuilder;
21 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType;
22 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ServiceEndpoint;
23 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.configuration.response.common.ConfigurationResponseCommonBuilder;
24 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.response.parameters.ResponseParametersBuilder;
25 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.LifecycleState;
26 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
27 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
28 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODU0;
29 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODU1;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODU2;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODU2e;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODU3;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODU4;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODUCn;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODUflexCbr;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODUflexFlexe;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODUflexGfp;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.ODUflexImp;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OTU0;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OTU1;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OTU2;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OTU2e;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OTU3;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OTU4;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OTUCn;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OTUflex;
47 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OduRateIdentity;
48 import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev210924.OtuRateIdentity;
49 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddOpenroadmOperationalModesToCatalogInput;
50 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddOpenroadmOperationalModesToCatalogOutput;
51 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddOpenroadmOperationalModesToCatalogOutputBuilder;
52 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddSpecificOperationalModesToCatalogInput;
53 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddSpecificOperationalModesToCatalogOutput;
54 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.AddSpecificOperationalModesToCatalogOutputBuilder;
55 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateInput;
56 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateOutput;
57 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceCreateOutputBuilder;
58 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteInput;
59 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteOutput;
60 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceDeleteOutputBuilder;
61 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckInput;
62 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckOutput;
63 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceFeasibilityCheckOutputBuilder;
64 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureInput;
65 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureOutput;
66 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceReconfigureOutputBuilder;
67 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteInput;
68 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteOutput;
69 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRerouteOutputBuilder;
70 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationInput;
71 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationOutput;
72 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.ServiceRestorationOutputBuilder;
73 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateInput;
74 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateOutput;
75 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceCreateOutputBuilder;
76 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteInput;
77 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteOutput;
78 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.TempServiceDeleteOutputBuilder;
79 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.Services;
80 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesBuilder;
81 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210.service.list.ServicesKey;
82 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirection;
83 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirectionBuilder;
84 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.TxDirection;
85 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.TxDirectionBuilder;
86 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.handler.header.ServiceHandlerHeaderBuilder;
87 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.path.PathDescriptionBuilder;
88 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePaths;
89 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePathsBuilder;
90 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePathsKey;
91 import org.opendaylight.yangtools.yang.common.RpcResult;
92 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
93 import org.slf4j.Logger;
94 import org.slf4j.LoggerFactory;
95
96 public final class ModelMappingUtils {
97     private static final Logger LOG = LoggerFactory.getLogger(ModelMappingUtils.class);
98
99     private static final ImmutableMap<String, OduRateIdentity> ODU_RATE_MAP =
100         ImmutableMap.<String, OduRateIdentity>builder()
101             .put("ODU0", ODU0.VALUE)
102             .put("ODU1", ODU1.VALUE)
103             .put("ODU2", ODU2.VALUE)
104             .put("ODU2e", ODU2e.VALUE)
105             .put("ODU3", ODU3.VALUE)
106             .put("ODU4", ODU4.VALUE)
107             .put("ODUCn", ODUCn.VALUE)
108             .put("ODUflexCbr", ODUflexCbr.VALUE)
109             .put("ODUflexFlexe", ODUflexFlexe.VALUE)
110             .put("ODUflexGfp", ODUflexGfp.VALUE)
111             .put("ODUflexImp", ODUflexImp.VALUE)
112             .build();
113
114     private static final ImmutableMap<String, OtuRateIdentity> OTU_RATE_MAP =
115         ImmutableMap.<String, OtuRateIdentity>builder()
116             .put("OTU0", OTU0.VALUE)
117             .put("OTU1", OTU1.VALUE)
118             .put("OTU2", OTU2.VALUE)
119             .put("OTU2e", OTU2e.VALUE)
120             .put("OTU3", OTU3.VALUE)
121             .put("OTU4", OTU4.VALUE)
122             .put("OTUCn", OTUCn.VALUE)
123             .put("OTUflex", OTUflex.VALUE)
124             .build();
125
126     private ModelMappingUtils() {
127     }
128
129     public static ServiceImplementationRequestInput createServiceImplementationRequest(
130             ServiceInput input,
131             PathDescription pathDescription) {
132         return new ServiceImplementationRequestInputBuilder()
133             .setConnectionType(input.getConnectionType())
134             .setServiceName(
135                 input.isServiceReconfigure()
136                     ? input.getNewServiceName()
137                     : input.getServiceName())
138             .setServiceAEnd(
139                 new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
140                         .service.implementation.request.input.ServiceAEndBuilder()
141                     .setServiceFormat(input.getServiceAEnd().getServiceFormat())
142                     .setServiceRate(input.getServiceAEnd().getServiceRate())
143                     .setOtuServiceRate(getOtuServiceRate(input.getServiceAEnd().getOtuServiceRate()))
144                     .setOduServiceRate(getOduServiceRate(input.getServiceAEnd().getOduServiceRate()))
145                     .setClli(input.getServiceAEnd().getClli())
146                     .setNodeId(new NodeIdType(input.getServiceAEnd().getNodeId().getValue()).getValue())
147                     .setTxDirection(
148                         new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
149                                 .service.endpoint.sp.TxDirectionBuilder()
150                             .setPort(
151                                 input.getServiceAEnd().getTxDirection().values().stream().findFirst().get().getPort())
152                             .build())
153                     .setRxDirection(
154                         new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
155                                 .service.endpoint.sp.RxDirectionBuilder()
156                             .setPort(
157                                 input.getServiceAEnd().getRxDirection().values().stream().findFirst().get().getPort())
158                             .build())
159                     .build())
160             .setServiceZEnd(
161                 new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
162                         .service.implementation.request.input.ServiceZEndBuilder()
163                     .setServiceFormat(input.getServiceZEnd().getServiceFormat())
164                     .setServiceRate(input.getServiceZEnd().getServiceRate())
165                     .setOtuServiceRate(getOtuServiceRate(input.getServiceZEnd().getOtuServiceRate()))
166                     .setOduServiceRate(getOduServiceRate(input.getServiceZEnd().getOduServiceRate()))
167                     .setClli(input.getServiceZEnd().getClli())
168                     .setNodeId(new NodeIdType(input.getServiceZEnd().getNodeId().getValue()).getValue())
169                     .setTxDirection(
170                         new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
171                                 .service.endpoint.sp.TxDirectionBuilder()
172                             .setPort(
173                                 input.getServiceZEnd().getTxDirection().values().stream().findFirst().get().getPort())
174                             .build())
175                     .setRxDirection(
176                         new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
177                                 .service.endpoint.sp.RxDirectionBuilder()
178                             .setPort(
179                                 input.getServiceZEnd().getRxDirection().values().stream().findFirst().get().getPort())
180                             .build())
181                     .build())
182             .setConnectionType(input.getConnectionType())
183             .setServiceHandlerHeader(
184                 new ServiceHandlerHeaderBuilder().setRequestId(input.getSdncRequestHeader().getRequestId()).build())
185             .setPathDescription(
186                 new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
187                         .service.implementation.request.input.PathDescriptionBuilder()
188                     .setAToZDirection(pathDescription.getAToZDirection())
189                     .setZToADirection(pathDescription.getZToADirection())
190                     .build())
191             .build();
192     }
193
194     private static OduRateIdentity getOduServiceRate(OduRateIdentity oduServiceRate) {
195         if (oduServiceRate == null || !ODU_RATE_MAP.containsKey(oduServiceRate.toString())) {
196             LOG.error("ODU rate {} not recognized", oduServiceRate);
197             return null;
198         }
199         return ODU_RATE_MAP.get(oduServiceRate.toString());
200     }
201
202     private static OtuRateIdentity getOtuServiceRate(OtuRateIdentity otuServiceRate) {
203         if (otuServiceRate == null || !OTU_RATE_MAP.containsKey(otuServiceRate.toString())) {
204             LOG.error("OTU rate {} not recognized", otuServiceRate);
205             return null;
206         }
207         return OTU_RATE_MAP.get(otuServiceRate.toString());
208     }
209
210     public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
211             .ServiceDeleteInput createServiceDeleteInput(ServiceInput serviceInput) {
212         return new ServiceDeleteInputBuilder()
213             .setServiceName(serviceInput.getServiceName())
214             .setServiceHandlerHeader(
215                 new ServiceHandlerHeaderBuilder()
216                     .setRequestId(serviceInput.getSdncRequestHeader().getRequestId())
217                     .build())
218             .build();
219     }
220
221     public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
222             .ServiceDeleteInput createServiceDeleteInput(
223                 ServiceRerouteInput serviceRerouteinput,
224                 Services services) {
225         return new ServiceDeleteInputBuilder()
226             .setServiceName(serviceRerouteinput.getServiceName())
227             .setServiceHandlerHeader(
228                 new ServiceHandlerHeaderBuilder()
229                     .setRequestId(services.getSdncRequestHeader().getRequestId())
230                     .build())
231             .build();
232     }
233
234     public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
235             .ServiceDeleteInput createServiceDeleteInput(
236                 ServiceRestorationInput serviceRestorationInput,
237                 Services services) {
238         return new ServiceDeleteInputBuilder()
239             .setServiceName(serviceRestorationInput.getServiceName())
240             .setServiceHandlerHeader(
241                 new ServiceHandlerHeaderBuilder()
242                     .setRequestId(services.getSdncRequestHeader().getRequestId())
243                     .build())
244             .build();
245     }
246
247     public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
248             .ServiceDeleteInput createServiceDeleteInput(ServiceReconfigureInput serviceReconfigureInput) {
249         String serviceName = serviceReconfigureInput.getServiceName();
250         return new ServiceDeleteInputBuilder()
251             .setServiceName(serviceName)
252             .setServiceHandlerHeader(
253                 new ServiceHandlerHeaderBuilder().setRequestId(serviceName + "-reconfigure").build())
254             .build();
255     }
256
257     public static ServiceAEnd createServiceAEnd(ServiceEndpoint serviceAEnd) {
258         return new ServiceAEndBuilder()
259             .setClli(serviceAEnd.getClli())
260             .setNodeId(serviceAEnd.getNodeId().getValue())
261             .setRxDirection(createRxDirection(serviceAEnd.getRxDirection().values().stream().findFirst().get()))
262             .setServiceFormat(serviceAEnd.getServiceFormat())
263             .setServiceRate(serviceAEnd.getServiceRate())
264             .setTxDirection(createTxDirection(serviceAEnd.getTxDirection().values().stream().findFirst().get()))
265             .build();
266     }
267
268     public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
269             .path.computation.reroute.request.input.ServiceAEnd createServiceAEndReroute(ServiceEndpoint serviceAEnd) {
270         return new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
271                 .path.computation.reroute.request.input.ServiceAEndBuilder()
272                 .setClli(serviceAEnd.getClli())
273                 .setNodeId(serviceAEnd.getNodeId().getValue())
274                 .setRxDirection(createRxDirection(serviceAEnd.getRxDirection().values().stream().findFirst().get()))
275                 .setServiceFormat(serviceAEnd.getServiceFormat())
276                 .setServiceRate(serviceAEnd.getServiceRate())
277                 .setTxDirection(createTxDirection(serviceAEnd.getTxDirection().values().stream().findFirst().get()))
278                 .build();
279     }
280
281     public static ServiceZEnd createServiceZEnd(ServiceEndpoint serviceZEnd) {
282         return new ServiceZEndBuilder()
283             .setClli(serviceZEnd.getClli())
284             .setNodeId(serviceZEnd.getNodeId().getValue())
285             .setRxDirection(createRxDirection(serviceZEnd.getRxDirection().values().stream().findFirst().get()))
286             .setServiceFormat(serviceZEnd.getServiceFormat())
287             .setServiceRate(serviceZEnd.getServiceRate())
288             .setTxDirection(createTxDirection(serviceZEnd.getTxDirection().values().stream().findFirst().get()))
289             .build();
290     }
291
292     public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
293             .path.computation.reroute.request.input.ServiceZEnd createServiceZEndReroute(ServiceEndpoint serviceZEnd) {
294         return new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
295                 .path.computation.reroute.request.input.ServiceZEndBuilder()
296                 .setClli(serviceZEnd.getClli())
297                 .setNodeId(serviceZEnd.getNodeId().getValue())
298                 .setRxDirection(createRxDirection(serviceZEnd.getRxDirection().values().stream().findFirst().get()))
299                 .setServiceFormat(serviceZEnd.getServiceFormat())
300                 .setServiceRate(serviceZEnd.getServiceRate())
301                 .setTxDirection(createTxDirection(serviceZEnd.getTxDirection().values().stream().findFirst().get()))
302                 .build();
303     }
304
305     public static RxDirection createRxDirection(
306             org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
307                 .service.endpoint.RxDirection rxDirection) {
308         return new RxDirectionBuilder().setPort(rxDirection.getPort()).build();
309     }
310
311     public static TxDirection createTxDirection(
312             org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
313                 .service.endpoint.TxDirection txDirection) {
314         return new TxDirectionBuilder().setPort(txDirection.getPort()).build();
315     }
316
317     public static ListenableFuture<RpcResult<ServiceDeleteOutput>> createDeleteServiceReply(
318             ServiceDeleteInput input, String finalAck, String message, String responseCode) {
319         return RpcResultBuilder
320             .success(
321                 new ServiceDeleteOutputBuilder()
322                     .setConfigurationResponseCommon(
323                         new ConfigurationResponseCommonBuilder()
324                             .setAckFinalIndicator(finalAck)
325                             .setResponseMessage(message)
326                             .setResponseCode(responseCode)
327                             .setRequestId(
328                                 input.getSdncRequestHeader() == null
329                                     ? null
330                                     : input.getSdncRequestHeader().getRequestId())
331                             .build())
332                     .build())
333             .buildFuture();
334     }
335
336     public static ListenableFuture<RpcResult<TempServiceDeleteOutput>> createDeleteServiceReply(
337             TempServiceDeleteInput input, String finalAck, String message, String responseCode) {
338         return RpcResultBuilder
339             .success(
340                 new TempServiceDeleteOutputBuilder()
341                     .setConfigurationResponseCommon(
342                         new ConfigurationResponseCommonBuilder()
343                             .setAckFinalIndicator(finalAck)
344                             .setResponseMessage(message)
345                             .setResponseCode(responseCode)
346                             .setRequestId(null)
347                             .build())
348                     .build())
349             .buildFuture();
350     }
351
352     public static ListenableFuture<RpcResult<ServiceCreateOutput>> createCreateServiceReply(
353             ServiceCreateInput input, String finalAck, String message, String responseCode) {
354         return RpcResultBuilder
355             .success(
356                 new ServiceCreateOutputBuilder()
357                     .setConfigurationResponseCommon(
358                         new ConfigurationResponseCommonBuilder()
359                             .setAckFinalIndicator(finalAck)
360                             .setResponseMessage(message)
361                             .setResponseCode(responseCode)
362                             .setRequestId(
363                                 input.getSdncRequestHeader() == null
364                                     ? null
365                                     : input.getSdncRequestHeader().getRequestId())
366                             .build())
367                     .setResponseParameters(new ResponseParametersBuilder().build())
368                     .build())
369             .buildFuture();
370     }
371
372     public static ListenableFuture<RpcResult<TempServiceCreateOutput>> createCreateServiceReply(
373             TempServiceCreateInput input, String finalAck, String message, String responseCode) {
374         return RpcResultBuilder
375             .success(
376                 new TempServiceCreateOutputBuilder()
377                     .setConfigurationResponseCommon(
378                         new ConfigurationResponseCommonBuilder()
379                             .setAckFinalIndicator(finalAck)
380                              .setResponseMessage(message)
381                             .setResponseCode(responseCode)
382                             .setRequestId(
383                                 input.getSdncRequestHeader() == null
384                                     ? null
385                                     : input.getSdncRequestHeader().getRequestId())
386                             .build())
387                     .setResponseParameters(new ResponseParametersBuilder().build())
388                     .build())
389             .buildFuture();
390     }
391
392     public static ListenableFuture<RpcResult<ServiceFeasibilityCheckOutput>> createCreateServiceReply(
393             ServiceFeasibilityCheckInput input, String finalAck, String message, String responseCode) {
394         return RpcResultBuilder
395             .success(
396                 new ServiceFeasibilityCheckOutputBuilder()
397                     .setConfigurationResponseCommon(
398                         new ConfigurationResponseCommonBuilder()
399                             .setAckFinalIndicator(finalAck)
400                             .setResponseMessage(message)
401                             .setResponseCode(responseCode)
402                             .setRequestId(
403                                 input.getSdncRequestHeader() == null
404                                     ? null
405                                     : input.getSdncRequestHeader().getRequestId())
406                             .build())
407                     .setResponseParameters(new ResponseParametersBuilder().build())
408                     .build())
409             .buildFuture();
410     }
411
412     public static ListenableFuture<RpcResult<ServiceReconfigureOutput>> createCreateServiceReply(
413             ServiceReconfigureInput input, String message) {
414         return RpcResultBuilder
415             .success(
416                 new ServiceReconfigureOutputBuilder()
417                     .setConfigurationResponseCommon(
418                         new ConfigurationResponseCommonBuilder()
419                             .setResponseMessage(message)
420                             .build())
421                     .build())
422             .buildFuture();
423     }
424
425     public static ListenableFuture<RpcResult<ServiceRerouteOutput>> createRerouteServiceReply(
426             ServiceRerouteInput input, String finalAckYes, String message, String responseCode) {
427         return RpcResultBuilder
428             .success(
429                 new ServiceRerouteOutputBuilder()
430                     .setConfigurationResponseCommon(
431                         new ConfigurationResponseCommonBuilder()
432                              .setAckFinalIndicator(finalAckYes)
433                              .setResponseCode(responseCode)
434                              .setResponseMessage(message)
435                              .build())
436                     .setHardConstraints(null)
437                     .setSoftConstraints(null)
438                     .build())
439             .buildFuture();
440     }
441
442     public static ListenableFuture<RpcResult<ServiceRestorationOutput>> createRestoreServiceReply(String message) {
443         return RpcResultBuilder
444             .success(
445                 new ServiceRestorationOutputBuilder()
446                     .setConfigurationResponseCommon(
447                         new ConfigurationResponseCommonBuilder()
448                             .setResponseMessage(message)
449                             .build())
450                     .build())
451             .buildFuture();
452     }
453
454     public static Services mappingServices(
455             ServiceCreateInput serviceCreateInput,
456             ServiceReconfigureInput serviceReconfigureInput) {
457         if (serviceCreateInput != null) {
458             return new ServicesBuilder()
459                 .setServiceName(serviceCreateInput.getServiceName())
460                 .setAdministrativeState(AdminStates.OutOfService)
461                 .setOperationalState(State.OutOfService)
462                 .setCommonId(serviceCreateInput.getCommonId())
463                 .setConnectionType(serviceCreateInput.getConnectionType())
464                 .setCustomer(serviceCreateInput.getCustomer())
465                 .setCustomerContact(serviceCreateInput.getCustomerContact())
466                 .setServiceResiliency(serviceCreateInput.getServiceResiliency())
467                 .setHardConstraints(serviceCreateInput.getHardConstraints())
468                 .setSoftConstraints(serviceCreateInput.getSoftConstraints())
469                 .setSdncRequestHeader(serviceCreateInput.getSdncRequestHeader())
470                 .setLifecycleState(LifecycleState.Planned)
471                 .setServiceAEnd(
472                     new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
473                             .service.ServiceAEndBuilder(serviceCreateInput.getServiceAEnd())
474                         .build())
475                 .setServiceZEnd(
476                     new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
477                             .service.ServiceZEndBuilder(serviceCreateInput.getServiceZEnd())
478                         .build())
479                 .build();
480         }
481         if (serviceReconfigureInput != null) {
482             return new ServicesBuilder()
483                 .setServiceName(serviceReconfigureInput.getServiceName())
484                 .setAdministrativeState(AdminStates.OutOfService)
485                 .setOperationalState(State.OutOfService)
486                 .setCommonId(serviceReconfigureInput.getCommonId())
487                 .setConnectionType(serviceReconfigureInput.getConnectionType())
488                 .setCustomer(serviceReconfigureInput.getCustomer())
489                 .setCustomerContact(serviceReconfigureInput.getCustomerContact())
490                 .setHardConstraints(serviceReconfigureInput.getHardConstraints())
491                 .setSoftConstraints(serviceReconfigureInput.getSoftConstraints())
492                 .setLifecycleState(LifecycleState.Planned)
493                 .setServiceAEnd(
494                     new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
495                             .service.ServiceAEndBuilder(serviceReconfigureInput.getServiceAEnd())
496                         .build())
497                 .setServiceZEnd(
498                     new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
499                             .service.ServiceZEndBuilder(serviceReconfigureInput.getServiceZEnd())
500                         .build())
501                 .build();
502         }
503         //FIXME: Because of Silicon, we cannot have empty key.
504         //it's this case possible ? There is a Junit test covering null
505         //temporary workaround as now there is a null key check done by yangtools.
506         //Functional review is needed
507         LOG.warn("ServiceCreateInput and ServiceReconfigureInput are null");
508         return new ServicesBuilder().withKey(new ServicesKey("unknown")).build();
509     }
510
511     public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210
512             .temp.service.list.Services mappingServices(TempServiceCreateInput tempServiceCreateInput) {
513         return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210
514                 .temp.service.list.ServicesBuilder()
515             .setServiceName(tempServiceCreateInput.getCommonId())
516             .setAdministrativeState(AdminStates.OutOfService)
517             .setOperationalState(State.OutOfService)
518             .setCommonId(tempServiceCreateInput.getCommonId())
519             .setConnectionType(tempServiceCreateInput.getConnectionType())
520             .setCustomer(tempServiceCreateInput.getCustomer())
521             .setCustomerContact(tempServiceCreateInput.getCustomerContact())
522             .setHardConstraints(tempServiceCreateInput.getHardConstraints())
523             .setSoftConstraints(tempServiceCreateInput.getSoftConstraints())
524             .setSdncRequestHeader(tempServiceCreateInput.getSdncRequestHeader())
525             .setLifecycleState(LifecycleState.Planned)
526             .setServiceAEnd(
527                 new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
528                     .service.ServiceAEndBuilder(tempServiceCreateInput.getServiceAEnd()).build())
529             .setServiceZEnd(
530                 new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
531                     .service.ServiceZEndBuilder(tempServiceCreateInput.getServiceZEnd()).build())
532             .build();
533     }
534
535     public static ServicePaths mappingServicePaths(ServiceInput serviceInput, PathComputationRequestOutput output) {
536         if (serviceInput == null) {
537             //FIXME: Because of Silicon, we cannot have empty key.
538             //it's this case possible ? There is a Junit test covering null
539             //temporary workaround as now there is a null key check done by yangtools.
540             //Functional review is needed
541             LOG.warn("ServiceInput is null");
542             return new ServicePathsBuilder().withKey(new ServicePathsKey("unknown")).build();
543         }
544
545         ServicePathsBuilder servicePathBuilder =
546             new ServicePathsBuilder()
547                 .setServiceAEnd(
548                     new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
549                             .service.path.ServiceAEndBuilder()
550                         .setServiceFormat(serviceInput.getServiceAEnd().getServiceFormat())
551                         .setServiceRate(serviceInput.getServiceAEnd().getServiceRate())
552                         .setClli(serviceInput.getServiceAEnd().getClli())
553                         .setNodeId(new NodeIdType(serviceInput.getServiceAEnd().getNodeId().getValue()).getValue())
554                         .setTxDirection(
555                             new org.opendaylight.yang.gen.v1
556                                     .http.org.transportpce.b.c._interface.service.types.rev220118
557                                         .service.endpoint.sp.TxDirectionBuilder()
558                                 .setPort(
559                                     serviceInput.getServiceAEnd().getTxDirection()
560                                         .values().stream().findFirst().get().getPort())
561                                 .build())
562                         .setRxDirection(
563                             new org.opendaylight.yang.gen.v1
564                                     .http.org.transportpce.b.c._interface.service.types.rev220118
565                                         .service.endpoint.sp.RxDirectionBuilder()
566                                 .setPort(
567                                     serviceInput.getServiceAEnd().getRxDirection()
568                                         .values().stream().findFirst().get().getPort())
569                                 .build())
570                         .build())
571                 .setServiceZEnd(
572                     new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
573                             .service.path.ServiceZEndBuilder()
574                         .setServiceFormat(serviceInput.getServiceZEnd().getServiceFormat())
575                         .setServiceRate(serviceInput.getServiceZEnd().getServiceRate())
576                         .setClli(serviceInput.getServiceZEnd().getClli())
577                         .setNodeId(new NodeIdType(serviceInput.getServiceZEnd().getNodeId().getValue()).getValue())
578                         .setTxDirection(
579                             new org.opendaylight.yang.gen.v1
580                                     .http.org.transportpce.b.c._interface.service.types.rev220118
581                                         .service.endpoint.sp.TxDirectionBuilder()
582                                 .setPort(
583                                     serviceInput.getServiceZEnd().getTxDirection()
584                                         .values().stream().findFirst().get().getPort())
585                                 .build())
586                         .setRxDirection(
587                             new org.opendaylight.yang.gen.v1
588                                     .http.org.transportpce.b.c._interface.service.types.rev220118
589                                         .service.endpoint.sp.RxDirectionBuilder()
590                                 .setPort(
591                                     serviceInput.getServiceZEnd().getRxDirection()
592                                         .values().stream().findFirst().get().getPort())
593                                 .build())
594                         .build())
595                 .setServicePathName(serviceInput.getServiceName())
596                 .setServiceHandlerHeader(
597                     new ServiceHandlerHeaderBuilder()
598                         .setRequestId(serviceInput.getSdncRequestHeader()
599                         .getRequestId())
600                         .build());
601         if (serviceInput.getHardConstraints() != null) {
602             servicePathBuilder.setHardConstraints(serviceInput.getHardConstraints());
603         }
604         if (serviceInput.getSoftConstraints() != null) {
605             servicePathBuilder.setSoftConstraints(serviceInput.getSoftConstraints());
606         }
607
608         if (output.getResponseParameters().getPathDescription() != null) {
609             servicePathBuilder.setPathDescription(
610                 new PathDescriptionBuilder(output.getResponseParameters().getPathDescription()).build());
611         }
612         return servicePathBuilder.build();
613     }
614
615
616     @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
617         value = "PZLA_PREFER_ZERO_LENGTH_ARRAYS",
618         justification = "not relevant to return and zero length array as we need real pos")
619     public static int[] findTheLongestSubstring(String s1, String s2) {
620         if ((s1 == null) || (s2 == null)) {
621             return null;
622         }
623         int[][] dp = new int[s1.length() + 1][s2.length() + 1];
624         int maxLen = 0;
625         int endPos = 0;
626         for (int i = 1; i < dp.length; i++) {
627             for (int j = 1; j < dp[0].length; j++) {
628                 char ch1 = s1.charAt(i - 1);
629                 char ch2 = s2.charAt(j - 1);
630                 if (ch1 == ch2) {
631                     dp[i][j] = dp[i - 1][j - 1] + 1;
632                     if (dp[i][j] >= maxLen) {
633                         maxLen = dp[i][j];
634                         endPos = i;
635                     }
636                 }
637             }
638         }
639         return new int[] { endPos - maxLen, endPos };
640     }
641
642     public static ListenableFuture<RpcResult<AddOpenroadmOperationalModesToCatalogOutput>>
643         addOpenroadmServiceReply(AddOpenroadmOperationalModesToCatalogInput input, String finalAck,
644                                  String message,String responseCode) {
645         return RpcResultBuilder
646             .success(
647                 new AddOpenroadmOperationalModesToCatalogOutputBuilder()
648                     .setConfigurationResponseCommon(
649                         new ConfigurationResponseCommonBuilder()
650                                 .setAckFinalIndicator(finalAck)
651                                 .setResponseMessage(message)
652                             .setResponseCode(responseCode)
653                                 .setRequestId(
654                                         input.getSdncRequestHeader() == null
655                                                 ? null
656                                                 : input.getSdncRequestHeader().getRequestId())
657                             .build())
658                     .build())
659             .buildFuture();
660     }
661
662     public static ListenableFuture<RpcResult<AddSpecificOperationalModesToCatalogOutput>>
663         addSpecificOpenroadmServiceReply(AddSpecificOperationalModesToCatalogInput input, String finalAck,
664                                          String message,String responseCode) {
665         return RpcResultBuilder
666                 .success(
667                         new AddSpecificOperationalModesToCatalogOutputBuilder()
668                                 .setConfigurationResponseCommon(
669                                         new ConfigurationResponseCommonBuilder()
670                                                 .setAckFinalIndicator(finalAck)
671                                                 .setResponseMessage(message)
672                                                 .setResponseCode(responseCode)
673                                                 .setRequestId(
674                                                         input.getSdncRequestHeader() == null
675                                                                 ? null
676                                                                 : input.getSdncRequestHeader().getRequestId())
677                                                 .build())
678                                 .build())
679                 .buildFuture();
680     }
681
682 }