Remove transportpce-routing-constraint model
[transportpce.git] / servicehandler / src / main / java / org / opendaylight / transportpce / servicehandler / ModelMappingUtils.java
index 541fe8cc7885e03b5ff1436748619ad66c6617fe..44d09f6b5261ef4214117258cf95ee953e29a37c 100644 (file)
@@ -8,15 +8,15 @@
 package org.opendaylight.transportpce.servicehandler;
 
 import com.google.common.util.concurrent.ListenableFuture;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.PathComputationRequestOutput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.path.computation.request.input.ServiceAEnd;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.path.computation.request.input.ServiceAEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.path.computation.request.input.ServiceZEnd;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.path.computation.request.input.ServiceZEndBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.service.path.rpc.result.PathDescription;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev200520.ServiceDeleteInputBuilder;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev200520.ServiceImplementationRequestInput;
-import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev200520.ServiceImplementationRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.PathComputationRequestOutput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.path.computation.request.input.ServiceAEnd;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.path.computation.request.input.ServiceAEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.path.computation.request.input.ServiceZEnd;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.path.computation.request.input.ServiceZEndBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev220118.service.path.rpc.result.PathDescription;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInputBuilder;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInput;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceImplementationRequestInputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev181130.NodeIdType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.configuration.response.common.ConfigurationResponseCommon;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev190531.configuration.response.common.ConfigurationResponseCommonBuilder;
@@ -25,6 +25,27 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181130.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev190531.RpcStatus;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev181130.AdminStates;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODU0;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODU1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODU2;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODU2e;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODU3;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODUCn;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODUflexCbr;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODUflexFlexe;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODUflexGfp;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.ODUflexImp;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OTU0;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OTU1;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OTU2;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OTU2e;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OTU3;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OTU4;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OTUCn;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OTUflex;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OduRateIdentity;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev200327.OtuRateIdentity;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceCreateInput;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceCreateOutput;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.ServiceCreateOutputBuilder;
@@ -51,26 +72,23 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.TempSer
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.TempServiceDeleteOutputBuilder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.list.Services;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.list.ServicesBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.routing.constraints.sp.HardConstraintsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.routing.constraints.sp.SoftConstraintsBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.RxDirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.RxDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.TxDirection;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.TxDirectionBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.handler.header.ServiceHandlerHeaderBuilder;
-import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128.service.path.PathDescriptionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev190531.service.list.ServicesKey;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.TxDirection;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.TxDirectionBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.handler.header.ServiceHandlerHeaderBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.service.path.PathDescriptionBuilder;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePaths;
 import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePathsBuilder;
