Rename DOMDataBrokerExtension to DOMDataBroker.Extension 98/109198/3
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 7 Dec 2023 11:55:48 +0000 (12:55 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 7 Dec 2023 14:39:21 +0000 (15:39 +0100)
Move the extension marker to its base service.

JIRA: MDSAL-841
Change-Id: I39efe057322b2bed8a2704c0666ce16d1c457d38
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataBroker.java
dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataBrokerExtension.java [deleted file]
dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataTreeChangeService.java
dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataTreeCommitCohortRegistry.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/AbstractDOMDataBroker.java
dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/ForwardingDOMDataBroker.java
dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/ForwardingDOMDataBrokerTest.java
trace/mdsal-trace-impl/src/main/java/org/opendaylight/mdsal/trace/impl/TracingBroker.java

index 1f7666bae9e766095e6a8b0d767c665333ac6030..edfc8bfdb2c80cc38398ff43b07e25ec79fdcaab 100644 (file)
@@ -41,7 +41,14 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
  * <b>Implementation Note:</b> This interface is not intended to be implemented by users of MD-SAL,
  * but only to be consumed by them.
  */
-public interface DOMDataBroker extends DOMService<DOMDataBroker, DOMDataBrokerExtension>, DOMTransactionFactory {
+public interface DOMDataBroker extends DOMService<DOMDataBroker, DOMDataBroker.Extension>, DOMTransactionFactory {
+    /**
+     * Type capture of a {@link DOMService.Extension} applicable to {@link DOMDataBroker} implementations.
+     */
+    interface Extension extends DOMService.Extension<DOMDataBroker, Extension> {
+        // Marker interface
+    }
+
     /**
      * Create a new transaction chain. The chain will be initialized to read from its backing datastore, with
      * no outstanding transaction. Listener will be registered to handle chain-level events.
diff --git a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataBrokerExtension.java b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataBrokerExtension.java
deleted file mode 100644 (file)
index 691597e..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.mdsal.dom.api;
-
-/**
- * Type capture of a {@link DOMService.Extension} applicable to {@link DOMDataBroker} implementations.
- */
-public interface DOMDataBrokerExtension extends DOMService.Extension<DOMDataBroker, DOMDataBrokerExtension> {
-    // Marker interface
-}
index c805f273d758ec2b0dfffa415f1a83e28d74239a..c43994156a310f990628293ef8c753586d08bdba 100644 (file)
@@ -11,9 +11,9 @@ import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 
 /**
- * A {@link DOMDataBrokerExtension} which allows users to register for changes to a subtree.
+ * A {@link DOMDataBroker.Extension} which allows users to register for changes to a subtree.
  */
-public interface DOMDataTreeChangeService extends DOMDataBrokerExtension {
+public interface DOMDataTreeChangeService extends DOMDataBroker.Extension {
     /**
      * Registers a {@link DOMDataTreeChangeListener} to receive notifications when data changes under a given path in
      * the conceptual data tree.
index 402376a561bdf43d79d750e49d154cab01854af3..8323215cbde86e65343d6c0f17fd10f1d9427da2 100644 (file)
@@ -5,18 +5,12 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.mdsal.dom.api;
 
 /**
- * Commit Cohort registry for {@link DOMDataTreeWriteTransaction}.
- * See {@link DOMDataTreeCommitCohort} for more details.
- *
- * @author Tony Tkacik &lt;ttkacik@cisco.com&gt;
- *
+ * Commit Cohort registry for {@link DOMDataTreeWriteTransaction}. See {@link DOMDataTreeCommitCohort} for more details.
  */
-public interface DOMDataTreeCommitCohortRegistry extends DOMDataBrokerExtension {
-
+public interface DOMDataTreeCommitCohortRegistry extends DOMDataBroker.Extension {
     /**
      * Register commit cohort which will participate in three-phase commit protocols of
      * {@link DOMDataTreeWriteTransaction}in data broker associated with this instance of extension.
index 412fad0906dc88da4e90fb07b6c5da3d0ba775ee..ef03d9cec77e87e61cdf0b1effc8b5bcf2f62ea5 100644 (file)
@@ -7,16 +7,12 @@
  */
 package org.opendaylight.mdsal.dom.broker;
 
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ClassToInstanceMap;
-import com.google.common.collect.ImmutableClassToInstanceMap;
-import java.util.Collection;
 import java.util.EnumMap;
+import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.concurrent.atomic.AtomicLong;
+import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
@@ -36,7 +32,7 @@ public abstract class AbstractDOMDataBroker extends AbstractDOMForwardedTransact
 
     private final AtomicLong txNum = new AtomicLong();
     private final AtomicLong chainNum = new AtomicLong();
-    private final ClassToInstanceMap<DOMDataBrokerExtension> extensions;
+    private final @NonNull List<Extension> supportedExtensions;
 
     private volatile AutoCloseable closeable;
 
@@ -44,7 +40,7 @@ public abstract class AbstractDOMDataBroker extends AbstractDOMForwardedTransact
         super(datastores);
 
         boolean treeChange = true;
-        for (DOMStore ds : datastores.values()) {
+        for (var ds : datastores.values()) {
             if (!(ds instanceof DOMStoreTreeChangePublisher)) {
                 treeChange = false;
                 break;
@@ -52,21 +48,19 @@ public abstract class AbstractDOMDataBroker extends AbstractDOMForwardedTransact
         }
 
         if (treeChange) {
-            extensions = ImmutableClassToInstanceMap.of(
-                    DOMDataTreeChangeService.class, new DOMDataTreeChangeService() {
-                        @Override
-                        public <L extends DOMDataTreeChangeListener> ListenerRegistration<L>
-                                registerDataTreeChangeListener(final DOMDataTreeIdentifier treeId, final L listener) {
-                            DOMStore publisher = getTxFactories().get(treeId.getDatastoreType());
-                            Preconditions.checkState(publisher != null,
-                                    "Requested logical data store is not available.");
-
-                            return ((DOMStoreTreeChangePublisher)publisher).registerTreeChangeListener(
-                                    treeId.getRootIdentifier(), listener);
-                            }
-                        });
+            supportedExtensions = List.of(new DOMDataTreeChangeService() {
+                @Override
+                public <L extends DOMDataTreeChangeListener> ListenerRegistration<L> registerDataTreeChangeListener(
+                        final DOMDataTreeIdentifier treeId, final L listener) {
+                    final var dsType = treeId.getDatastoreType();
+                    if (getTxFactories().get(dsType) instanceof DOMStoreTreeChangePublisher publisher) {
+                        return publisher.registerTreeChangeListener(treeId.getRootIdentifier(), listener);
+                    }
+                    throw new IllegalStateException("Publisher for " + dsType + " data store is not available");
+                }
+            });
         } else {
-            extensions = ImmutableClassToInstanceMap.of();
+            supportedExtensions = List.of();
         }
     }
 
@@ -94,23 +88,23 @@ public abstract class AbstractDOMDataBroker extends AbstractDOMForwardedTransact
     }
 
     @Override
-    public final Collection<DOMDataBrokerExtension> supportedExtensions() {
-        return extensions.values();
+    public final List<Extension> supportedExtensions() {
+        return supportedExtensions;
     }
 
+
     @Override
     public DOMTransactionChain createTransactionChain(final DOMTransactionChainListener listener) {
         checkNotClosed();
 
-        final Map<LogicalDatastoreType, DOMStoreTransactionChain> backingChains =
-                new EnumMap<>(LogicalDatastoreType.class);
-        for (Entry<LogicalDatastoreType, DOMStore> entry : getTxFactories().entrySet()) {
-            backingChains.put(entry.getKey(), entry.getValue().createTransactionChain());
+        final var delegates = new EnumMap<LogicalDatastoreType, DOMStoreTransactionChain>(LogicalDatastoreType.class);
+        for (var entry : getTxFactories().entrySet()) {
+            delegates.put(entry.getKey(), entry.getValue().createTransactionChain());
         }
 
         final long chainId = chainNum.getAndIncrement();
         LOG.debug("Transactoin chain {} created with listener {}, backing store chains {}", chainId, listener,
-                backingChains);
-        return new DOMDataBrokerTransactionChainImpl(chainId, backingChains, this, listener);
+                delegates);
+        return new DOMDataBrokerTransactionChainImpl(chainId, delegates, this, listener);
     }
 }
index b4b149e36b0b4412ac485def4ad3ef5387bc27c4..1f695aae770a5f3a6a651a24cfca73c76a3874b0 100644 (file)
@@ -8,7 +8,6 @@
 package org.opendaylight.mdsal.dom.spi;
 
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
@@ -18,7 +17,7 @@ import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
 /**
  * Utility {@link DOMDataBroker} implementation which forwards all interface method invocation to a delegate instance.
  */
-public abstract class ForwardingDOMDataBroker extends ForwardingDOMService<DOMDataBroker, DOMDataBrokerExtension>
+public abstract class ForwardingDOMDataBroker extends ForwardingDOMService<DOMDataBroker, DOMDataBroker.Extension>
         implements DOMDataBroker {
     @Override
     public DOMDataTreeReadTransaction newReadOnlyTransaction() {
index 1255874cdb2dd5c36ffc171f32bc2ee1a2d62761..b6fb18b9db1d45a6be5600de282ee305e5163501 100644 (file)
@@ -16,7 +16,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
@@ -24,7 +23,7 @@ import org.opendaylight.mdsal.dom.api.DOMTransactionChainListener;
 
 @ExtendWith(MockitoExtension.class)
 class ForwardingDOMDataBrokerTest {
-    private interface Extension extends DOMDataBrokerExtension {
+    private interface Extension extends DOMDataBroker.Extension {
         // Nothing else
     }
 
index e7560e7b0324464c333a4dd07ebc0eff90606207..dbbbfab0730aae0bf14b260fea9c87125f030bf4 100644 (file)
@@ -18,7 +18,6 @@ import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.mdsal.dom.api.ClusteredDOMDataTreeChangeListener;
 import org.opendaylight.mdsal.dom.api.DOMDataBroker;
-import org.opendaylight.mdsal.dom.api.DOMDataBrokerExtension;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeService;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
@@ -308,7 +307,7 @@ public class TracingBroker implements TracingDOMDataBroker {
     }
 
     @Override
-    public <T extends DOMDataBrokerExtension> T extension(final Class<T> type) {
+    public <T extends Extension> T extension(final Class<T> type) {
         final var ext = delegate.extension(type);
         if (DOMDataTreeChangeService.class.equals(type) && ext instanceof DOMDataTreeChangeService treeChange) {
             return type.cast(new DOMDataTreeChangeService() {