Clean up yang model - Part VI
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / NeutronMeteringLabelRuleInterface.java
index 67a15acd0d1fec93b719d64a6476a350ab8a95d2..24417dff1f7b9b64529064a5b3fdcb23c06a8836 100644 (file)
@@ -8,7 +8,6 @@
 
 package org.opendaylight.neutron.transcriber;
 
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -21,48 +20,35 @@ import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderCo
 import org.opendaylight.neutron.spi.INeutronMeteringLabelRuleCRUD;
 import org.opendaylight.neutron.spi.NeutronMeteringLabelRule;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.metering.rev141002.MeteringRuleAttrs;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.DirectionBase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.DirectionEgress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.DirectionIngress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.metering.rev141002.metering.rules.attributes.MeteringRules;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.metering.rev141002.metering.rules.attributes.metering.rules.MeteringRule;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.metering.rev141002.metering.rules.attributes.metering.rules.MeteringRuleBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.ImmutableBiMap;
+
 public class NeutronMeteringLabelRuleInterface extends AbstractNeutronInterface<MeteringRule, NeutronMeteringLabelRule>
         implements INeutronMeteringLabelRuleCRUD {
-    private static final Logger logger = LoggerFactory.getLogger(NeutronMeteringLabelRuleInterface.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(NeutronMeteringLabelRuleInterface.class);
     private ConcurrentMap<String, NeutronMeteringLabelRule> meteringLabelRuleDB = new ConcurrentHashMap<String, NeutronMeteringLabelRule>();
 
-    NeutronMeteringLabelRuleInterface(ProviderContext providerContext) {
-        super(providerContext);
-    }
-
-    // this method uses reflection to update an object from it's delta.
-
-    private boolean overwrite(Object target, Object delta) {
-        Method[] methods = target.getClass().getMethods();
-
-        for (Method toMethod : methods) {
-            if (toMethod.getDeclaringClass().equals(target.getClass()) && toMethod.getName().startsWith("set")) {
+    private static final ImmutableBiMap<Class<? extends DirectionBase>,String> DIRECTION_MAP
+            = new ImmutableBiMap.Builder<Class<? extends DirectionBase>,String>()
+            .put(DirectionEgress.class,"egress")
+            .put(DirectionIngress.class,"ingress")
+            .build();
 
-                String toName = toMethod.getName();
-                String fromName = toName.replace("set", "get");
 
-                try {
-                    Method fromMethod = delta.getClass().getMethod(fromName);
-                    Object value = fromMethod.invoke(delta, (Object[]) null);
-                    if (value != null) {
-                        toMethod.invoke(target, value);
-                    }
-                } catch (Exception e) {
-                    logger.error(e.getMessage());
-                    return false;
-                }
-            }
-        }
-        return true;
+    NeutronMeteringLabelRuleInterface(ProviderContext providerContext) {
+        super(providerContext);
     }
 
     // IfNBMeteringLabelRuleCRUD methods
@@ -87,7 +73,7 @@ public class NeutronMeteringLabelRuleInterface extends AbstractNeutronInterface<
             NeutronMeteringLabelRule meteringLabelRule = entry.getValue();
             allMeteringLabelRules.add(meteringLabelRule);
         }
-        logger.debug("Exiting getAllMeteringLabelRules, Found {} OpenStackMeteringLabelRules",
+        LOGGER.debug("Exiting getAllMeteringLabelRules, Found {} OpenStackMeteringLabelRules",
                 allMeteringLabelRules.size());
         List<NeutronMeteringLabelRule> ans = new ArrayList<NeutronMeteringLabelRule>();
         ans.addAll(allMeteringLabelRules);
@@ -140,23 +126,24 @@ public class NeutronMeteringLabelRuleInterface extends AbstractNeutronInterface<
     }
 
     @Override
-    protected MeteringRule toMd(NeutronMeteringLabelRule meteringLableRule) {
+    protected MeteringRule toMd(NeutronMeteringLabelRule meteringLabelRule) {
         MeteringRuleBuilder meteringRuleBuilder = new MeteringRuleBuilder();
-        if (meteringLableRule.getMeteringLabelRuleLabelID() != null) {
-            meteringRuleBuilder.setId((toUuid(meteringLableRule.getMeteringLabelRuleLabelID())));
+        if (meteringLabelRule.getMeteringLabelRuleLabelID() != null) {
+            meteringRuleBuilder.setId((toUuid(meteringLabelRule.getMeteringLabelRuleLabelID())));
         }
-        if (meteringLableRule.getMeteringLabelRuleUUID() != null) {
-            meteringRuleBuilder.setMeteringLabelId(toUuid(meteringLableRule.getMeteringLabelRuleUUID()));
+        if (meteringLabelRule.getMeteringLabelRuleUUID() != null) {
+            meteringRuleBuilder.setMeteringLabelId(toUuid(meteringLabelRule.getMeteringLabelRuleUUID()));
         }
-        if (meteringLableRule.getMeteringLabelRuleDirection() != null) {
-            meteringRuleBuilder.setDirection((MeteringRuleAttrs.Direction.valueOf(meteringLableRule
-                    .getMeteringLabelRuleDirection())));
+        if (meteringLabelRule.getMeteringLabelRuleDirection() != null) {
+            ImmutableBiMap<String, Class<? extends DirectionBase>> mapper =
+                    DIRECTION_MAP.inverse();
+            meteringRuleBuilder.setDirection((Class<? extends DirectionBase>) mapper.get(meteringLabelRule.getMeteringLabelRuleDirection()));
         }
-        if (meteringLableRule.getMeteringLabelRuleRemoteIPPrefix() != null) {
-            IpAddress ipAddress = new IpAddress(meteringLableRule.getMeteringLabelRuleRemoteIPPrefix().toCharArray());
+        if (meteringLabelRule.getMeteringLabelRuleRemoteIPPrefix() != null) {
+            IpAddress ipAddress = new IpAddress(meteringLabelRule.getMeteringLabelRuleRemoteIPPrefix().toCharArray());
             meteringRuleBuilder.setRemoteIpPrefix(ipAddress);
         }
-        meteringRuleBuilder.setExcluded(meteringLableRule.getMeteringLabelRuleExcluded());
+        meteringRuleBuilder.setExcluded(meteringLabelRule.getMeteringLabelRuleExcluded());
         return meteringRuleBuilder.build();
     }
 
@@ -166,4 +153,14 @@ public class NeutronMeteringLabelRuleInterface extends AbstractNeutronInterface<
         meteringRuleBuilder.setId((toUuid(uuid)));
         return meteringRuleBuilder.build();
     }
+
+    public static void registerNewInterface(BundleContext context,
+                                            ProviderContext providerContext,
+                                            List<ServiceRegistration<?>> registrations) {
+        NeutronMeteringLabelRuleInterface neutronMeteringLabelRuleInterface = new NeutronMeteringLabelRuleInterface(providerContext);
+        ServiceRegistration<INeutronMeteringLabelRuleCRUD> neutronMeteringLabelRuleInterfaceRegistration = context.registerService(INeutronMeteringLabelRuleCRUD.class, neutronMeteringLabelRuleInterface, null);
+        if(neutronMeteringLabelRuleInterfaceRegistration != null) {
+            registrations.add(neutronMeteringLabelRuleInterfaceRegistration);
+        }
+    }
 }