X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-binding-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fbinding%2Fimpl%2FAbstractForwardedDataBroker.java;h=82cbf087c862b6a6800117338d86bdc8dfd86acd;hp=d4b1d84aa77c5d648291dba26025bad8511618a8;hb=da676b1719581aa69348c97196715b6b922daa5b;hpb=1d639169d7afd590f4f756242031768e97d95b61 diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractForwardedDataBroker.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractForwardedDataBroker.java index d4b1d84aa7..82cbf087c8 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractForwardedDataBroker.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractForwardedDataBroker.java @@ -7,26 +7,23 @@ */ package org.opendaylight.controller.md.sal.binding.impl; -import com.google.common.base.Objects; +import com.google.common.base.MoreObjects; import com.google.common.base.Optional; - import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; import java.util.Set; - +import org.opendaylight.controller.md.sal.binding.api.ClusteredDataChangeListener; import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.dom.api.ClusteredDOMDataChangeListener; import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker; import org.opendaylight.controller.md.sal.dom.api.DOMDataChangeListener; -import org.opendaylight.controller.sal.binding.impl.connect.dom.BindingIndependentConnector; -import org.opendaylight.controller.sal.binding.impl.forward.DomForwardedBroker; -import org.opendaylight.controller.sal.core.api.Broker.ProviderSession; -import org.opendaylight.controller.sal.core.api.model.SchemaService; +import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.yangtools.concepts.AbstractListenerRegistration; import org.opendaylight.yangtools.concepts.Delegator; import org.opendaylight.yangtools.concepts.ListenerRegistration; @@ -35,28 +32,26 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public abstract class AbstractForwardedDataBroker implements Delegator, DomForwardedBroker, - SchemaContextListener, AutoCloseable { +public abstract class AbstractForwardedDataBroker implements Delegator, AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(AbstractForwardedDataBroker.class); // The Broker to whom we do all forwarding private final DOMDataBroker domDataBroker; private final BindingToNormalizedNodeCodec codec; - private BindingIndependentConnector connector; - private ProviderSession context; - private final ListenerRegistration schemaListenerRegistration; protected AbstractForwardedDataBroker(final DOMDataBroker domDataBroker, final BindingToNormalizedNodeCodec codec, - final SchemaService schemaService) { + final DOMSchemaService schemaService) { + this.domDataBroker = domDataBroker; + this.codec = codec; + } + + protected AbstractForwardedDataBroker(final DOMDataBroker domDataBroker, final BindingToNormalizedNodeCodec codec) { this.domDataBroker = domDataBroker; this.codec = codec; - this.schemaListenerRegistration = schemaService.registerSchemaContextListener(this); } protected BindingToNormalizedNodeCodec getCodec() { @@ -68,33 +63,34 @@ public abstract class AbstractForwardedDataBroker implements Delegator registerDataChangeListener(final LogicalDatastoreType store, final InstanceIdentifier path, final DataChangeListener listener, final DataChangeScope triggeringScope) { - DOMDataChangeListener domDataChangeListener = new TranslatingDataChangeInvoker(store, path, listener, + final DOMDataChangeListener domDataChangeListener; + + if(listener instanceof ClusteredDataChangeListener) { + domDataChangeListener = new TranslatingClusteredDataChangeInvoker(store, path, listener, triggeringScope); + } else { + domDataChangeListener = new TranslatingDataChangeInvoker(store, path, listener, triggeringScope); - YangInstanceIdentifier domPath = codec.toNormalized(path); - ListenerRegistration domRegistration = domDataBroker.registerDataChangeListener(store, + } + final YangInstanceIdentifier domPath = codec.toYangInstanceIdentifierBlocking(path); + final ListenerRegistration domRegistration = domDataBroker.registerDataChangeListener(store, domPath, domDataChangeListener, triggeringScope); return new ListenerRegistrationImpl(listener, domRegistration); } protected Map, DataObject> toBinding(final InstanceIdentifier path, final Map> normalized) { - Map, DataObject> newMap = new HashMap<>(); + final Map, DataObject> newMap = new HashMap<>(); - for (Map.Entry> entry : normalized.entrySet()) { + for (final Map.Entry> entry : normalized.entrySet()) { try { - Optional, DataObject>> potential = getCodec().toBinding(entry); + final Optional, DataObject>> potential = getCodec().toBinding(entry); if (potential.isPresent()) { - Entry, DataObject> binding = potential.get(); + final Entry, DataObject> binding = potential.get(); newMap.put(binding.getKey(), binding.getValue()); } - } catch (DeserializationException e) { + } catch (final DeserializationException e) { LOG.warn("Failed to transform {}, omitting it", entry, e); } } @@ -103,17 +99,17 @@ public abstract class AbstractForwardedDataBroker implements Delegator> toBinding(final InstanceIdentifier path, final Set normalized) { - Set> hashSet = new HashSet<>(); - for (YangInstanceIdentifier normalizedPath : normalized) { + final Set> hashSet = new HashSet<>(); + for (final YangInstanceIdentifier normalizedPath : normalized) { try { - Optional> potential = getCodec().toBinding(normalizedPath); + final Optional> potential = getCodec().toBinding(normalizedPath); if (potential.isPresent()) { - InstanceIdentifier binding = potential.get(); + final InstanceIdentifier binding = potential.get(); hashSet.add(binding); } else if (normalizedPath.getLastPathArgument() instanceof YangInstanceIdentifier.AugmentationIdentifier) { hashSet.add(path); } - } catch (DeserializationException e) { + } catch (final DeserializationException e) { LOG.warn("Failed to transform {}, omitting it", normalizedPath, e); } } @@ -124,7 +120,7 @@ public abstract class AbstractForwardedDataBroker implements Delegator> of(data)); + return (Optional) getCodec().deserializeFunction(path).apply(Optional.> of(data)); } private class TranslatingDataChangeInvoker implements DOMDataChangeListener { @@ -152,6 +148,20 @@ public abstract class AbstractForwardedDataBroker implements Delegator path, + final DataChangeListener bindingDataChangeListener, + final DataChangeScope triggeringScope) { + super(store, path, bindingDataChangeListener, triggeringScope); + } + } + private class TranslatedDataChangeEvent implements AsyncDataChangeEvent, DataObject> { private final AsyncDataChangeEvent> domEvent; private final InstanceIdentifier path; @@ -230,7 +240,7 @@ public abstract class AbstractForwardedDataBroker implements Delegator