X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatabroker%2FAbstractDOMBroker.java;h=68191fbbc2827d182cf4fc53c5bf77cfb8c64f42;hp=833cb4946230f559a11bacea5bea7da99aa11180;hb=42cb7afbbbec9d0badb8da7c7d3bbca9b64dfa3a;hpb=1447e0132075bbd3013aa41b98384a373bd82d1a diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBroker.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBroker.java index 833cb49462..68191fbbc2 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBroker.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/databroker/AbstractDOMBroker.java @@ -9,8 +9,9 @@ package org.opendaylight.controller.cluster.databroker; import static com.google.common.base.Preconditions.checkState; + import com.google.common.collect.ImmutableMap; -import java.util.Collections; +import com.google.common.collect.ImmutableMap.Builder; import java.util.EnumMap; import java.util.Map; import java.util.concurrent.atomic.AtomicLong; @@ -21,18 +22,21 @@ import org.opendaylight.controller.md.sal.dom.api.DOMDataBrokerExtension; import org.opendaylight.controller.md.sal.dom.api.DOMDataChangeListener; import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeListener; import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeChangeService; +import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeCommitCohortRegistry; import org.opendaylight.controller.md.sal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.controller.md.sal.dom.api.DOMTransactionChain; import org.opendaylight.controller.sal.core.spi.data.DOMStore; import org.opendaylight.controller.sal.core.spi.data.DOMStoreTransactionChain; import org.opendaylight.controller.sal.core.spi.data.DOMStoreTreeChangePublisher; +import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohort; +import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistration; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public abstract class AbstractDOMBroker extends AbstractDOMTransactionFactory - implements DOMDataBroker, AutoCloseable { +abstract class AbstractDOMBroker extends AbstractDOMTransactionFactory + implements DOMDataBroker { private static final Logger LOG = LoggerFactory.getLogger(AbstractDOMBroker.class); @@ -44,34 +48,66 @@ public abstract class AbstractDOMBroker extends AbstractDOMTransactionFactory datastores) { super(datastores); - boolean treeChange = true; - for (DOMStore ds : datastores.values()) { - if (!(ds instanceof DOMStoreTreeChangePublisher)) { - treeChange = false; - break; - } + Builder, DOMDataBrokerExtension> extBuilder = ImmutableMap.builder(); + if (isSupported(datastores, DOMStoreTreeChangePublisher.class)) { + extBuilder.put(DOMDataTreeChangeService.class, new DOMDataTreeChangeService() { + @Override + public ListenerRegistration registerDataTreeChangeListener( + final DOMDataTreeIdentifier treeId, final L listener) { + DOMStore store = getTxFactories().get(treeId.getDatastoreType()); + checkState(store != null, "Requested logical data store is not available."); + + return ((DOMStoreTreeChangePublisher) store).registerTreeChangeListener( + treeId.getRootIdentifier(), listener); + } + }); } - if (treeChange) { - extensions = ImmutableMap., DOMDataBrokerExtension>of(DOMDataTreeChangeService.class, new DOMDataTreeChangeService() { + if (isSupported(datastores, org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistry.class)) { + extBuilder.put(DOMDataTreeCommitCohortRegistry.class, new DOMDataTreeCommitCohortRegistry() { @Override - public ListenerRegistration registerDataTreeChangeListener(final DOMDataTreeIdentifier treeId, final L listener) { - DOMStore publisher = getTxFactories().get(treeId.getDatastoreType()); - checkState(publisher != null, "Requested logical data store is not available."); + public DOMDataTreeCommitCohortRegistration registerCommitCohort( + org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier path, T cohort) { + DOMStore store = getTxFactories().get(toLegacy(path.getDatastoreType())); + checkState(store != null, "Requested logical data store is not available."); - return ((DOMStoreTreeChangePublisher) publisher).registerTreeChangeListener(treeId.getRootIdentifier(), listener); + return ((org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistry) store) + .registerCommitCohort(path, cohort); } }); - } else { - extensions = Collections.emptyMap(); + } + + extensions = extBuilder.build(); + } + + private static LogicalDatastoreType toLegacy(org.opendaylight.mdsal.common.api.LogicalDatastoreType datastoreType) { + switch (datastoreType) { + case CONFIGURATION: + return LogicalDatastoreType.CONFIGURATION; + case OPERATIONAL: + return LogicalDatastoreType.OPERATIONAL; + default: + throw new IllegalArgumentException("Unsupported data store type: " + datastoreType); } } + private static boolean isSupported(Map datastores, + Class expDOMStoreInterface) { + for (DOMStore ds : datastores.values()) { + if (!expDOMStoreInterface.isAssignableFrom(ds.getClass())) { + return false; + } + } + + return true; + } + public void setCloseable(final AutoCloseable closeable) { this.closeable = closeable; } @Override + @SuppressWarnings("checkstyle:IllegalCatch") public void close() { super.close(); @@ -91,8 +127,8 @@ public abstract class AbstractDOMBroker extends AbstractDOMTransactionFactory registerDataChangeListener(final LogicalDatastoreType store, - final YangInstanceIdentifier path, final DOMDataChangeListener listener, final DataChangeScope triggeringScope) { - + final YangInstanceIdentifier path, final DOMDataChangeListener listener, + final DataChangeScope triggeringScope) { DOMStore potentialStore = getTxFactories().get(store); checkState(potentialStore != null, "Requested logical data store is not available."); return potentialStore.registerChangeListener(path, listener, triggeringScope); @@ -107,7 +143,8 @@ public abstract class AbstractDOMBroker extends AbstractDOMTransactionFactory backingChains = new EnumMap<>(LogicalDatastoreType.class); + final Map backingChains = + new EnumMap<>(LogicalDatastoreType.class); for (Map.Entry entry : getTxFactories().entrySet()) { backingChains.put(entry.getKey(), entry.getValue().createTransactionChain()); }