Remove use of ConcurrentHashMap from FWaaS transcriber 77/26577/1
authorRyan Moats <rmoats@us.ibm.com>
Sun, 6 Sep 2015 14:05:47 +0000 (09:05 -0500)
committerRyan Moats <rmoats@us.ibm.com>
Sun, 6 Sep 2015 15:38:06 +0000 (10:38 -0500)
Side effects: fix up the fwaas yang models,
fix up up the fwaas neutron-spi pojos

Change-Id: If1c1050775aeba0b3b0b05d33ac963a9cffdb288
Signed-off-by: Ryan Moats <rmoats@us.ibm.com>
model/src/main/yang/neutron-fwaas.yang
model/src/main/yang/neutron.yang
neutron-spi/src/main/java/org/opendaylight/neutron/spi/NeutronFirewall.java
neutron-spi/src/main/java/org/opendaylight/neutron/spi/NeutronFirewallRule.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronFirewallInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronFirewallPolicyInterface.java
transcriber/src/main/java/org/opendaylight/neutron/transcriber/NeutronFirewallRuleInterface.java

index 7ff6882931afaee4cfd44bf2c9dbf550390af0e5..abced7b4655adb9825b27542779dad803b662682 100644 (file)
@@ -44,7 +44,7 @@ module neutron-fwaas {
         }
     }
 