+import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.service.path.list.ServicePathsKey;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public final class ModelMappingUtils {
-
-    private static final Logger LOG =
-        LoggerFactory.getLogger(org.opendaylight.transportpce.servicehandler.ModelMappingUtils.class);
-    private static final String TERMINATION_POINT = "TerminationPoint";
+    private static final Logger LOG = LoggerFactory.getLogger(ModelMappingUtils.class);
 
     private ModelMappingUtils() {
     }
@@ -84,42 +102,36 @@ public final class ModelMappingUtils {
         } else {
             serviceImplementationRequestInputBuilder.setServiceName(input.getServiceName());
         }
-        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev200520.service.implementation
+        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.service.implementation
             .request.input.ServiceAEndBuilder serviceAEnd = new org.opendaylight.yang.gen.v1.http.org.opendaylight
-            .transportpce.renderer.rev200520.service.implementation.request.input.ServiceAEndBuilder();
+            .transportpce.renderer.rev210915.service.implementation.request.input.ServiceAEndBuilder();
 
         serviceAEnd.setServiceFormat(input.getServiceAEnd().getServiceFormat())
             .setServiceRate(input.getServiceAEnd().getServiceRate())
-            .setOtuServiceRate(input.getServiceAEnd().getOtuServiceRate())
-            .setOduServiceRate(input.getServiceAEnd().getOduServiceRate())
-            .setClli(input.getServiceAEnd().getClli())
-            .setOtuServiceRate(input.getServiceAEnd().getOtuServiceRate()) // set otu and odu
-            .setOduServiceRate(input.getServiceZEnd().getOduServiceRate())
+            .setOtuServiceRate(getOtuServiceRate(input.getServiceAEnd().getOtuServiceRate()))
+            .setOduServiceRate(getOduServiceRate(input.getServiceAEnd().getOduServiceRate()))
             .setClli(input.getServiceAEnd().getClli())
             .setNodeId(new NodeIdType(input.getServiceAEnd().getNodeId().getValue()).getValue())
             .setTxDirection(new org.opendaylight.yang.gen.v1.http.org
-                .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.TxDirectionBuilder()
+                .transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.TxDirectionBuilder()
                 .setPort(input.getServiceAEnd().getTxDirection().getPort()).build())
             .setRxDirection(new org.opendaylight.yang.gen.v1.http.org
-                .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.RxDirectionBuilder()
+                .transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirectionBuilder()
                 .setPort(input.getServiceAEnd().getRxDirection().getPort()).build());
-        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev200520.service.implementation
+        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.service.implementation
             .request.input.ServiceZEndBuilder serviceZEnd = new org.opendaylight.yang.gen.v1.http.org.opendaylight
-            .transportpce.renderer.rev200520.service.implementation.request.input.ServiceZEndBuilder();
+            .transportpce.renderer.rev210915.service.implementation.request.input.ServiceZEndBuilder();
         serviceZEnd.setServiceFormat(input.getServiceZEnd().getServiceFormat())
             .setServiceRate(input.getServiceZEnd().getServiceRate())
-            .setOtuServiceRate(input.getServiceZEnd().getOtuServiceRate())
-            .setOduServiceRate(input.getServiceZEnd().getOduServiceRate())
-            .setClli(input.getServiceZEnd().getClli())
-            .setOtuServiceRate(input.getServiceAEnd().getOtuServiceRate()) // set otu and odu
-            .setOduServiceRate(input.getServiceZEnd().getOduServiceRate())
+            .setOtuServiceRate(getOtuServiceRate(input.getServiceZEnd().getOtuServiceRate()))
+            .setOduServiceRate(getOduServiceRate(input.getServiceZEnd().getOduServiceRate()))
             .setClli(input.getServiceZEnd().getClli())
             .setNodeId(new NodeIdType(input.getServiceZEnd().getNodeId().getValue()).getValue())
             .setTxDirection(new org.opendaylight.yang.gen.v1.http.org
-                .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.TxDirectionBuilder()
+                .transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.TxDirectionBuilder()
                 .setPort(input.getServiceZEnd().getTxDirection().getPort()).build())
             .setRxDirection(new org.opendaylight.yang.gen.v1.http.org
-                .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.RxDirectionBuilder()
+                .transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirectionBuilder()
                 .setPort(input.getServiceZEnd().getRxDirection().getPort()).build());
 
         serviceImplementationRequestInputBuilder
@@ -128,9 +140,9 @@ public final class ModelMappingUtils {
             .setConnectionType(input.getConnectionType())
             .setServiceHandlerHeader(
                 new ServiceHandlerHeaderBuilder().setRequestId(input.getSdncRequestHeader().getRequestId()).build());
-        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev200520.service.implementation
+        org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.service.implementation
             .request.input.PathDescriptionBuilder pathDescBuilder = new org.opendaylight.yang.gen.v1.http.org
-            .opendaylight.transportpce.renderer.rev200520.service.implementation.request.input
+            .opendaylight.transportpce.renderer.rev210915.service.implementation.request.input
             .PathDescriptionBuilder();
         pathDescBuilder
             .setAToZDirection(pathDescription.getAToZDirection())
@@ -139,7 +151,75 @@ public final class ModelMappingUtils {
         return serviceImplementationRequestInputBuilder.build();
     }
 
-    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev200520
+    private static Class<? extends OduRateIdentity> getOduServiceRate(
+            Class<? extends org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev181130.OduRateIdentity>
+                oduServiceRate) {
+        if (oduServiceRate == null) {
+            return null;
+        }
+        String oduRate = oduServiceRate.getSimpleName();
+        LOG.info("ODU rate = {}", oduRate);
+        switch (oduRate) {
+            case "ODU0":
+                return ODU0.class;
+            case "ODU1":
+                return ODU1.class;
+            case "ODU2":
+                return ODU2.class;
+            case "ODU2e":
+                return ODU2e.class;
+            case "ODU3":
+                return ODU3.class;
+            case "ODU4":
+                return ODU4.class;
+            case "ODUCn":
+                return ODUCn.class;
+            case "ODUflexCbr":
+                return ODUflexCbr.class;
+            case "ODUflexFlexe":
+                return ODUflexFlexe.class;
+            case "ODUflexGfp":
+                return ODUflexGfp.class;
+            case "ODUflexImp":
+                return ODUflexImp.class;
+            default:
+                LOG.error("OTU rate {} not recognized", oduRate);
+        }
+        return null;
+    }
+
+    private static Class<? extends OtuRateIdentity> getOtuServiceRate(
+            Class<? extends org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev181130.OtuRateIdentity>
+                otuServiceRate) {
+        if (otuServiceRate == null) {
+            return null;
+        }
+        String otuRate = otuServiceRate.getSimpleName();
+        LOG.info("OTU rate = {}", otuRate);
+        switch (otuRate) {
+            case "OTU0":
+                return OTU0.class;
+            case "OTU1":
+                return OTU1.class;
+            case "OTU2":
+                return OTU2.class;
+            case "OTU2e":
+                return OTU2e.class;
+            case "OTU3":
+                return OTU3.class;
+            case "OTU4":
+                return OTU4.class;
+            case "OTUCn":
+                return OTUCn.class;
+            case "OTUflex":
+                return OTUflex.class;
+            default:
+                LOG.error("OTU rate {} not recognized", otuRate);
+        }
+        return null;
+    }
+
+    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
             .ServiceDeleteInput createServiceDeleteInput(ServiceInput serviceInput) {
         ServiceDeleteInputBuilder builder = new ServiceDeleteInputBuilder()
             .setServiceName(serviceInput.getServiceName())
@@ -148,7 +228,7 @@ public final class ModelMappingUtils {
         return builder.build();
     }
 
-    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev200520
+    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
             .ServiceDeleteInput createServiceDeleteInput(ServiceRerouteInput serviceRerouteinput, Services services) {
         ServiceDeleteInputBuilder builder = new ServiceDeleteInputBuilder()
             .setServiceName(serviceRerouteinput.getServiceName())
@@ -157,7 +237,7 @@ public final class ModelMappingUtils {
         return builder.build();
     }
 
-    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev200520
+    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915
             .ServiceDeleteInput createServiceDeleteInput(ServiceRestorationInput serviceRestorationInput,
             Services services) {
         ServiceDeleteInputBuilder builder = new ServiceDeleteInputBuilder()
@@ -167,7 +247,7 @@ public final class ModelMappingUtils {
         return builder.build();
     }
 
-    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev200520.ServiceDeleteInput
+    public static org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteInput
             createServiceDeleteInput(ServiceReconfigureInput serviceReconfigureInput) {
         String serviceName = serviceReconfigureInput.getServiceName();
         ServiceDeleteInputBuilder builder = new ServiceDeleteInputBuilder()
@@ -348,6 +428,13 @@ public final class ModelMappingUtils {
                 .setHardConstraints(serviceReconfigureInput.getHardConstraints())
                 .setSoftConstraints(serviceReconfigureInput.getSoftConstraints())
                 .setLifecycleState(LifecycleState.Planned).setServiceAEnd(aend).setServiceZEnd(zend);
+        } else {
+            //FIXME: Because of Silicon, we cannot have empty key.
+            //it's this case possible ? There is a Junit test covering null
+            //temporary workaround as now there is a null key check done by yangtools.
+            //Functional review is needed
+            LOG.warn("ServiceCreateInput and ServiceReconfigureInput are null");
+            service.withKey(new ServicesKey("unknown"));
         }
         return service.build();
     }
@@ -378,50 +465,41 @@ public final class ModelMappingUtils {
     public static ServicePaths mappingServicePaths(ServiceInput serviceInput, PathComputationRequestOutput output) {
         ServicePathsBuilder servicePathBuilder = new ServicePathsBuilder();
         if (serviceInput != null) {
-            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128
+            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
                 .service.path.ServiceAEndBuilder serviceAEnd =
-                new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128
+                new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
                     .service.path.ServiceAEndBuilder();
             serviceAEnd.setServiceFormat(serviceInput.getServiceAEnd().getServiceFormat())
                 .setServiceRate(serviceInput.getServiceAEnd().getServiceRate())
                 .setClli(serviceInput.getServiceAEnd().getClli())
                 .setNodeId(new NodeIdType(serviceInput.getServiceAEnd().getNodeId()).getValue())
                 .setTxDirection(new org.opendaylight.yang.gen.v1.http.org
-                    .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.TxDirectionBuilder()
+                    .transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.TxDirectionBuilder()
                     .setPort(serviceInput.getServiceAEnd().getTxDirection().getPort()).build())
                 .setRxDirection(new org.opendaylight.yang.gen.v1.http.org
-                    .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.RxDirectionBuilder()
+                    .transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirectionBuilder()
                     .setPort(serviceInput.getServiceAEnd().getRxDirection().getPort()).build());
-            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128
+            org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
                 .service.path.ServiceZEndBuilder serviceZEnd =
-                new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev200128
+                new org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118
                     .service.path.ServiceZEndBuilder();
             serviceZEnd.setServiceFormat(serviceInput.getServiceZEnd().getServiceFormat())
                 .setServiceRate(serviceInput.getServiceZEnd().getServiceRate())
                 .setClli(serviceInput.getServiceZEnd().getClli())
                 .setNodeId(new NodeIdType(serviceInput.getServiceZEnd().getNodeId()).getValue())
                 .setTxDirection(new org.opendaylight.yang.gen.v1.http.org
-                    .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.TxDirectionBuilder()
+                    .transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.TxDirectionBuilder()
                     .setPort(serviceInput.getServiceZEnd().getTxDirection().getPort()).build())
                 .setRxDirection(new org.opendaylight.yang.gen.v1.http.org
-                    .transportpce.b.c._interface.service.types.rev200128.service.endpoint.sp.RxDirectionBuilder()
+                    .transportpce.b.c._interface.service.types.rev220118.service.endpoint.sp.RxDirectionBuilder()
                     .setPort(serviceInput.getServiceZEnd().getRxDirection().getPort()).build());
             servicePathBuilder.setServiceAEnd(serviceAEnd.build());
             servicePathBuilder.setServiceZEnd(serviceZEnd.build());
-            MappingConstraints mapConstraints = new MappingConstraints(serviceInput.getHardConstraints(),
-                serviceInput.getSoftConstraints());
-            mapConstraints.serviceToServicePathConstarints();
-            if (mapConstraints.getServicePathHardConstraints() != null) {
-                HardConstraintsBuilder hardConstraintBuilder = new HardConstraintsBuilder()
-                    .setCustomerCode(serviceInput.getHardConstraints().getCustomerCode())
-                    .setCoRoutingOrGeneral(mapConstraints.getServicePathHardConstraints().getCoRoutingOrGeneral());
-                servicePathBuilder.setHardConstraints(hardConstraintBuilder.build());
+            if (serviceInput.getHardConstraints() != null) {
+                servicePathBuilder.setHardConstraints(serviceInput.getHardConstraints());
             }
-            if (mapConstraints.getServicePathSoftConstraints() != null) {
-                SoftConstraintsBuilder softConstraintBuilder = new SoftConstraintsBuilder()
-                    .setCustomerCode(mapConstraints.getServicePathSoftConstraints().getCustomerCode())
-                    .setCoRoutingOrGeneral(mapConstraints.getServicePathSoftConstraints().getCoRoutingOrGeneral());
-                servicePathBuilder.setSoftConstraints(softConstraintBuilder.build());
+            if (serviceInput.getSoftConstraints() != null) {
+                servicePathBuilder.setSoftConstraints(serviceInput.getSoftConstraints());
             }
             servicePathBuilder.setServicePathName(serviceInput.getServiceName());
             servicePathBuilder.setServiceHandlerHeader(new ServiceHandlerHeaderBuilder()
@@ -431,6 +509,13 @@ public final class ModelMappingUtils {
                     new PathDescriptionBuilder(output.getResponseParameters().getPathDescription());
                 servicePathBuilder.setPathDescription(pathDescBuilder.build());
             }
+        } else {
+            //FIXME: Because of Silicon, we cannot have empty key.
+            //it's this case possible ? There is a Junit test covering null
+            //temporary workaround as now there is a null key check done by yangtools.
+            //Functional review is needed
+            LOG.warn("ServiceInput is null");
+            servicePathBuilder.withKey(new ServicePathsKey("unknown"));
         }
 
         return servicePathBuilder.build();