Bump upstreams
[lispflowmapping.git] / mappingservice / implementation / src / main / java / org / opendaylight / lispflowmapping / implementation / mdsal / AuthenticationKeyDataListener.java
index 0fe2dac64632e18eab43695fc72057e660253d1e..941d001d8a03f5f07fda3d7799e354a3c74925c9 100644 (file)
@@ -7,16 +7,18 @@
  */
 package org.opendaylight.lispflowmapping.implementation.mdsal;
 
-import java.util.Map;
-import java.util.Set;
-
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
-import org.opendaylight.lispflowmapping.implementation.LispMappingService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150820.MappingDatabase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150820.db.instance.AuthenticationKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150820.mapping.database.InstanceId;
-import org.opendaylight.yangtools.yang.binding.DataObject;
+import java.util.List;
+import org.opendaylight.lispflowmapping.interfaces.mapcache.IMappingSystem;
+import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.DataObjectModification;
+import org.opendaylight.mdsal.binding.api.DataObjectModification.ModificationType;
+import org.opendaylight.mdsal.binding.api.DataTreeModification;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingDatabase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.db.instance.AuthenticationKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.db.instance.AuthenticationKeyBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.database.VirtualNetworkIdentifier;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -27,68 +29,67 @@ import org.slf4j.LoggerFactory;
  * @author Lorand Jakab
  *
  */
-public class AuthenticationKeyDataListener extends AbstractDataListener {
+public class AuthenticationKeyDataListener extends AbstractDataListener<AuthenticationKey> {
     private static final Logger LOG = LoggerFactory.getLogger(AuthenticationKeyDataListener.class);
-    private LispMappingService msmr;
+    private IMappingSystem mapSystem;
 
-    public AuthenticationKeyDataListener(DataBroker broker, LispMappingService msmr) {
+    public AuthenticationKeyDataListener(DataBroker broker, IMappingSystem mapSystem) {
         setBroker(broker);
-        setMsmr(msmr);
-        setPath(InstanceIdentifier.create(MappingDatabase.class).child(InstanceId.class)
+        setMappingSystem(mapSystem);
+        setPath(InstanceIdentifier.create(MappingDatabase.class).child(VirtualNetworkIdentifier.class)
                 .child(AuthenticationKey.class));
         LOG.trace("Registering AuthenticationKey listener.");
         registerDataChangeListener();
     }
 
     @Override
-    public void onDataChanged(
-            AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
+    public void onDataTreeChanged(List<DataTreeModification<AuthenticationKey>> changes) {
+        for (DataTreeModification<AuthenticationKey> change : changes) {
+            final DataObjectModification<AuthenticationKey> mod = change.getRootNode();
 
-        // Process newly created authentication keys
-        Map<InstanceIdentifier<?>, DataObject> createdData = change.getCreatedData();
-        for (Map.Entry<InstanceIdentifier<?>, DataObject> entry : createdData.entrySet()) {
-            if (entry.getValue() instanceof AuthenticationKey) {
-                AuthenticationKey authkey = (AuthenticationKey)entry.getValue();
+            if (ModificationType.DELETE == mod.modificationType()) {
+                final AuthenticationKey authKey = mod.dataBefore();
 
-                LOG.trace("Received created data");
-                LOG.trace("Key: {}", entry.getKey());
-                LOG.trace("Value: {}", authkey);
+                LOG.trace("Received deleted data");
+                LOG.trace("Key: {}", change.getRootPath().path());
+                LOG.trace("Value: {}", authKey);
 
-                msmr.addAuthenticationKey(authkey.getLispAddressContainer(), authkey.getAuthkey());
-            }
-        }
+                final AuthenticationKey convertedAuthKey = convertToBinaryIfNecessary(authKey);
+
+                mapSystem.removeAuthenticationKey(convertedAuthKey.getEid());
+            } else if (ModificationType.WRITE == mod.modificationType()
+                    || ModificationType.SUBTREE_MODIFIED == mod.modificationType()) {
+                if (ModificationType.WRITE == mod.modificationType()) {
+                    LOG.trace("Received created data");
+                } else {
+                    LOG.trace("Received updated data");
+                }
+                // Process newly created or updated authentication keys
+                final AuthenticationKey authKey = mod.dataAfter();
 
-        // Process updated authentication keys
-        Map<InstanceIdentifier<?>, DataObject> updatedData = change.getUpdatedData();
-        for (Map.Entry<InstanceIdentifier<?>, DataObject> entry : updatedData.entrySet()) {
-            if (entry.getValue() instanceof AuthenticationKey) {
-                AuthenticationKey authkey = (AuthenticationKey)entry.getValue();
+                LOG.trace("Key: {}", change.getRootPath().path());
+                LOG.trace("Value: {}", authKey);
 
-                LOG.trace("Received changed data");
-                LOG.trace("Key: {}", entry.getKey());
-                LOG.trace("Value: {}", authkey);
+                final AuthenticationKey convertedAuthKey = convertToBinaryIfNecessary(authKey);
 
-                msmr.addAuthenticationKey(authkey.getLispAddressContainer(), authkey.getAuthkey());
+                mapSystem.addAuthenticationKey(convertedAuthKey.getEid(), convertedAuthKey.getMappingAuthkey());
+            } else {
+                LOG.warn("Ignoring unhandled modification type {}", mod.modificationType());
             }
         }
+    }
 
-        // Process deleted authentication keys
-        Set<InstanceIdentifier<?>> removedData = change.getRemovedPaths();
-        for (InstanceIdentifier<?> entry : removedData) {
-            DataObject dataObject = change.getOriginalData().get(entry);
-            if (dataObject instanceof AuthenticationKey) {
-                AuthenticationKey authkey = (AuthenticationKey)dataObject;
-
-                LOG.trace("Received deleted data");
-                LOG.trace("Key: {}", entry);
-                LOG.trace("Value: {}", authkey);
-
-                msmr.removeAuthenticationKey(authkey.getLispAddressContainer());
-            }
+    private static AuthenticationKey convertToBinaryIfNecessary(AuthenticationKey authKey) {
+        Eid originalEid = authKey.getEid();
+        if (LispAddressUtil.addressNeedsConversionToBinary(originalEid.getAddress())) {
+            AuthenticationKeyBuilder akb = new AuthenticationKeyBuilder(authKey);
+            akb.setEid(LispAddressUtil.convertToBinary(originalEid));
+            return akb.build();
         }
+        return authKey;
     }
 
-    void setMsmr(LispMappingService msmr) {
-        this.msmr = msmr;
+    void setMappingSystem(IMappingSystem msmr) {
+        mapSystem = msmr;
     }
 }