-    grouping firewallpolicy-attributes {
+    grouping firewall-policy-attributes {
         leaf descr {
             type string;
             description "Detailed description of the firewall policy.";
@@ -63,7 +63,7 @@ module neutron-fwaas {
         }
     }
 
-    grouping firewallrule-attributes {
+    grouping firewall-rule-attributes {
         leaf descr {
             type string;
             description "Detailed description of the firewall rule.";
@@ -118,7 +118,7 @@ module neutron-fwaas {
         }
     }
 
-    grouping fwaas-attributes {
+    grouping firewalls-attributes {
         container firewalls {
             list firewall {
                 key "uuid";
@@ -127,18 +127,22 @@ module neutron-fwaas {
                 uses firewall-attributes;
             }
         }
+    }
+    grouping policies-attributes {
         container firewall-policies {
             list firewall-policy {
                 key "uuid";
                 uses attrs:base-attributes;
-                uses firewallpolicy-attributes;
+                uses firewall-policy-attributes;
             }
         }
+    }
+    grouping rules-attributes {
         container firewall-rules {
             list firewall-rule {
                 key "uuid";
                 uses attrs:base-attributes;
-                uses firewallrule-attributes;
+                uses firewall-rule-attributes;
             }
         }
     }
index fcfba429f060692ff6055c5b9a74428062263c29..c18f8efe54cd6635d00f9f9b1890426427c095b1 100644 (file)
@@ -23,6 +23,7 @@ module neutron {
     import neutron-lbaasv2 { prefix "lbaasv2"; }
     import neutron-provider { prefix "provider"; }
     import neutron-vpnaas { prefix "vpnaas"; }
+    import neutron-fwaas { prefix "fwaas"; }
 
     organization "OpenDaylight Neutron Group";
 
@@ -37,16 +38,19 @@ module neutron {
 
     container neutron {
         uses networks:networks-attributes;
+        uses provider:provider-attributes;
+        uses subnets:subnets-attributes;
+        uses ports:ports-attributes;
         uses l3:routers-attributes;
         uses l3:floatingips-attributes;
         uses metering:metering-labels-attributes;
         uses metering:metering-rules-attributes;
-        uses ports:ports-attributes;
         uses secgroups:security-groups-attributes;
         uses secgroups:security-rules-attributes;
-        uses subnets:subnets-attributes;
+        uses fwaas:firewalls-attributes;
+        uses fwaas:policies-attributes;
+        uses fwaas:rules-attributes;
         uses lbaasv2:lbaas-attributes;
-        uses provider:provider-attributes;
         uses vpnaas:vpnservices-attributes;
         uses vpnaas:ikepolicies-attributes;
         uses vpnaas:ipsecpolicies-attributes;
index ca9477fc2d5d6a54a6d8a6e286c49d1755981708..d808abf60dacf0ab08e437b65aa9550dd854a0f7 100644 (file)
@@ -134,7 +134,7 @@ public class NeutronFirewall implements Serializable, INeutronObject {
         return neutronFirewallPolicyID;
     }
 
-    public void setNeutronFirewallPolicyID(String firewallPolicy) {
+    public void setFirewallPolicyID(String firewallPolicy) {
         this.neutronFirewallPolicyID = firewallPolicy;
     }
 
@@ -165,7 +165,7 @@ public class NeutronFirewall implements Serializable, INeutronObject {
                 ans.setFirewallIsShared(firewallIsShared);
             }
             if (s.equals("firewall_policy_id")) {
-                ans.setNeutronFirewallPolicyID(this.getFirewallPolicyID());
+                ans.setFirewallPolicyID(this.getFirewallPolicyID());
             }
         }
         return ans;
index 09c7fc860ff75660d7b7716e4dd2bf49c46acb6c..6abcfc3f8d4e88367709cfa202b16d30d2dbe213 100644 (file)
@@ -173,7 +173,7 @@ public class NeutronFirewallRule implements Serializable, INeutronObject {
         return firewallRulePolicyID;
     }
 
-    public void setFirewallRulesPolicyID(String firewallRulePolicyID) {
+    public void setFirewallRulePolicyID(String firewallRulePolicyID) {
         this.firewallRulePolicyID = firewallRulePolicyID;
     }
 
@@ -259,7 +259,7 @@ public class NeutronFirewallRule implements Serializable, INeutronObject {
                 ans.setFirewallRuleIsShared(firewallRuleIsShared);
             }
             if (s.equals("firewall_policy_id")) {
-                ans.setFirewallRulesPolicyID(this.getFirewallRulePolicyID());
+                ans.setFirewallRulePolicyID(this.getFirewallRulePolicyID());
             }
             if (s.equals("protocol")) {
                 ans.setFirewallRuleProtocol(this.getFirewallRuleProtocol());
index d0d5a408e75cbbaf9219ec3d7822d912ddb4b58d..2527ae3e92dedad40e4e7470b166b3fe6e793e44 100644 (file)
@@ -10,9 +10,14 @@ package org.opendaylight.neutron.transcriber;
 
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronFirewallCRUD;
-import org.opendaylight.neutron.spi.INeutronObject;
 import org.opendaylight.neutron.spi.NeutronFirewall;
-import org.opendaylight.yangtools.yang.binding.DataObject;
+
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev141002.firewalls.attributes.Firewalls;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev141002.firewalls.attributes.firewalls.Firewall;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev141002.firewalls.attributes.firewalls.FirewallBuilder;
+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;
@@ -25,40 +30,41 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map.Entry;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
 
-public class NeutronFirewallInterface extends AbstractNeutronInterface implements INeutronFirewallCRUD {
+public class NeutronFirewallInterface extends AbstractNeutronInterface<Firewall,NeutronFirewall> implements INeutronFirewallCRUD {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(NeutronFirewallInterface.class);
 
-    private ConcurrentMap<String, NeutronFirewall> firewallDB  = new ConcurrentHashMap<String, NeutronFirewall>();
-
-
     NeutronFirewallInterface(ProviderContext providerContext) {
         super(providerContext);
     }
 
     @Override
     public boolean neutronFirewallExists(String uuid) {
-        return firewallDB.containsKey(uuid);
+        Firewall firewall = readMd(createInstanceIdentifier(toMd(uuid)));
+        if (firewall == null) {
+            return false;
+        }
+        return true;
     }
 
     @Override
     public NeutronFirewall getNeutronFirewall(String uuid) {
-        if (!neutronFirewallExists(uuid)) {
-            LOGGER.debug("No Firewall Have Been Defined");
+        Firewall firewall = readMd(createInstanceIdentifier(toMd(uuid)));
+        if (firewall == null) {
             return null;
         }
-        return firewallDB.get(uuid);
+        return fromMd(firewall);
     }
 
     @Override
     public List<NeutronFirewall> getAllNeutronFirewalls() {
         Set<NeutronFirewall> allFirewalls = new HashSet<NeutronFirewall>();
-        for (Entry<String, NeutronFirewall> entry : firewallDB.entrySet()) {
-            NeutronFirewall firewall = entry.getValue();
-            allFirewalls.add(firewall);
+        Firewalls firewalls = readMd(createInstanceIdentifier());
+        if (firewalls != null) {
+            for (Firewall firewall: firewalls.getFirewall()) {
+                allFirewalls.add(fromMd(firewall));
+            }
         }
         LOGGER.debug("Exiting getFirewalls, Found {} OpenStackFirewall", allFirewalls.size());
         List<NeutronFirewall> ans = new ArrayList<NeutronFirewall>();
@@ -71,7 +77,7 @@ public class NeutronFirewallInterface extends AbstractNeutronInterface implement
         if (neutronFirewallExists(input.getID())) {
             return false;
         }
-        firewallDB.putIfAbsent(input.getID(), input);
+        addMd(input);
         return true;
     }
 
@@ -80,8 +86,7 @@ public class NeutronFirewallInterface extends AbstractNeutronInterface implement
         if (!neutronFirewallExists(uuid)) {
             return false;
         }
-        firewallDB.remove(uuid);
-        return true;
+        return removeMd(toMd(uuid));
     }
 
     @Override
@@ -89,8 +94,8 @@ public class NeutronFirewallInterface extends AbstractNeutronInterface implement
         if (!neutronFirewallExists(uuid)) {
             return false;
         }
-        NeutronFirewall target = firewallDB.get(uuid);
-        return overwrite(target, delta);
+        updateMd(delta);
+        return true;
     }
 
     @Override
@@ -99,21 +104,79 @@ public class NeutronFirewallInterface extends AbstractNeutronInterface implement
     }
 
     @Override
-    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
-        // TODO Auto-generated method stub
-        return null;
+    protected InstanceIdentifier<Firewall> createInstanceIdentifier(Firewall item) {
+        return InstanceIdentifier.create(Neutron.class)
+                .child(Firewalls.class)
+                .child(Firewall.class, item.getKey());
+    }
+
+    protected InstanceIdentifier<Firewalls> createInstanceIdentifier() {
+        return InstanceIdentifier.create(Neutron.class)
+                .child(Firewalls.class);
+    }
+
+    protected NeutronFirewall fromMd(Firewall firewall) {
+        NeutronFirewall answer = new NeutronFirewall();
+        if (firewall.getUuid() != null) {
+            answer.setID(firewall.getUuid().getValue());
+        }
+        if (firewall.getName() != null) {
+            answer.setFirewallName(firewall.getName());
+        }
+        if (firewall.getTenantId() != null) {
+            answer.setFirewallTenantID(firewall.getTenantId().getValue().replace("-",""));
+        }
+        answer.setFirewallAdminStateIsUp(firewall.isAdminStateUp());
+        if (firewall.getStatus() != null) {
+            answer.setFirewallStatus(firewall.getStatus());
+        }
+        if (firewall.getDescr() != null) {
+            answer.setFirewallDescription(firewall.getDescr());
+        }
+        if (firewall.isShared() != null) {
+            answer.setFirewallIsShared(firewall.isShared());
+        }
+        if (firewall.getFirewallPolicyId() != null) {
+             answer.setFirewallPolicyID(firewall.getFirewallPolicyId().getValue());
+        }
+        return answer;
     }
 
     @Override
-    protected DataObject toMd(INeutronObject neutronObject) {
-        // TODO Auto-generated method stub
-        return null;
+    protected Firewall toMd(NeutronFirewall firewall) {
+        FirewallBuilder firewallBuilder = new FirewallBuilder();
+        if (firewall.getID() != null) {
+            firewallBuilder.setUuid(toUuid(firewall.getID()));
+        }
+        if (firewall.getFirewallName() != null) {
+            firewallBuilder.setName(firewall.getFirewallName());
+        }
+        if (firewall.getFirewallTenantID() != null) {
+            firewallBuilder.setTenantId(toUuid(firewall.getFirewallTenantID()));
+        }
+        if (firewall.getFirewallAdminStateIsUp() != null) {
+            firewallBuilder.setAdminStateUp(firewall.getFirewallAdminStateIsUp());
+        }
+        if (firewall.getFirewallStatus() != null) {
+            firewallBuilder.setStatus(firewall.getFirewallStatus());
+        }
+        if (firewall.getFirewallDescription() != null) {
+            firewallBuilder.setDescr(firewall.getFirewallDescription());
+        }
+        if (firewall.getFirewallIsShared() != null) {
+            firewallBuilder.setShared(firewall.getFirewallIsShared());
+        }
+        if (firewall.getFirewallPolicyID() != null) {
+            firewallBuilder.setFirewallPolicyId(toUuid(firewall.getFirewallPolicyID()));
+        }
+        return firewallBuilder.build();
     }
 
     @Override
-    protected DataObject toMd(String uuid) {
-        // TODO Auto-generated method stub
-        return null;
+    protected Firewall toMd(String uuid) {
+        FirewallBuilder firewallBuilder = new FirewallBuilder();
+        firewallBuilder.setUuid(toUuid(uuid));
+        return firewallBuilder.build();
     }
 
     public static void registerNewInterface(BundleContext context,
index 5e86f4a70bd412e42a4b76d23f0d350331dc4814..f9aad8888171e7eee70067d0b6f3cfa6347a8462 100644 (file)
@@ -13,14 +13,19 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map.Entry;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
 
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronFirewallPolicyCRUD;
 import org.opendaylight.neutron.spi.INeutronObject;
 import org.opendaylight.neutron.spi.NeutronFirewallPolicy;
-import org.opendaylight.yangtools.yang.binding.DataObject;
+
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev141002.policies.attributes.FirewallPolicies;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev141002.policies.attributes.firewall.policies.FirewallPolicy;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev141002.policies.attributes.firewall.policies.FirewallPolicyBuilder;
+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;
@@ -30,36 +35,39 @@ import org.slf4j.LoggerFactory;
 /**
  */
 
-public class NeutronFirewallPolicyInterface extends AbstractNeutronInterface implements INeutronFirewallPolicyCRUD {
+public class NeutronFirewallPolicyInterface extends AbstractNeutronInterface<FirewallPolicy,NeutronFirewallPolicy> implements INeutronFirewallPolicyCRUD {
     private static final Logger LOGGER = LoggerFactory.getLogger(NeutronFirewallPolicyInterface.class);
 
-    private ConcurrentMap<String, NeutronFirewallPolicy> firewallPolicyDB  = new ConcurrentHashMap<String, NeutronFirewallPolicy>();
-
-
     NeutronFirewallPolicyInterface(ProviderContext providerContext) {
         super(providerContext);
     }
 
     @Override
     public boolean neutronFirewallPolicyExists(String uuid) {
-        return firewallPolicyDB.containsKey(uuid);
+        FirewallPolicy policy = readMd(createInstanceIdentifier(toMd(uuid)));
+        if (policy == null) {
+            return false;
+        }
+        return true;
     }
 
     @Override
     public NeutronFirewallPolicy getNeutronFirewallPolicy(String uuid) {
-        if (!neutronFirewallPolicyExists(uuid)) {
-            LOGGER.debug("No Firewall Rule Have Been Defined");
+        FirewallPolicy policy = readMd(createInstanceIdentifier(toMd(uuid)));
+        if (policy == null) {
             return null;
         }
-        return firewallPolicyDB.get(uuid);
+        return fromMd(policy);
     }
 
     @Override
     public List<NeutronFirewallPolicy> getAllNeutronFirewallPolicies() {
         Set<NeutronFirewallPolicy> allFirewallPolicies = new HashSet<NeutronFirewallPolicy>();
-        for (Entry<String, NeutronFirewallPolicy> entry : firewallPolicyDB.entrySet()) {
-            NeutronFirewallPolicy firewallPolicy = entry.getValue();
-            allFirewallPolicies.add(firewallPolicy);
+        FirewallPolicies policies = readMd(createInstanceIdentifier());
+        if (policies != null) {
+            for (FirewallPolicy policy: policies.getFirewallPolicy()) {
+                allFirewallPolicies.add(fromMd(policy));
+            }
         }
         LOGGER.debug("Exiting getFirewallPolicies, Found {} OpenStackFirewallPolicy", allFirewallPolicies.size());
         List<NeutronFirewallPolicy> ans = new ArrayList<NeutronFirewallPolicy>();
@@ -72,7 +80,7 @@ public class NeutronFirewallPolicyInterface extends AbstractNeutronInterface imp
         if (neutronFirewallPolicyExists(input.getID())) {
             return false;
         }
-        firewallPolicyDB.putIfAbsent(input.getID(), input);
+        addMd(input);
         return true;
     }
 
@@ -81,8 +89,7 @@ public class NeutronFirewallPolicyInterface extends AbstractNeutronInterface imp
         if (!neutronFirewallPolicyExists(uuid)) {
             return false;
         }
-        firewallPolicyDB.remove(uuid);
-        return true;
+        return removeMd(toMd(uuid));
     }
 
     @Override
@@ -90,8 +97,8 @@ public class NeutronFirewallPolicyInterface extends AbstractNeutronInterface imp
         if (!neutronFirewallPolicyExists(uuid)) {
             return false;
         }
-        NeutronFirewallPolicy target = firewallPolicyDB.get(uuid);
-        return overwrite(target, delta);
+        updateMd(delta);
+        return true;
     }
 
     @Override
@@ -100,21 +107,83 @@ public class NeutronFirewallPolicyInterface extends AbstractNeutronInterface imp
     }
 
     @Override
-    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
-        // TODO Auto-generated method stub
-        return null;
+    protected InstanceIdentifier<FirewallPolicy> createInstanceIdentifier(FirewallPolicy item) {
+        return InstanceIdentifier.create(Neutron.class)
+                .child(FirewallPolicies.class)
+                .child(FirewallPolicy.class, item.getKey());
+    }
+
+    protected InstanceIdentifier<FirewallPolicies> createInstanceIdentifier() {
+        return InstanceIdentifier.create(Neutron.class)
+                .child(FirewallPolicies.class);
+    }
+
+    protected NeutronFirewallPolicy fromMd(FirewallPolicy policy) {
+        NeutronFirewallPolicy answer = new NeutronFirewallPolicy();
+        if (policy.getUuid() != null) {
+            answer.setID(policy.getUuid().getValue());
+        }
+        if (policy.getName() != null) {
+            answer.setFirewallPolicyName(policy.getName());
+        }
+        if (policy.getTenantId() != null) {
+            answer.setFirewallPolicyTenantID(policy.getTenantId().getValue().replace("-",""));
+        }
+        if (policy.getDescr() != null) {
+            answer.setFirewallPolicyDescription(policy.getDescr());
+        }
+        if (policy.isShared() != null) {
+            answer.setFirewallPolicyIsShared(policy.isShared());
+        }
+        if (policy.isAudited() != null) {
+            answer.setFirewallPolicyIsAudited(policy.isAudited());
+        }
+        if (policy.getFirewallRules() != null) {
+            List<String> rules = new ArrayList<String>();
+            for (Uuid rule: policy.getFirewallRules()) {
+                rules.add(rule.getValue());
+            }
+            answer.setFirewallPolicyRules(rules);
+        }
+        return answer;
     }
 
     @Override
-    protected DataObject toMd(INeutronObject neutronObject) {
-        // TODO Auto-generated method stub
-        return null;
+    protected FirewallPolicy toMd(NeutronFirewallPolicy policy) {
+        FirewallPolicyBuilder policyBuilder = new FirewallPolicyBuilder();
+        if (policy.getID() != null) {
+            policyBuilder.setUuid(toUuid(policy.getID()));
+        }
+        if (policy.getFirewallPolicyName() != null) {
+            policyBuilder.setName(policy.getFirewallPolicyName());
+        }
+        if (policy.getFirewallPolicyTenantID() != null) {
+            policyBuilder.setTenantId(toUuid(policy.getFirewallPolicyTenantID()));
+        }
+        if (policy.getFirewallPolicyDescription() != null) {
+            policyBuilder.setDescr(policy.getFirewallPolicyDescription());
+        }
+        if (policy.getFirewallPolicyIsShared() != null) {
+            policyBuilder.setShared(policy.getFirewallPolicyIsShared());
+        }
+        if (policy.getFirewallPolicyIsAudited() != null) {
+            policyBuilder.setAudited(policy.getFirewallPolicyIsAudited());
+        }
+        if (policy.getFirewallPolicyRules() != null) {
+            List<Uuid> rules = new ArrayList<Uuid>();
+            for (String rule: policy.getFirewallPolicyRules()) {
+                rules.add(toUuid(rule));
+            }
+            policyBuilder.setFirewallRules(rules);
+        }
+        return policyBuilder.build();
     }
 
     @Override
-    protected DataObject toMd(String uuid) {
-        // TODO Auto-generated method stub
-        return null;
+    protected FirewallPolicy toMd(String uuid) {
+        FirewallPolicyBuilder policyBuilder = new FirewallPolicyBuilder();
+        policyBuilder.setUuid(toUuid(uuid));
+        return policyBuilder.build();
     }
 
     public static void registerNewInterface(BundleContext context,
index d70929537edf25971f58a20fabc82d200259b168..4b4df04c75bd3fa04185017758ed8947eeacd8b7 100644 (file)
@@ -13,50 +13,58 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map.Entry;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
 
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.neutron.spi.INeutronFirewallRuleCRUD;
 import org.opendaylight.neutron.spi.INeutronObject;
 import org.opendaylight.neutron.spi.NeutronFirewallRule;
-import org.opendaylight.yangtools.yang.binding.DataObject;
+
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev141002.rules.attributes.FirewallRules;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev141002.rules.attributes.firewall.rules.FirewallRule;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.fwaas.rev141002.rules.attributes.firewall.rules.FirewallRuleBuilder;
+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;
 
-public class NeutronFirewallRuleInterface extends AbstractNeutronInterface implements INeutronFirewallRuleCRUD {
+public class NeutronFirewallRuleInterface extends AbstractNeutronInterface<FirewallRule,NeutronFirewallRule> implements INeutronFirewallRuleCRUD {
     private static final Logger LOGGER = LoggerFactory.getLogger(NeutronFirewallRuleInterface.class);
 
-    private ConcurrentMap<String, NeutronFirewallRule> firewallRuleDB = new ConcurrentHashMap<String, NeutronFirewallRule>();
-
-
     NeutronFirewallRuleInterface(ProviderContext providerContext) {
         super(providerContext);
     }
 
     @Override
     public boolean neutronFirewallRuleExists(String uuid) {
-        return firewallRuleDB.containsKey(uuid);
+        FirewallRule rule = readMd(createInstanceIdentifier(toMd(uuid)));
+        if (rule == null) {
+            return false;
+        }
+        return true;
     }
 
     @Override
     public NeutronFirewallRule getNeutronFirewallRule(String uuid) {
-        if (!neutronFirewallRuleExists(uuid)) {
-            LOGGER.debug("No Firewall Rule Have Been Defined");
+        FirewallRule rule = readMd(createInstanceIdentifier(toMd(uuid)));
+        if (rule == null) {
             return null;
         }
-        return firewallRuleDB.get(uuid);
+        return fromMd(rule);
     }
 
     @Override
     public List<NeutronFirewallRule> getAllNeutronFirewallRules() {
         Set<NeutronFirewallRule> allFirewallRules = new HashSet<NeutronFirewallRule>();
-        for (Entry<String, NeutronFirewallRule> entry : firewallRuleDB.entrySet()) {
-            NeutronFirewallRule firewallRule = entry.getValue();
-            allFirewallRules.add(firewallRule);
+        FirewallRules rules = readMd(createInstanceIdentifier());
+        if (rules != null) {
+            for (FirewallRule rule: rules.getFirewallRule()) {
+                allFirewallRules.add(fromMd(rule));
+            }
         }
         LOGGER.debug("Exiting getFirewallRules, Found {} OpenStackFirewallRule", allFirewallRules.size());
         List<NeutronFirewallRule> ans = new ArrayList<NeutronFirewallRule>();
@@ -69,7 +77,7 @@ public class NeutronFirewallRuleInterface extends AbstractNeutronInterface imple
         if (neutronFirewallRuleExists(input.getID())) {
             return false;
         }
-        firewallRuleDB.putIfAbsent(input.getID(), input);
+        addMd(input);
         return true;
     }
 
@@ -78,8 +86,7 @@ public class NeutronFirewallRuleInterface extends AbstractNeutronInterface imple
         if (!neutronFirewallRuleExists(uuid)) {
             return false;
         }
-        firewallRuleDB.remove(uuid);
-        return true;
+        return removeMd(toMd(uuid));
     }
 
     @Override
@@ -87,8 +94,8 @@ public class NeutronFirewallRuleInterface extends AbstractNeutronInterface imple
         if (!neutronFirewallRuleExists(uuid)) {
             return false;
         }
-        NeutronFirewallRule target = firewallRuleDB.get(uuid);
-        return overwrite(target, delta);
+        updateMd(delta);
+        return true;
     }
 
     @Override
@@ -97,21 +104,131 @@ public class NeutronFirewallRuleInterface extends AbstractNeutronInterface imple
     }
 
     @Override
-    protected InstanceIdentifier createInstanceIdentifier(DataObject item) {
-        // TODO Auto-generated method stub
-        return null;
+    protected InstanceIdentifier<FirewallRule> createInstanceIdentifier(FirewallRule item) {
+        return InstanceIdentifier.create(Neutron.class)
+                .child(FirewallRules.class)
+                .child(FirewallRule.class, item.getKey());
+    }
+
+    protected InstanceIdentifier<FirewallRules> createInstanceIdentifier() {
+        return InstanceIdentifier.create(Neutron.class)
+                .child(FirewallRules.class);
+    }
+
+    protected NeutronFirewallRule fromMd(FirewallRule rule) {
+        NeutronFirewallRule answer = new NeutronFirewallRule();
+        if (rule.getUuid() != null) {
+            answer.setID(rule.getUuid().getValue());
+        }
+        if (rule.getName() != null) {
+            answer.setFirewallRuleName(rule.getName());
+        }
+        if (rule.getTenantId() != null) {
+            answer.setFirewallRuleTenantID(rule.getTenantId().getValue().replace("-",""));
+        }
+        if (rule.getDescr() != null) {
+            answer.setFirewallRuleDescription(rule.getDescr());
+        }
+        if (rule.getStatus() != null) {
+            answer.setFirewallRuleStatus(rule.getStatus());
+        }
+        if (rule.isShared() != null) {
+            answer.setFirewallRuleIsShared(rule.isShared());
+        }
+        if (rule.isEnabled() != null) {
+            answer.setFirewallRuleIsEnabled(rule.isEnabled());
+        }
+        if (rule.getFirewallPolicyId() != null) {
+            answer.setFirewallRulePolicyID(rule.getFirewallPolicyId().getValue());
+        }
+        if (rule.getProtocol() != null) {
+            answer.setFirewallRuleProtocol(rule.getProtocol());
+        }
+        if (rule.getIpVersion() != null) {
+            answer.setFirewallRuleIpVer(rule.getIpVersion().intValue());
+        }
+        if (rule.getSourceIpAddr() != null) {
+            answer.setFirewallRuleSrcIpAddr(String.valueOf(rule.getSourceIpAddr().getValue()));
+        }
+        if (rule.getDestinationIpAddr() != null) {
+            answer.setFirewallRuleDstIpAddr(String.valueOf(rule.getDestinationIpAddr().getValue()));
+        }
+        if (rule.getSourcePort() != null) {
+            answer.setFirewallRuleSrcPort(rule.getSourcePort().intValue());
+        }
+        if (rule.getDestinationPort() != null) {
+            answer.setFirewallRuleDstPort(rule.getDestinationPort().intValue());
+        }
+        if (rule.getPosition() != null) {
+            answer.setFirewallRulePosition(rule.getPosition().intValue());
+        }
+        if (rule.getAction() != null) {
+            answer.setFirewallRuleAction(rule.getAction());
+        }
+        return answer;
     }
 
     @Override
-    protected DataObject toMd(INeutronObject neutronObject) {
-        // TODO Auto-generated method stub
-        return null;
+    protected FirewallRule toMd(NeutronFirewallRule rule) {
+        FirewallRuleBuilder ruleBuilder = new FirewallRuleBuilder();
+        if (rule.getID() != null) {
+            ruleBuilder.setUuid(toUuid(rule.getID()));
+        }
+        if (rule.getFirewallRuleName() != null) {
+            ruleBuilder.setName(rule.getFirewallRuleName());
+        }
+        if (rule.getFirewallRuleTenantID() != null) {
+            ruleBuilder.setTenantId(toUuid(rule.getFirewallRuleTenantID()));
+        }
+        if (rule.getFirewallRuleDescription() != null) {
+            ruleBuilder.setDescr(rule.getFirewallRuleDescription());
+        }
+        if (rule.getFirewallRuleStatus() != null) {
+            ruleBuilder.setStatus(rule.getFirewallRuleStatus());
+        }
+        if (rule.getFirewallRuleIsShared() != null) {
+            ruleBuilder.setShared(rule.getFirewallRuleIsShared());
+        }
+        if (rule.getFirewallRuleIsEnabled() != null) {
+            ruleBuilder.setEnabled(rule.getFirewallRuleIsEnabled());
+        }
+        if (rule.getFirewallRulePolicyID() != null) {
+            ruleBuilder.setFirewallPolicyId(toUuid(rule.getFirewallRulePolicyID()));
+        }
+        if (rule.getFirewallRuleProtocol() != null) {
+            ruleBuilder.setProtocol(rule.getFirewallRuleProtocol());
+        }
+        if (rule.getFirewallRuleIpVer() != null) {
+            ruleBuilder.setIpVersion(rule.getFirewallRuleIpVer().shortValue());
+        }
+        if (rule.getFirewallRuleSrcIpAddr() != null) {
+            IpAddress ipAddress = new IpAddress(rule.getFirewallRuleSrcIpAddr().toCharArray());
+            ruleBuilder.setSourceIpAddr(ipAddress);
+        }
+        if (rule.getFirewallRuleDstIpAddr() != null) {
+            IpAddress ipAddress = new IpAddress(rule.getFirewallRuleDstIpAddr().toCharArray());
+            ruleBuilder.setDestinationIpAddr(ipAddress);
+        }
+        if (rule.getFirewallRuleSrcPort() != null) {
+            ruleBuilder.setSourcePort(rule.getFirewallRuleSrcPort().shortValue());
+        }
+        if (rule.getFirewallRuleDstPort() != null) {
+            ruleBuilder.setDestinationPort(rule.getFirewallRuleDstPort().shortValue());
+        }
+        if (rule.getFirewallRulePosition() != null) {
+            ruleBuilder.setPosition(rule.getFirewallRulePosition().shortValue());
+        }
+        if (rule.getFirewallRuleAction() != null) {
+            ruleBuilder.setAction(rule.getFirewallRuleAction());
+        }
+        return ruleBuilder.build();
     }
 
     @Override
-    protected DataObject toMd(String uuid) {
-        // TODO Auto-generated method stub
-        return null;
+    protected FirewallRule toMd(String uuid) {
+        FirewallRuleBuilder ruleBuilder = new FirewallRuleBuilder();
+        ruleBuilder.setUuid(toUuid(uuid));
+        return ruleBuilder.build();
     }
 
     public static void registerNewInterface(BundleContext context,