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