302227797ce20ef59fe3dfc1c4f80201d7dcc7a3
[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().orElseThrow()
152                                     .getPort())
153                             .build())
154                     .setRxDirection(
155                         new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
156                                 .service.endpoint.sp.RxDirectionBuilder()
157                             .setPort(
158                                 input.getServiceAEnd().getRxDirection().values().stream().findFirst().orElseThrow()
159                                     .getPort())
160                             .build())
161                     .build())
162             .setServiceZEnd(
163                 new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
164                         .service.implementation.request.input.ServiceZEndBuilder()
165                     .setServiceFormat(input.getServiceZEnd().getServiceFormat())
166                     .setServiceRate(input.getServiceZEnd().getServiceRate())
167                     .setOtuServiceRate(getOtuServiceRate(input.getServiceZEnd().getOtuServiceRate()))
168                     .setOduServiceRate(getOduServiceRate(input.getServiceZEnd().getOduServiceRate()))
169                     .setClli(input.getServiceZEnd().getClli())
170                     .setNodeId(new NodeIdType(input.getServiceZEnd().getNodeId().getValue()).getValue())
171                     .setTxDirection(
172                         new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
173                                 .service.endpoint.sp.TxDirectionBuilder()
174                             .setPort(
175                                 input.getServiceZEnd().getTxDirection().values().stream().findFirst().orElseThrow()
176                                     .getPort())
177                             .build())
178                     .setRxDirection(
179                         new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
180                                 .service.endpoint.sp.RxDirectionBuilder()
181                             .setPort(
182                                 input.getServiceZEnd().getRxDirection().values().stream().findFirst().orElseThrow()
183                                     .getPort())
184                             .build())
185                     .build())
186             .setConnectionType(input.getConnectionType())
187             .setServiceHandlerHeader(
188                 new ServiceHandlerHeaderBuilder().setRequestId(input.getSdncRequestHeader().getRequestId()).build())
189             .setPathDescription(
190                 new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
191                         .service.implementation.request.input.PathDescriptionBuilder()
192                     .setAToZDirection(pathDescription.getAToZDirection())
193                     .setZToADirection(pathDescription.getZToADirection())
194                     .build())
195             .build();
196     }
197
198     private static OduRateIdentity getOduServiceRate(OduRateIdentity oduServiceRate) {
199         if (oduServiceRate == null || !ODU_RATE_MAP.containsKey(oduServiceRate.toString())) {
200             LOG.error("ODU rate {} not recognized", oduServiceRate);
201             return null;
202         }
203         return ODU_RATE_MAP.get(oduServiceRate.toString());
204     }
205
206     private static OtuRateIdentity getOtuServiceRate(OtuRateIdentity otuServiceRate) {
207         if (otuServiceRate == null || !OTU_RATE_MAP.containsKey(otuServiceRate.toString())) {
208             LOG.error("OTU rate {} not recognized", otuServiceRate);
209             return null;
210         }
211         return OTU_RATE_MAP.get(otuServiceRate.toString());
212     }
213
214     public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
215             .ServiceDeleteInput createServiceDeleteInput(ServiceInput serviceInput) {
216         return new ServiceDeleteInputBuilder()
217             .setServiceName(serviceInput.getServiceName())
218             .setServiceHandlerHeader(
219                 new ServiceHandlerHeaderBuilder()
220                     .setRequestId(serviceInput.getSdncRequestHeader().getRequestId())
221                     .build())
222             .build();
223     }
224
225     public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
226             .ServiceDeleteInput createServiceDeleteInput(
227                 ServiceRerouteInput serviceRerouteinput,
228                 Services services) {
229         return new ServiceDeleteInputBuilder()
230             .setServiceName(serviceRerouteinput.getServiceName())
231             .setServiceHandlerHeader(
232                 new ServiceHandlerHeaderBuilder()
233                     .setRequestId(services.getSdncRequestHeader().getRequestId())
234                     .build())
235             .build();
236     }
237
238     public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
239             .ServiceDeleteInput createServiceDeleteInput(
240                 ServiceRestorationInput serviceRestorationInput,
241                 Services services) {
242         return new ServiceDeleteInputBuilder()
243             .setServiceName(serviceRestorationInput.getServiceName())
244             .setServiceHandlerHeader(
245                 new ServiceHandlerHeaderBuilder()
246                     .setRequestId(services.getSdncRequestHeader().getRequestId())
247                     .build())
248             .build();
249     }
250
251     public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
252             .ServiceDeleteInput createServiceDeleteInput(ServiceReconfigureInput serviceReconfigureInput) {
253         String serviceName = serviceReconfigureInput.getServiceName();
254         return new ServiceDeleteInputBuilder()
255             .setServiceName(serviceName)
256             .setServiceHandlerHeader(
257                 new ServiceHandlerHeaderBuilder().setRequestId(serviceName + "-reconfigure").build())
258             .build();
259     }
260
261     public static ServiceAEnd createServiceAEnd(ServiceEndpoint serviceAEnd) {
262         return new ServiceAEndBuilder()
263             .setClli(serviceAEnd.getClli())
264             .setNodeId(serviceAEnd.getNodeId().getValue())
265             .setRxDirection(createRxDirection(serviceAEnd.getRxDirection().values().stream().findFirst().orElseThrow()))
266             .setServiceFormat(serviceAEnd.getServiceFormat())
267             .setServiceRate(serviceAEnd.getServiceRate())
268             .setTxDirection(createTxDirection(serviceAEnd.getTxDirection().values().stream().findFirst().orElseThrow()))
269             .build();
270     }
271
272     public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
273             .path.computation.reroute.request.input.ServiceAEnd createServiceAEndReroute(ServiceEndpoint serviceAEnd) {
274         return new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
275                 .path.computation.reroute.request.input.ServiceAEndBuilder()
276                 .setClli(serviceAEnd.getClli())
277                 .setNodeId(serviceAEnd.getNodeId().getValue())
278                 .setRxDirection(createRxDirection(serviceAEnd.getRxDirection().values().stream().findFirst()
279                         .orElseThrow()))
280                 .setServiceFormat(serviceAEnd.getServiceFormat())
281                 .setServiceRate(serviceAEnd.getServiceRate())
282                 .setTxDirection(createTxDirection(serviceAEnd.getTxDirection().values().stream().findFirst()
283                         .orElseThrow()))
284                 .build();
285     }
286
287     public static ServiceZEnd createServiceZEnd(ServiceEndpoint serviceZEnd) {
288         return new ServiceZEndBuilder()
289             .setClli(serviceZEnd.getClli())
290             .setNodeId(serviceZEnd.getNodeId().getValue())
291             .setRxDirection(createRxDirection(serviceZEnd.getRxDirection().values().stream().findFirst().orElseThrow()))
292             .setServiceFormat(serviceZEnd.getServiceFormat())
293             .setServiceRate(serviceZEnd.getServiceRate())
294             .setTxDirection(createTxDirection(serviceZEnd.getTxDirection().values().stream().findFirst().orElseThrow()))
295             .build();
296     }
297
298     public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
299             .path.computation.reroute.request.input.ServiceZEnd createServiceZEndReroute(ServiceEndpoint serviceZEnd) {
300         return new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220808
301                 .path.computation.reroute.request.input.ServiceZEndBuilder()
302                 .setClli(serviceZEnd.getClli())
303                 .setNodeId(serviceZEnd.getNodeId().getValue())
304                 .setRxDirection(createRxDirection(serviceZEnd.getRxDirection().values().stream().findFirst()
305                         .orElseThrow()))
306                 .setServiceFormat(serviceZEnd.getServiceFormat())
307                 .setServiceRate(serviceZEnd.getServiceRate())
308                 .setTxDirection(createTxDirection(serviceZEnd.getTxDirection().values().stream().findFirst()
309                         .orElseThrow()))
310                 .build();
311     }
312
313     public static RxDirection createRxDirection(
314             org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
315                 .service.endpoint.RxDirection rxDirection) {
316         return new RxDirectionBuilder().setPort(rxDirection.getPort()).build();
317     }
318
319     public static TxDirection createTxDirection(
320             org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
321                 .service.endpoint.TxDirection txDirection) {
322         return new TxDirectionBuilder().setPort(txDirection.getPort()).build();
323     }
324
325     public static ListenableFuture<RpcResult<ServiceDeleteOutput>> createDeleteServiceReply(
326             ServiceDeleteInput input, String finalAck, String message, String responseCode) {
327         return RpcResultBuilder
328             .success(
329                 new ServiceDeleteOutputBuilder()
330                     .setConfigurationResponseCommon(
331                         new ConfigurationResponseCommonBuilder()
332                             .setAckFinalIndicator(finalAck)
333                             .setResponseMessage(message)
334                             .setResponseCode(responseCode)
335                             .setRequestId(
336                                 input.getSdncRequestHeader() == null
337                                     ? null
338                                     : input.getSdncRequestHeader().getRequestId())
339                             .build())
340                     .build())
341             .buildFuture();
342     }
343
344     public static ListenableFuture<RpcResult<TempServiceDeleteOutput>> createDeleteServiceReply(
345             TempServiceDeleteInput input, String finalAck, String message, String responseCode) {
346         return RpcResultBuilder
347             .success(
348                 new TempServiceDeleteOutputBuilder()
349                     .setConfigurationResponseCommon(
350                         new ConfigurationResponseCommonBuilder()
351                             .setAckFinalIndicator(finalAck)
352                             .setResponseMessage(message)
353                             .setResponseCode(responseCode)
354                             .setRequestId(null)
355                             .build())
356                     .build())
357             .buildFuture();
358     }
359
360     public static ListenableFuture<RpcResult<ServiceCreateOutput>> createCreateServiceReply(
361             ServiceCreateInput input, String finalAck, String message, String responseCode) {
362         return RpcResultBuilder
363             .success(
364                 new ServiceCreateOutputBuilder()
365                     .setConfigurationResponseCommon(
366                         new ConfigurationResponseCommonBuilder()
367                             .setAckFinalIndicator(finalAck)
368                             .setResponseMessage(message)
369                             .setResponseCode(responseCode)
370                             .setRequestId(
371                                 input.getSdncRequestHeader() == null
372                                     ? null
373                                     : input.getSdncRequestHeader().getRequestId())
374                             .build())
375                     .setResponseParameters(new ResponseParametersBuilder().build())
376                     .build())
377             .buildFuture();
378     }
379
380     public static ListenableFuture<RpcResult<TempServiceCreateOutput>> createCreateServiceReply(
381             TempServiceCreateInput input, String finalAck, String message, String responseCode) {
382         return RpcResultBuilder
383             .success(
384                 new TempServiceCreateOutputBuilder()
385                     .setConfigurationResponseCommon(
386                         new ConfigurationResponseCommonBuilder()
387                             .setAckFinalIndicator(finalAck)
388                              .setResponseMessage(message)
389                             .setResponseCode(responseCode)
390                             .setRequestId(
391                                 input.getSdncRequestHeader() == null
392                                     ? null
393                                     : input.getSdncRequestHeader().getRequestId())
394                             .build())
395                     .setResponseParameters(new ResponseParametersBuilder().build())
396                     .build())
397             .buildFuture();
398     }
399
400     public static ListenableFuture<RpcResult<ServiceFeasibilityCheckOutput>> createCreateServiceReply(
401             ServiceFeasibilityCheckInput input, String finalAck, String message, String responseCode) {
402         return RpcResultBuilder
403             .success(
404                 new ServiceFeasibilityCheckOutputBuilder()
405                     .setConfigurationResponseCommon(
406                         new ConfigurationResponseCommonBuilder()
407                             .setAckFinalIndicator(finalAck)
408                             .setResponseMessage(message)
409                             .setResponseCode(responseCode)
410                             .setRequestId(
411                                 input.getSdncRequestHeader() == null
412                                     ? null
413                                     : input.getSdncRequestHeader().getRequestId())
414                             .build())
415                     .setResponseParameters(new ResponseParametersBuilder().build())
416                     .build())
417             .buildFuture();
418     }
419
420     public static ListenableFuture<RpcResult<ServiceReconfigureOutput>> createCreateServiceReply(
421             ServiceReconfigureInput input, String message) {
422         return RpcResultBuilder
423             .success(
424                 new ServiceReconfigureOutputBuilder()
425                     .setConfigurationResponseCommon(
426                         new ConfigurationResponseCommonBuilder()
427                             .setResponseMessage(message)
428                             .build())
429                     .build())
430             .buildFuture();
431     }
432
433     public static ListenableFuture<RpcResult<ServiceRerouteOutput>> createRerouteServiceReply(
434             ServiceRerouteInput input, String finalAckYes, String message, String responseCode) {
435         return RpcResultBuilder
436             .success(
437                 new ServiceRerouteOutputBuilder()
438                     .setConfigurationResponseCommon(
439                         new ConfigurationResponseCommonBuilder()
440                              .setAckFinalIndicator(finalAckYes)
441                              .setResponseCode(responseCode)
442                              .setResponseMessage(message)
443                              .build())
444                     .setHardConstraints(null)
445                     .setSoftConstraints(null)
446                     .build())
447             .buildFuture();
448     }
449
450     public static ListenableFuture<RpcResult<ServiceRestorationOutput>> createRestoreServiceReply(String message) {
451         return RpcResultBuilder
452             .success(
453                 new ServiceRestorationOutputBuilder()
454                     .setConfigurationResponseCommon(
455                         new ConfigurationResponseCommonBuilder()
456                             .setResponseMessage(message)
457                             .build())
458                     .build())
459             .buildFuture();
460     }
461
462     public static Services mappingServices(
463             ServiceCreateInput serviceCreateInput,
464             ServiceReconfigureInput serviceReconfigureInput) {
465         if (serviceCreateInput != null) {
466             return new ServicesBuilder()
467                 .setServiceName(serviceCreateInput.getServiceName())
468                 .setAdministrativeState(AdminStates.OutOfService)
469                 .setOperationalState(State.OutOfService)
470                 .setCommonId(serviceCreateInput.getCommonId())
471                 .setConnectionType(serviceCreateInput.getConnectionType())
472                 .setCustomer(serviceCreateInput.getCustomer())
473                 .setCustomerContact(serviceCreateInput.getCustomerContact())
474                 .setServiceResiliency(serviceCreateInput.getServiceResiliency())
475                 .setHardConstraints(serviceCreateInput.getHardConstraints())
476                 .setSoftConstraints(serviceCreateInput.getSoftConstraints())
477                 .setSdncRequestHeader(serviceCreateInput.getSdncRequestHeader())
478                 .setLifecycleState(LifecycleState.Planned)
479                 .setServiceAEnd(
480                     new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
481                             .service.ServiceAEndBuilder(serviceCreateInput.getServiceAEnd())
482                         .build())
483                 .setServiceZEnd(
484                     new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
485                             .service.ServiceZEndBuilder(serviceCreateInput.getServiceZEnd())
486                         .build())
487                 .build();
488         }
489         if (serviceReconfigureInput != null) {
490             return new ServicesBuilder()
491                 .setServiceName(serviceReconfigureInput.getServiceName())
492                 .setAdministrativeState(AdminStates.OutOfService)
493                 .setOperationalState(State.OutOfService)
494                 .setCommonId(serviceReconfigureInput.getCommonId())
495                 .setConnectionType(serviceReconfigureInput.getConnectionType())
496                 .setCustomer(serviceReconfigureInput.getCustomer())
497                 .setCustomerContact(serviceReconfigureInput.getCustomerContact())
498                 .setHardConstraints(serviceReconfigureInput.getHardConstraints())
499                 .setSoftConstraints(serviceReconfigureInput.getSoftConstraints())
500                 .setLifecycleState(LifecycleState.Planned)
501                 .setServiceAEnd(
502                     new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
503                             .service.ServiceAEndBuilder(serviceReconfigureInput.getServiceAEnd())
504                         .build())
505                 .setServiceZEnd(
506                     new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
507                             .service.ServiceZEndBuilder(serviceReconfigureInput.getServiceZEnd())
508                         .build())
509                 .build();
510         }
511         //FIXME: Because of Silicon, we cannot have empty key.
512         //it's this case possible ? There is a Junit test covering null
513         //temporary workaround as now there is a null key check done by yangtools.
514         //Functional review is needed
515         LOG.warn("ServiceCreateInput and ServiceReconfigureInput are null");
516         return new ServicesBuilder().withKey(new ServicesKey("unknown")).build();
517     }
518
519     public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210
520             .temp.service.list.Services mappingServices(TempServiceCreateInput tempServiceCreateInput) {
521         return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev211210
522                 .temp.service.list.ServicesBuilder()
523             .setServiceName(tempServiceCreateInput.getCommonId())
524             .setAdministrativeState(AdminStates.OutOfService)
525             .setOperationalState(State.OutOfService)
526             .setCommonId(tempServiceCreateInput.getCommonId())
527             .setConnectionType(tempServiceCreateInput.getConnectionType())
528             .setCustomer(tempServiceCreateInput.getCustomer())
529             .setCustomerContact(tempServiceCreateInput.getCustomerContact())
530             .setHardConstraints(tempServiceCreateInput.getHardConstraints())
531             .setSoftConstraints(tempServiceCreateInput.getSoftConstraints())
532             .setSdncRequestHeader(tempServiceCreateInput.getSdncRequestHeader())
533             .setLifecycleState(LifecycleState.Planned)
534             .setServiceAEnd(
535                 new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
536                     .service.ServiceAEndBuilder(tempServiceCreateInput.getServiceAEnd()).build())
537             .setServiceZEnd(
538                 new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210
539                     .service.ServiceZEndBuilder(tempServiceCreateInput.getServiceZEnd()).build())
540             .build();
541     }
542
543     public static ServicePaths mappingServicePaths(ServiceInput serviceInput, PathComputationRequestOutput output) {
544         if (serviceInput == null) {
545             //FIXME: Because of Silicon, we cannot have empty key.
546             //it's this case possible ? There is a Junit test covering null
547             //temporary workaround as now there is a null key check done by yangtools.
548             //Functional review is needed
549             LOG.warn("ServiceInput is null");
550             return new ServicePathsBuilder().withKey(new ServicePathsKey("unknown")).build();
551         }
552
553         ServicePathsBuilder servicePathBuilder =
554             new ServicePathsBuilder()
555                 .setServiceAEnd(
556                     new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
557                             .service.path.ServiceAEndBuilder()
558                         .setServiceFormat(serviceInput.getServiceAEnd().getServiceFormat())
559                         .setServiceRate(serviceInput.getServiceAEnd().getServiceRate())
560                         .setClli(serviceInput.getServiceAEnd().getClli())
561                         .setNodeId(new NodeIdType(serviceInput.getServiceAEnd().getNodeId().getValue()).getValue())
562                         .setTxDirection(
563                             new org.opendaylight.yang.gen.v1
564                                     .http.org.transportpce.b.c._interface.service.types.rev220118
565                                         .service.endpoint.sp.TxDirectionBuilder()
566                                 .setPort(
567                                     serviceInput.getServiceAEnd().getTxDirection()
568                                         .values().stream().findFirst().orElseThrow().getPort())
569                                 .build())
570                         .setRxDirection(
571                             new org.opendaylight.yang.gen.v1
572                                     .http.org.transportpce.b.c._interface.service.types.rev220118
573                                         .service.endpoint.sp.RxDirectionBuilder()
574                                 .setPort(
575                                     serviceInput.getServiceAEnd().getRxDirection()
576                                         .values().stream().findFirst().orElseThrow().getPort())
577                                 .build())
578                         .build())
579                 .setServiceZEnd(
580                     new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
581                             .service.path.ServiceZEndBuilder()
582                         .setServiceFormat(serviceInput.getServiceZEnd().getServiceFormat())
583                         .setServiceRate(serviceInput.getServiceZEnd().getServiceRate())
584                         .setClli(serviceInput.getServiceZEnd().getClli())
585                         .setNodeId(new NodeIdType(serviceInput.getServiceZEnd().getNodeId().getValue()).getValue())
586                         .setTxDirection(
587                             new org.opendaylight.yang.gen.v1
588                                     .http.org.transportpce.b.c._interface.service.types.rev220118
589                                         .service.endpoint.sp.TxDirectionBuilder()
590                                 .setPort(
591                                     serviceInput.getServiceZEnd().getTxDirection()
592                                         .values().stream().findFirst().orElseThrow().getPort())
593                                 .build())
594                         .setRxDirection(
595                             new org.opendaylight.yang.gen.v1
596                                     .http.org.transportpce.b.c._interface.service.types.rev220118
597                                         .service.endpoint.sp.RxDirectionBuilder()
598                                 .setPort(
599                                     serviceInput.getServiceZEnd().getRxDirection()
600                                         .values().stream().findFirst().orElseThrow().getPort())
601                                 .build())
602                         .build())
603                 .setServicePathName(serviceInput.getServiceName())
604                 .setServiceHandlerHeader(
605                     new ServiceHandlerHeaderBuilder()
606                         .setRequestId(serviceInput.getSdncRequestHeader()
607                         .getRequestId())
608                         .build());
609         if (serviceInput.getHardConstraints() != null) {
610             servicePathBuilder.setHardConstraints(serviceInput.getHardConstraints());
611         }
612         if (serviceInput.getSoftConstraints() != null) {
613             servicePathBuilder.setSoftConstraints(serviceInput.getSoftConstraints());
614         }
615
616         if (output.getResponseParameters().getPathDescription() != null) {
617             servicePathBuilder.setPathDescription(
618                 new PathDescriptionBuilder(output.getResponseParameters().getPathDescription()).build());
619         }
620         return servicePathBuilder.build();
621     }
622
623
624     @edu.umd.cs.findbugs.annotations.SuppressFBWarnings(
625         value = "PZLA_PREFER_ZERO_LENGTH_ARRAYS",
626         justification = "not relevant to return and zero length array as we need real pos")
627     public static int[] findTheLongestSubstring(String s1, String s2) {
628         if ((s1 == null) || (s2 == null)) {
629             return null;
630         }
631         int[][] dp = new int[s1.length() + 1][s2.length() + 1];
632         int maxLen = 0;
633         int endPos = 0;
634         for (int i = 1; i < dp.length; i++) {
635             for (int j = 1; j < dp[0].length; j++) {
636                 char ch1 = s1.charAt(i - 1);
637                 char ch2 = s2.charAt(j - 1);
638                 if (ch1 == ch2) {
639                     dp[i][j] = dp[i - 1][j - 1] + 1;
640                     if (dp[i][j] >= maxLen) {
641                         maxLen = dp[i][j];
642                         endPos = i;
643                     }
644                 }
645             }
646         }
647         return new int[] { endPos - maxLen, endPos };
648     }
649
650     public static ListenableFuture<RpcResult<AddOpenroadmOperationalModesToCatalogOutput>>
651         addOpenroadmServiceReply(AddOpenroadmOperationalModesToCatalogInput input, String finalAck,
652                                  String message,String responseCode) {
653         return RpcResultBuilder
654             .success(
655                 new AddOpenroadmOperationalModesToCatalogOutputBuilder()
656                     .setConfigurationResponseCommon(
657                         new ConfigurationResponseCommonBuilder()
658                                 .setAckFinalIndicator(finalAck)
659                                 .setResponseMessage(message)
660                             .setResponseCode(responseCode)
661                                 .setRequestId(
662                                         input.getSdncRequestHeader() == null
663                                                 ? null
664                                                 : input.getSdncRequestHeader().getRequestId())
665                             .build())
666                     .build())
667             .buildFuture();
668     }
669
670     public static ListenableFuture<RpcResult<AddSpecificOperationalModesToCatalogOutput>>
671         addSpecificOpenroadmServiceReply(AddSpecificOperationalModesToCatalogInput input, String finalAck,
672                                          String message,String responseCode) {
673         return RpcResultBuilder
674                 .success(
675                         new AddSpecificOperationalModesToCatalogOutputBuilder()
676                                 .setConfigurationResponseCommon(
677                                         new ConfigurationResponseCommonBuilder()
678                                                 .setAckFinalIndicator(finalAck)
679                                                 .setResponseMessage(message)
680                                                 .setResponseCode(responseCode)
681                                                 .setRequestId(
682                                                         input.getSdncRequestHeader() == null
683                                                                 ? null
684                                                                 : input.getSdncRequestHeader().getRequestId())
685                                                 .build())
686                                 .build())
687                 .buildFuture();
688     }
689
690 }