Bug 6865 - Transcriber skips the uppercase protocol field
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / NeutronSFCFlowClassifierInterface.java
index 24c5f54e13ecd69749711404a2aa5523f6c180d9..b433dbda73ea44534772c40c3d3a32aa7d439e4c 100644 (file)
@@ -8,7 +8,12 @@
 package org.opendaylight.neutron.transcriber;
 
 import com.google.common.collect.ImmutableBiMap;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.neutron.northbound.api.BadRequestException;
 import org.opendaylight.neutron.spi.INeutronSFCFlowClassifierCRUD;
 import org.opendaylight.neutron.spi.NeutronSFCFlowClassifier;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
@@ -31,10 +36,6 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
 /**
  * Created by Anil Vishnoi (avishnoi@Brocade.com) on 6/24/16.
  */
@@ -50,12 +51,10 @@ public class NeutronSFCFlowClassifierInterface
             .put(EthertypeV6.class,"IPv6")
             .build();
 
-    private static final ImmutableBiMap<Class<? extends ProtocolBase>,String> PROTOCOL_MAP
-            = new ImmutableBiMap.Builder<Class<? extends ProtocolBase>,String>()
-            .put(ProtocolTcp.class,"TCP")
-            .put(ProtocolUdp.class,"UDP")
-            .put(ProtocolIcmp.class,"ICMP")
-            .build();
+    private static final ImmutableBiMap<Class<? extends ProtocolBase>,
+            String> PROTOCOL_MAP = new ImmutableBiMap.Builder<Class<? extends ProtocolBase>, String>()
+                    .put(ProtocolTcp.class, "tcp").put(ProtocolUdp.class, "udp").put(ProtocolIcmp.class, "icmp")
+                    .build();
 
     NeutronSFCFlowClassifierInterface(DataBroker db) {
         super(db);
@@ -98,10 +97,14 @@ public class NeutronSFCFlowClassifierInterface
 
             result.setEthertype(mapper.get(neutronClassifier.getEthertype()));
         }
-        if(neutronClassifier.getProtocol() != null) {
-            final ImmutableBiMap<String, Class<? extends ProtocolBase>> mapper =
-                    PROTOCOL_MAP.inverse();
-            result.setProtocol(mapper.get(neutronClassifier.getProtocol()));
+        if (neutronClassifier.getProtocol() != null) {
+            final ImmutableBiMap<String, Class<? extends ProtocolBase>> mapper = PROTOCOL_MAP.inverse();
+            Class<? extends ProtocolBase> protocol = mapper.get(neutronClassifier.getProtocol());
+            if (protocol != null) {
+                result.setProtocol(protocol);
+            } else {
+                throw new BadRequestException("Protocol {" + neutronClassifier.getProtocol() + "} is not supported");
+            }
         }
         if(neutronClassifier.getSourcePortRangeMin() != null) {
             result.setSourcePortRangeMin(neutronClassifier.getSourcePortRangeMin());