X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-binding-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fbinding%2Fimpl%2FAbstractForwardedDataBroker.java;h=e632e6336aaf959808a28f9ecc209432c504b4eb;hb=1d202c481a5e6cf1d8a029ae17b5e417cb4b72cd;hp=f843b23f9b2cc9d15a55c2d9a4373cde3baffecc;hpb=eb2bd48a9148a4fbeae292ffd03e30083c2ff024;p=controller.git 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 f843b23f9b..e632e6336a 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 @@ -9,6 +9,7 @@ package org.opendaylight.controller.md.sal.binding.impl; import com.google.common.base.Objects; import com.google.common.base.Optional; + import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -18,6 +19,7 @@ import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; + 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; @@ -35,28 +37,33 @@ import org.opendaylight.yangtools.yang.binding.DataObject; 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.BindingIndependentMappingService; 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, DomForwardedBroker, SchemaContextListener, AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(AbstractForwardedDataBroker.class); // The Broker to whom we do all forwarding private final DOMDataBroker domDataBroker; + // Mapper to convert from Binding Independent objects to Binding Aware + // objects + private final BindingIndependentMappingService mappingService; + 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) { + protected AbstractForwardedDataBroker(final DOMDataBroker domDataBroker, + final BindingIndependentMappingService mappingService,final SchemaService schemaService) { this.domDataBroker = domDataBroker; - this.codec = codec; + this.mappingService = mappingService; + this.codec = new BindingToNormalizedNodeCodec(mappingService); this.schemaListenerRegistration = schemaService.registerSchemaContextListener(this); } @@ -64,6 +71,10 @@ public abstract class AbstractForwardedDataBroker implements Delegator registerDataChangeListener(final LogicalDatastoreType store, - final InstanceIdentifier path, final DataChangeListener listener, final DataChangeScope triggeringScope) { + final InstanceIdentifier path, final DataChangeListener listener, + final DataChangeScope triggeringScope) { DOMDataChangeListener domDataChangeListener = new TranslatingDataChangeInvoker(store, path, listener, triggeringScope); YangInstanceIdentifier domPath = codec.toNormalized(path); @@ -84,16 +96,23 @@ public abstract class AbstractForwardedDataBroker implements Delegator, DataObject> toBinding(final InstanceIdentifier path, + protected Map, DataObject> toBinding( + InstanceIdentifier path, final Map> normalized) { Map, DataObject> newMap = new HashMap<>(); for (Map.Entry> entry : sortedEntries(normalized)) { try { - Optional, DataObject>> potential = getCodec().toBinding(entry); + Optional, DataObject>> potential = getCodec().toBinding( + entry); if (potential.isPresent()) { Entry, DataObject> binding = potential.get(); newMap.put(binding.getKey(), binding.getValue()); + } else if (entry.getKey().getLastPathArgument() instanceof YangInstanceIdentifier.AugmentationIdentifier) { + DataObject bindingDataObject = getCodec().toBinding(path, entry.getValue()); + if (bindingDataObject != null) { + newMap.put(path, bindingDataObject); + } } } catch (DeserializationException e) { LOG.warn("Failed to transform {}, omitting it", entry, e); @@ -104,7 +123,8 @@ public abstract class AbstractForwardedDataBroker implements Delegator> MAP_ENTRY_COMPARATOR = new Comparator>() { @Override - public int compare(final Entry left, final Entry right) { + public int compare(final Entry left, + final Entry right) { final Iterator li = left.getKey().getPathArguments().iterator(); final Iterator ri = right.getKey().getPathArguments().iterator(); @@ -124,7 +144,7 @@ public abstract class AbstractForwardedDataBroker implements Delegator Iterable> sortedEntries(final Map map) { + private static Iterable> sortedEntries(final Map map) { if (!map.isEmpty()) { ArrayList> entries = new ArrayList<>(map.entrySet()); Collections.sort(entries, MAP_ENTRY_COMPARATOR); @@ -134,7 +154,7 @@ public abstract class AbstractForwardedDataBroker implements Delegator> toBinding(final InstanceIdentifier path, + protected Set> toBinding(InstanceIdentifier path, final Set normalized) { Set> hashSet = new HashSet<>(); for (YangInstanceIdentifier normalizedPath : normalized) { @@ -157,7 +177,12 @@ public abstract class AbstractForwardedDataBroker implements Delegator> of(data)); + + try { + return Optional.fromNullable(getCodec().toBinding(path, data)); + } catch (DeserializationException e) { + return Optional.absent(); + } } private class TranslatingDataChangeInvoker implements DOMDataChangeListener { @@ -175,7 +200,8 @@ public abstract class AbstractForwardedDataBroker implements Delegator> change) { + public void onDataChanged( + final AsyncDataChangeEvent> change) { bindingDataChangeListener.onDataChanged(new TranslatedDataChangeEvent(change, path)); } } @@ -235,7 +261,7 @@ public abstract class AbstractForwardedDataBroker implements Delegator