import java.util.Set;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
-import org.opendaylight.lispflowmapping.implementation.LispMappingService;
-import org.opendaylight.lispflowmapping.implementation.util.MapServerMapResolverUtil;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.MapRegister;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mapping.database.rev150314.MappingDatabase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mapping.database.rev150314.db.instance.Mapping;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mapping.database.rev150314.mapping.database.InstanceId;
+import org.opendaylight.lispflowmapping.implementation.util.MSNotificationInputUtil;
+import org.opendaylight.lispflowmapping.interfaces.mapcache.IMappingSystem;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eidtolocatorrecords.EidToLocatorRecordBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingChange;
+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.Mapping;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.database.InstanceId;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
* DataListener for all Mapping modification events.
*
* @author Lorand Jakab
+ * @author Florin Coras
*
*/
public class MappingDataListener extends AbstractDataListener {
private static final Logger LOG = LoggerFactory.getLogger(MappingDataListener.class);
- private LispMappingService msmr;
+ private IMappingSystem mapSystem;
+ private NotificationPublishService notificationPublishService;
- public MappingDataListener(DataBroker broker, LispMappingService msmr) {
+ public MappingDataListener(DataBroker broker, IMappingSystem msmr, NotificationPublishService nps) {
setBroker(broker);
- setMsmr(msmr);
+ setMappingSystem(msmr);
+ setNotificationProviderService(nps);
setPath(InstanceIdentifier.create(MappingDatabase.class).child(InstanceId.class)
.child(Mapping.class));
LOG.trace("Registering Mapping listener.");
registerDataChangeListener();
}
+ public void setNotificationProviderService(NotificationPublishService nps) {
+ this.notificationPublishService = nps;
+ }
+
@Override
public void onDataChanged(
AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
LOG.trace("Key: {}", entry.getKey());
LOG.trace("Value: {}", mapping);
- MapRegister register = MapServerMapResolverUtil.getMapRegister(mapping);
- msmr.handleMapRegister(register, false);
+ mapSystem.addMapping(mapping.getOrigin(), mapping.getLispAddressContainer(),
+ new EidToLocatorRecordBuilder(mapping).build());
}
}
LOG.trace("Key: {}", entry.getKey());
LOG.trace("Value: {}", entry.getValue());
- MapRegister register = MapServerMapResolverUtil.getMapRegister(mapping);
- msmr.handleMapRegister(register, false);
+ mapSystem.addMapping(mapping.getOrigin(), mapping.getLispAddressContainer(),
+ new EidToLocatorRecordBuilder(mapping).build());
+ try {
+ notificationPublishService.putNotification(MSNotificationInputUtil.toMappingChanged(mapping, MappingChange.Updated));
+ } catch (InterruptedException e) {
+ LOG.warn("Notification publication interrupted!");
+ }
}
}
LOG.trace("Key: {}", entry);
LOG.trace("Value: {}", dataObject);
- msmr.removeMapping(mapping.getLispAddressContainer(), mapping.getMaskLength());
+ mapSystem.removeMapping(mapping.getOrigin(), mapping.getLispAddressContainer());
+ try {
+ notificationPublishService.putNotification(MSNotificationInputUtil.toMappingChanged(mapping, MappingChange.Removed));
+ } catch (InterruptedException e) {
+ LOG.warn("Notification publication interrupted!");
+ }
}
}
}
- void setMsmr(LispMappingService msmr) {
- this.msmr = msmr;
+ void setMappingSystem(IMappingSystem msmr) {
+ this.mapSystem = msmr;
}
}