Make DOMDataTreeService extensible 57/68057/12
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 31 Jan 2018 01:47:23 +0000 (02:47 +0100)
committerRobert Varga <nite@hq.sk>
Thu, 22 Mar 2018 11:47:33 +0000 (11:47 +0000)
DOMDataTreeService is a candidate for optional extensions, which
we support via the extensible object pattern. Add the ability for
DOMDataTreeService to be extended.

Change-Id: Ibc891208850c933b2a61598eddbf88e90625c064
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataTreeService.java
dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataTreeServiceExtension.java [new file with mode: 0644]
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMDataTree.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/ShardedDOMTransactionChainAdapter.java
dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/ShardedDOMReadTransactionAdapterTest.java

index 1934f870ddef77bcbb45f06fa71351b700066a5f..f4b21354941aa771331adae6de5b3e2c4d8cb6bd 100644 (file)
@@ -29,7 +29,8 @@ import org.opendaylight.yangtools.concepts.ListenerRegistration;
  * a consumer without accumulating excess work in the backlog stemming from its previous
  * activity.
  */
-public interface DOMDataTreeService extends DOMDataTreeProducerFactory, DOMService {
+public interface DOMDataTreeService extends DOMDataTreeProducerFactory,
+        DOMExtensibleService<DOMDataTreeService, DOMDataTreeServiceExtension> {
     /**
      * Register a {@link DOMDataTreeListener} instance. Once registered, the listener
      * will start receiving changes on the selected subtrees. If the listener cannot
diff --git a/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataTreeServiceExtension.java b/dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataTreeServiceExtension.java
new file mode 100644 (file)
index 0000000..e5a6f06
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Copyright (c) 2018 Pantheon Technologies, s.r.o. 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 DOMServiceExtension} applicable to {@link DOMDataTreeService} implementations.
+ */
+public interface DOMDataTreeServiceExtension
+    extends DOMServiceExtension<DOMDataTreeService, DOMDataTreeServiceExtension> {
+
+}
index df706739ac13a7ff1c3c3613058622b5d4271b43..781780702e417cb75bb3582f4d122b7a9ad736fd 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.mdsal.dom.broker;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Verify;
 import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.ListMultimap;
@@ -24,6 +25,7 @@ import org.opendaylight.mdsal.dom.api.DOMDataTreeListener;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeLoopException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeProducer;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeService;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeServiceExtension;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeShard;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeShardingConflictException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeShardingService;
@@ -130,6 +132,11 @@ public final class ShardedDOMDataTree implements DOMDataTreeService, DOMDataTree
         }
     }
 
+    @Override
+    public Map<Class<? extends DOMDataTreeServiceExtension>, DOMDataTreeServiceExtension> getSupportedExtensions() {
+        return ImmutableMap.of();
+    }
+
     @GuardedBy("this")
     private DOMDataTreeProducer createProducer(final Collection<DOMDataTreeIdentifier> subtrees,
             final Map<DOMDataTreeIdentifier, DOMDataTreeShard> shardMap) {
index f08aa2a78b58a1e30ed407c9b0be4e6b2c80b62c..b939df64673c2cb1b01dd0716549468cdc500442 100644 (file)
@@ -32,6 +32,7 @@ import org.opendaylight.mdsal.dom.api.DOMDataTreeProducerException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeReadWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeService;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeServiceExtension;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 import org.opendaylight.mdsal.dom.api.DOMTransactionChain;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
@@ -183,6 +184,11 @@ public class ShardedDOMTransactionChainAdapter implements DOMTransactionChain {
             return delegateTreeService.registerListener(listener, subtrees, allowRxMerges, producers);
         }
 
+        @Override
+        public Map<Class<? extends DOMDataTreeServiceExtension>, DOMDataTreeServiceExtension> getSupportedExtensions() {
+            return delegateTreeService.getSupportedExtensions();
+        }
+
         @Override
         public DOMDataTreeProducer createProducer(@Nonnull final Collection<DOMDataTreeIdentifier> subtrees) {
             Preconditions.checkState(subtrees.size() == 1);
index 521e7e2f36afe69aca0e55a23bddc7ffacb73ac3..96c1fe3b1a94abce8a0aa7c77e22cbae9a6bb338 100644 (file)
@@ -12,6 +12,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
 import com.google.common.util.concurrent.ListenableFuture;
 import java.util.Collection;
@@ -27,6 +28,7 @@ import org.opendaylight.mdsal.dom.api.DOMDataTreeListener;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeLoopException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeProducer;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeService;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeServiceExtension;
 import org.opendaylight.mdsal.dom.broker.util.TestModel;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
@@ -61,6 +63,11 @@ public class ShardedDOMReadTransactionAdapterTest {
 
     private static class TestTreeService implements DOMDataTreeService {
 
+        @Override
+        public Map<Class<? extends DOMDataTreeServiceExtension>, DOMDataTreeServiceExtension> getSupportedExtensions() {
+            return ImmutableMap.of();
+        }
+
         @Nonnull
         @Override
         public <T extends DOMDataTreeListener> ListenerRegistration<T>