Merge changes I04980c0b,Ib74e699a,I6ca86692,Ida6061da,Iea661424, ...
[transportpce.git] / servicehandler / src / test / java / org / opendaylight / transportpce / servicehandler / utils / 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.utils;
9
10 import com.google.common.util.concurrent.ListenableFuture;
11 import org.opendaylight.transportpce.servicehandler.ServiceInput;
12 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.PathComputationRequestOutput;
13 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceAEnd;
14 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceAEndBuilder;
15 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceZEnd;
16 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.path.computation.request.input.ServiceZEndBuilder;
17 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev240205.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.rev230526.ServiceEndpoint;
23 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommonBuilder;
24 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.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.service.rev230526.ServiceCreateInput;
29 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateOutput;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateOutputBuilder;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteInput;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteOutput;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceDeleteOutputBuilder;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceReconfigureInput;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteInput;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteOutput;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceRerouteOutputBuilder;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateInput;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateOutput;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceCreateOutputBuilder;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteInput;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteOutput;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.TempServiceDeleteOutputBuilder;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.Services;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.service.list.ServicesBuilder;
46 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirection;
47 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirectionBuilder;
48 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.TxDirection;
49 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.TxDirectionBuilder;
50 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.handler.header.ServiceHandlerHeaderBuilder;
51 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.path.PathDescriptionBuilder;
52 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePaths;
53 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePathsBuilder;
54 import org.opendaylight.yangtools.yang.common.RpcResult;
55 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
56
57
58 public final class ModelMappingUtils {
59     private ModelMappingUtils() {
60     }
61
62     public static ServiceImplementationRequestInput createServiceImplementationRequest(
63             ServiceInput input,
64             PathDescription pathDescription) {
65         ServiceImplementationRequestInputBuilder serviceImplementationRequestInputBuilder =
66                 new ServiceImplementationRequestInputBuilder().setServiceName(input.getServiceName());
67         org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
68                 .service.implementation.request.input.ServiceAEndBuilder serviceAEnd =
69             new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
70                     .service.implementation.request.input.ServiceAEndBuilder()
71                 .setServiceFormat(input.getServiceAEnd().getServiceFormat())
72                 .setServiceRate(input.getServiceAEnd().getServiceRate()).setClli(input.getServiceAEnd().getClli())
73                 .setNodeId(input.getServiceAEnd().getNodeId().getValue())
74                 .setTxDirection(
75                     new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
76                             .service.endpoint.sp.TxDirectionBuilder()
77                         .setPort(input.getServiceAEnd().getTxDirection().values().stream().findFirst().orElseThrow()
78                             .getPort())
79                         .build())
80                 .setRxDirection(
81                     new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
82                             .service.endpoint.sp.RxDirectionBuilder()
83                         .setPort(input.getServiceAEnd().getRxDirection().values().stream().findFirst().orElseThrow()
84                             .getPort())
85                         .build());
86         org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
87                 .service.implementation.request.input.ServiceZEndBuilder serviceZEnd =
88             new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
89                     .service.implementation.request.input.ServiceZEndBuilder()
90                 .setServiceFormat(input.getServiceZEnd().getServiceFormat())
91                 .setServiceRate(input.getServiceZEnd().getServiceRate()).setClli(input.getServiceZEnd().getClli())
92                 .setNodeId(input.getServiceZEnd().getNodeId().getValue())
93                 .setTxDirection(
94                     new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
95                             .service.endpoint.sp.TxDirectionBuilder()
96                         .setPort(input.getServiceZEnd().getTxDirection().values().stream().findFirst().orElseThrow()
97                             .getPort())
98                         .build())
99                 .setRxDirection(
100                     new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
101                             .service.endpoint.sp.RxDirectionBuilder()
102                         .setPort(input.getServiceZEnd().getRxDirection().values().stream().findFirst().orElseThrow()
103                             .getPort())
104                         .build());
105         return serviceImplementationRequestInputBuilder
106             .setServiceAEnd(serviceAEnd.build())
107             .setServiceZEnd(serviceZEnd.build())
108             .setServiceHandlerHeader(
109                 new ServiceHandlerHeaderBuilder().setRequestId(input.getSdncRequestHeader().getRequestId()).build())
110             .setPathDescription(
111                 new org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
112                         .service.implementation.request.input.PathDescriptionBuilder()
113                     .setAToZDirection(pathDescription.getAToZDirection())
114                     .setZToADirection(pathDescription.getZToADirection())
115                     .build())
116             .build();
117     }
118
119     public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
120             .ServiceDeleteInput createServiceDeleteInput(ServiceInput serviceInput) {
121         return new ServiceDeleteInputBuilder()
122             .setServiceName(serviceInput.getServiceName())
123             .setServiceHandlerHeader(
124                 new ServiceHandlerHeaderBuilder()
125                     .setRequestId(serviceInput.getSdncRequestHeader().getRequestId())
126                     .build())
127             .build();
128     }
129
130     public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
131             .ServiceDeleteInput createServiceDeleteInput(
132                 ServiceRerouteInput serviceRerouteinput,
133                 Services services) {
134         return new ServiceDeleteInputBuilder()
135             .setServiceName(serviceRerouteinput.getServiceName())
136             .setServiceHandlerHeader(
137                 new ServiceHandlerHeaderBuilder().setRequestId(services.getSdncRequestHeader().getRequestId()).build())
138             .build();
139     }
140
141     public static ServiceAEnd createServiceAEnd(ServiceEndpoint serviceAEnd) {
142         return new ServiceAEndBuilder()
143             .setClli(serviceAEnd.getClli())
144             .setNodeId(new NodeIdType(serviceAEnd.getNodeId().getValue()).getValue())
145             .setRxDirection(
146                 createRxDirection(serviceAEnd.getRxDirection().values().stream().findFirst().orElseThrow()))
147             .setServiceFormat(serviceAEnd.getServiceFormat())
148             .setServiceRate(serviceAEnd.getServiceRate())
149             .setTxDirection(
150                 createTxDirection(serviceAEnd.getTxDirection().values().stream().findFirst().orElseThrow()))
151             .build();
152     }
153
154     public static ServiceZEnd createServiceZEnd(ServiceEndpoint serviceZEnd) {
155         return new ServiceZEndBuilder()
156             .setClli(serviceZEnd.getClli())
157             .setNodeId(new NodeIdType(serviceZEnd.getNodeId().getValue()).getValue())
158             .setRxDirection(
159                 createRxDirection(serviceZEnd.getRxDirection().values().stream().findFirst().orElseThrow()))
160             .setServiceFormat(serviceZEnd.getServiceFormat())
161             .setServiceRate(serviceZEnd.getServiceRate())
162             .setTxDirection(
163                 createTxDirection(serviceZEnd.getTxDirection().values().stream().findFirst().orElseThrow()))
164         .build();
165     }
166
167     public static RxDirection createRxDirection(
168             org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
169                 .service.endpoint.RxDirection rxDirection) {
170         return new RxDirectionBuilder()
171             .setPort(rxDirection.getPort())
172             .build();
173     }
174
175     public static TxDirection createTxDirection(
176             org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
177                 .service.endpoint.TxDirection txDirection) {
178         return new TxDirectionBuilder()
179             .setPort(txDirection.getPort())
180             .build();
181     }
182
183     public static ListenableFuture<RpcResult<ServiceDeleteOutput>> createDeleteServiceReply(
184             ServiceDeleteInput input, String finalAck, String message, String responseCode) {
185         return RpcResultBuilder
186             .success(
187                 new ServiceDeleteOutputBuilder()
188                     .setConfigurationResponseCommon(
189                         new ConfigurationResponseCommonBuilder()
190                             .setAckFinalIndicator(finalAck)
191                             .setResponseMessage(message)
192                             .setResponseCode(responseCode)
193                             .setRequestId(
194                                 input.getSdncRequestHeader() == null
195                                     ? null
196                                     : input.getSdncRequestHeader().getRequestId())
197                             .build())
198                     .build())
199             .buildFuture();
200     }
201
202     public static ListenableFuture<RpcResult<TempServiceDeleteOutput>> createDeleteServiceReply(
203             TempServiceDeleteInput input, String finalAck, String message, String responseCode) {
204         return RpcResultBuilder
205             .success(
206                 new TempServiceDeleteOutputBuilder()
207                     .setConfigurationResponseCommon(
208                         new ConfigurationResponseCommonBuilder()
209                             .setAckFinalIndicator(finalAck)
210                             .setResponseMessage(message)
211                             .setResponseCode(responseCode)
212                             .setRequestId(null)
213                             .build())
214                     .build())
215             .buildFuture();
216     }
217
218     public static ListenableFuture<RpcResult<ServiceCreateOutput>> createCreateServiceReply(
219             ServiceCreateInput input, String finalAck, String message, String responseCode) {
220         return RpcResultBuilder
221             .success(
222                 new ServiceCreateOutputBuilder()
223                     .setConfigurationResponseCommon(
224                         new ConfigurationResponseCommonBuilder()
225                             .setAckFinalIndicator(finalAck)
226                             .setResponseMessage(message)
227                             .setResponseCode(responseCode)
228                             .setRequestId(
229                                 input.getSdncRequestHeader() == null
230                                     ? null
231                                     : input.getSdncRequestHeader().getRequestId())
232                             .build())
233                     .setResponseParameters(new ResponseParametersBuilder().build())
234                     .build())
235             .buildFuture();
236     }
237
238     public static ListenableFuture<RpcResult<TempServiceCreateOutput>> createCreateServiceReply(
239             TempServiceCreateInput input, String finalAck, String message, String responseCode) {
240         return RpcResultBuilder
241             .success(
242                 new TempServiceCreateOutputBuilder()
243                     .setConfigurationResponseCommon(
244                         new ConfigurationResponseCommonBuilder()
245                             .setAckFinalIndicator(finalAck)
246                             .setResponseMessage(message)
247                             .setResponseCode(responseCode)
248                             .setRequestId(
249                                 input.getSdncRequestHeader() == null
250                                     ? null
251                                     : input.getSdncRequestHeader().getRequestId())
252                             .build())
253                     .setResponseParameters(new ResponseParametersBuilder().build())
254                     .build())
255             .buildFuture();
256     }
257
258     public static ListenableFuture<RpcResult<ServiceRerouteOutput>> createRerouteServiceReply(
259             ServiceRerouteInput input, String finalAckYes, String message) {
260         return RpcResultBuilder
261             .success(
262                 new ServiceRerouteOutputBuilder()
263                     .setConfigurationResponseCommon(
264                         new ConfigurationResponseCommonBuilder().setResponseMessage(message).build())
265                     .setHardConstraints(null)
266                     .setSoftConstraints(null)
267                     .build())
268             .buildFuture();
269     }
270
271     public static Services mappingServices(
272             ServiceCreateInput serviceCreateInput, ServiceReconfigureInput serviceReconfigureInput) {
273         if (serviceCreateInput != null) {
274             return new ServicesBuilder()
275                 .setServiceName(serviceCreateInput.getServiceName())
276                 .setAdministrativeState(AdminStates.OutOfService)
277                 .setOperationalState(State.OutOfService)
278                 .setCommonId(serviceCreateInput.getCommonId())
279                 .setConnectionType(serviceCreateInput.getConnectionType())
280                 .setCustomer(serviceCreateInput.getCustomer())
281                 .setCustomerContact(serviceCreateInput.getCustomerContact())
282                 .setHardConstraints(serviceCreateInput.getHardConstraints())
283                 .setSoftConstraints(serviceCreateInput.getSoftConstraints())
284                 .setSdncRequestHeader(serviceCreateInput.getSdncRequestHeader())
285                 .setLifecycleState(LifecycleState.Planned)
286                 .setServiceAEnd(
287                     new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
288                             .service.ServiceAEndBuilder(serviceCreateInput.getServiceAEnd())
289                         .build())
290                 .setServiceZEnd(
291                     new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
292                             .service.ServiceZEndBuilder(serviceCreateInput.getServiceZEnd())
293                         .build())
294                 .build();
295         }
296         if (serviceReconfigureInput != null) {
297             return new ServicesBuilder()
298                 .setServiceName(serviceReconfigureInput.getServiceName())
299                 .setAdministrativeState(AdminStates.OutOfService)
300                 .setOperationalState(State.OutOfService)
301                 .setCommonId(serviceReconfigureInput.getCommonId())
302                 .setConnectionType(serviceReconfigureInput.getConnectionType())
303                 .setCustomer(serviceReconfigureInput.getCustomer())
304                 .setCustomerContact(serviceReconfigureInput.getCustomerContact())
305                 .setHardConstraints(serviceReconfigureInput.getHardConstraints())
306                 .setSoftConstraints(serviceReconfigureInput.getSoftConstraints())
307                 .setLifecycleState(LifecycleState.Planned)
308                 .setServiceAEnd(
309                     new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
310                             .service.ServiceAEndBuilder(serviceReconfigureInput.getServiceAEnd())
311                         .build())
312                 .setServiceZEnd(
313                     new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
314                             .service.ServiceZEndBuilder(serviceReconfigureInput.getServiceZEnd())
315                         .build())
316                 .build();
317         }
318         return new ServicesBuilder().build();
319     }
320
321     public static org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
322             .temp.service.list.Services mappingServices(TempServiceCreateInput tempServiceCreateInput) {
323         return new org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526
324                 .temp.service.list.ServicesBuilder()
325             .setServiceName(tempServiceCreateInput.getCommonId())
326             .setAdministrativeState(AdminStates.OutOfService)
327             .setOperationalState(State.OutOfService)
328             .setCommonId(tempServiceCreateInput.getCommonId())
329             .setConnectionType(tempServiceCreateInput.getConnectionType())
330             .setCustomer(tempServiceCreateInput.getCustomer())
331             .setCustomerContact(tempServiceCreateInput.getCustomerContact())
332             .setHardConstraints(tempServiceCreateInput.getHardConstraints())
333             .setSoftConstraints(tempServiceCreateInput.getSoftConstraints())
334             .setSdncRequestHeader(tempServiceCreateInput.getSdncRequestHeader())
335             .setLifecycleState(LifecycleState.Planned)
336             .setServiceAEnd(
337                 new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
338                     .service.ServiceAEndBuilder(tempServiceCreateInput.getServiceAEnd()).build())
339             .setServiceZEnd(
340                 new org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526
341                     .service.ServiceZEndBuilder(tempServiceCreateInput.getServiceZEnd()).build())
342             .build();
343     }
344
345     public static ServicePaths mappingServicePaths(ServiceInput serviceInput, PathComputationRequestOutput output) {
346         if (serviceInput == null) {
347             return new ServicePathsBuilder().build();
348         }
349         ServicePathsBuilder servicePathBuilder =
350             new ServicePathsBuilder()
351                 .setServiceAEnd(
352                     new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
353                             .service.path.ServiceAEndBuilder()
354                         .setServiceFormat(serviceInput.getServiceAEnd().getServiceFormat())
355                         .setServiceRate(serviceInput.getServiceAEnd().getServiceRate())
356                         .setClli(serviceInput.getServiceAEnd().getClli())
357                         .setNodeId(new NodeIdType(serviceInput.getServiceAEnd().getNodeId().getValue()).getValue())
358                         .setTxDirection(
359                             new org.opendaylight.yang.gen.v1
360                                     .http.org.transportpce.b.c._interface.service.types.rev220118
361                                         .service.endpoint.sp.TxDirectionBuilder()
362                                 .setPort(
363                                     serviceInput.getServiceAEnd().getTxDirection()
364                                         .values().stream().findFirst().orElseThrow().getPort())
365                                 .build())
366                         .setRxDirection(
367                             new org.opendaylight.yang.gen.v1
368                                     .http.org.transportpce.b.c._interface.service.types.rev220118
369                                         .service.endpoint.sp.RxDirectionBuilder()
370                                 .setPort(
371                                     serviceInput.getServiceAEnd().getRxDirection()
372                                         .values().stream().findFirst().orElseThrow().getPort())
373                                 .build())
374                         .build())
375                 .setServiceZEnd(
376                     new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
377                             .service.path.ServiceZEndBuilder()
378                         .setServiceFormat(serviceInput.getServiceZEnd().getServiceFormat())
379                         .setServiceRate(serviceInput.getServiceZEnd().getServiceRate())
380                         .setClli(serviceInput.getServiceZEnd().getClli())
381                         .setNodeId(new NodeIdType(serviceInput.getServiceZEnd().getNodeId().getValue()).getValue())
382                         .setTxDirection(
383                             new org.opendaylight.yang.gen.v1
384                                     .http.org.transportpce.b.c._interface.service.types.rev220118
385                                         .service.endpoint.sp.TxDirectionBuilder()
386                                 .setPort(
387                                     serviceInput.getServiceZEnd().getTxDirection()
388                                         .values().stream().findFirst().orElseThrow().getPort())
389                                 .build())
390                         .setRxDirection(
391                             new org.opendaylight.yang.gen.v1
392                                     .http.org.transportpce.b.c._interface.service.types.rev220118
393                                         .service.endpoint.sp.RxDirectionBuilder()
394                                 .setPort(
395                                     serviceInput.getServiceZEnd().getRxDirection()
396                                         .values().stream().findFirst().orElseThrow().getPort())
397                                 .build())
398                         .build())
399                 .setServicePathName(serviceInput.getServiceName())
400                 .setServiceHandlerHeader(new ServiceHandlerHeaderBuilder()
401                 .setRequestId(serviceInput.getSdncRequestHeader().getRequestId()).build())
402                 .setPathDescription(
403                     new PathDescriptionBuilder(output.getResponseParameters().getPathDescription()).build());
404         if (serviceInput.getHardConstraints() != null) {
405             servicePathBuilder.setHardConstraints(serviceInput.getHardConstraints());
406         }
407         if (serviceInput.getSoftConstraints() != null) {
408             servicePathBuilder.setSoftConstraints(serviceInput.getSoftConstraints());
409         }
410         return servicePathBuilder.build();
411     }
412 }