Clean up (DOM)DataTreeIdentifier methods 59/109259/5
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 9 Dec 2023 14:45:47 +0000 (15:45 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Sat, 9 Dec 2023 18:09:28 +0000 (19:09 +0100)
These two classes represent the same thing with different addressing
modes. Unfortunately their instantiation is wildly different.

Introduce common.api.LogicalDatastorePath to force them to have the same
shape. While we are at it, make sure the new methods record-friendly.

JIRA: MDSAL-846
Change-Id: I359f77233a37e8cf4c7f7aa340cf2131111835c3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
40 files changed:
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/ActionService.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DTIv1.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataTreeChangeService.java
binding/mdsal-binding-api/src/main/java/org/opendaylight/mdsal/binding/api/DataTreeIdentifier.java
binding/mdsal-binding-api/src/test/java/org/opendaylight/mdsal/binding/api/DataTreeChangeServiceWildcardedTest.java
binding/mdsal-binding-api/src/test/java/org/opendaylight/mdsal/binding/api/DataTreeIdentifierTest.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/AbstractInstanceNotificationListenerAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionAdapterFilter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/ActionProviderServiceAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeChangeServiceAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeCommitCohortRegistryAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/CurrentAdapterSerializer.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/InstanceNotificationServiceAdapter.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/LazyDataTreeModification.java
binding/mdsal-binding-dom-adapter/src/main/java/org/opendaylight/mdsal/binding/dom/adapter/PublisherAdapter.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMAdapterLoaderTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeChangeServiceAdapterTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeCommitCohortAdapterTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/BindingDOMDataTreeCommitCohortRegistryAdapterTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/Bug4513Test.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/DataListenerTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/DataTreeChangeListenerTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/LazyDataTreeModificationTest.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/Mdsal298Test.java
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractDataTreeChangeListenerTest.java
common/mdsal-common-api/src/main/java/module-info.java
common/mdsal-common-api/src/main/java/org/opendaylight/mdsal/common/api/LogicalDatastorePath.java [new file with mode: 0644]
dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMActionInstance.java
dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DOMDataTreeIdentifier.java
dom/mdsal-dom-api/src/main/java/org/opendaylight/mdsal/dom/api/DTIv1.java
dom/mdsal-dom-api/src/test/java/org/opendaylight/mdsal/dom/api/DOMDataTreeIdentifierTest.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/AbstractDOMDataBroker.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMRpcRouter.java
dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/OperationInvocation.java
dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/DOMDataTreeListenerTest.java
dom/mdsal-dom-broker/src/test/java/org/opendaylight/mdsal/dom/broker/DOMRpcRouterTest.java
dom/mdsal-dom-spi/src/main/java/org/opendaylight/mdsal/dom/spi/DOMDataTreePrefixTable.java
dom/mdsal-dom-spi/src/test/java/org/opendaylight/mdsal/dom/spi/DOMDataTreePrefixTableTest.java
trace/mdsal-trace-impl/src/main/java/org/opendaylight/mdsal/trace/impl/TracingBroker.java

index 96542f7efea71b149cc937f76586b3a0a2d43cb6..778f94217970eb9d6c38fe26367edb8b5867cda0 100644 (file)
@@ -63,7 +63,7 @@ public interface ActionService extends BindingService {
 
     default <P extends DataObject, A extends Action<? extends InstanceIdentifier<P>, ?, ?>> A getActionHandle(
             final ActionSpec<A, P> spec, final LogicalDatastoreType dataStore, final InstanceIdentifier<P> path) {
-        return getActionHandle(spec, ImmutableSet.of(DataTreeIdentifier.create(dataStore, path)));
+        return getActionHandle(spec, ImmutableSet.of(DataTreeIdentifier.of(dataStore, path)));
     }
 
     default <P extends DataObject, A extends Action<? extends InstanceIdentifier<P>, ?, ?>> A getActionHandle(
index eae69b01eaabb59bf836bd0ce2b9c8f4675f86b4..fad726f64e30d4a05c031235d26abbfbfe860184 100644 (file)
@@ -37,13 +37,13 @@ final class DTIv1 implements Externalizable {
 
     @Override
     public void writeExternal(final ObjectOutput out) throws IOException {
-        id.getDatastoreType().writeTo(out);
-        out.writeObject(id.getRootIdentifier());
+        id.datastore().writeTo(out);
+        out.writeObject(id.path());
     }
 
     @Override
     public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
-        id = DataTreeIdentifier.create(LogicalDatastoreType.readFrom(in), (InstanceIdentifier<?>) in.readObject());
+        id = DataTreeIdentifier.of(LogicalDatastoreType.readFrom(in), (InstanceIdentifier<?>) in.readObject());
     }
 
     @java.io.Serial
index cbc1c245e9f3e9fbc474ac2a8593fa3ac4e324c9..36846695ba326159b2af6da02fcad600b7997946 100644 (file)
@@ -118,7 +118,7 @@ public interface DataTreeChangeService extends BindingService {
 
     private static <T extends DataObject> @NonNull DataTreeIdentifier<T> checkNotWildcard(
             final DataTreeIdentifier<T> treeId) {
-        final var instanceIdentifier = treeId.getRootIdentifier();
+        final var instanceIdentifier = treeId.path();
         if (instanceIdentifier.isWildcarded()) {
             throw new IllegalArgumentException("Cannot register listener for wildcard " + instanceIdentifier);
         }
index 3f0504c41f36e1a0e6c868983e2949b071ff8dd2..58bfc5ac26ca23b484789cc47c8e8cfeeeaf9456 100644 (file)
@@ -11,54 +11,86 @@ import static java.util.Objects.requireNonNull;
 
 import com.google.common.base.MoreObjects;
 import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.common.api.LogicalDatastorePath;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.yangtools.concepts.HierarchicalIdentifier;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 /**
- * A unique identifier for a particular subtree. It is composed of the logical
- * data store type and the instance identifier of the root node.
+ * A Binding version of {@link LogicalDatastorePath}. Uses {@link InstanceIdentifier} for path addressing.
  */
-public final class DataTreeIdentifier<T extends DataObject> implements HierarchicalIdentifier<DataTreeIdentifier<?>> {
+public final class DataTreeIdentifier<T extends DataObject>
+        implements LogicalDatastorePath<@NonNull DataTreeIdentifier<?>, @NonNull InstanceIdentifier<?>> {
     @java.io.Serial
     private static final long serialVersionUID = 1L;
 
     private final @NonNull InstanceIdentifier<T> rootIdentifier;
     private final @NonNull LogicalDatastoreType datastoreType;
 
-    private DataTreeIdentifier(final @NonNull LogicalDatastoreType datastoreType,
-            final @NonNull InstanceIdentifier<T> rootIdentifier) {
-        this.datastoreType = requireNonNull(datastoreType);
-        this.rootIdentifier = requireNonNull(rootIdentifier);
+    private DataTreeIdentifier(final @NonNull LogicalDatastoreType datastore,
+            final @NonNull InstanceIdentifier<T> path) {
+        datastoreType = requireNonNull(datastore);
+        rootIdentifier = requireNonNull(path);
     }
 
+    /**
+     * Create a new {@link DataTreeIdentifier} with specified datastore and path.
+     *
+     * @param <T> target {@link DataObject} type
+     * @param datastore {@link LogicalDatastoreType} of this identifier
+     * @param path {@link InstanceIdentifier} path of this identifier
+     * @throws NullPointerException if any argument is {@code null}
+     */
+    public static <T extends DataObject> @NonNull DataTreeIdentifier<T> of(
+            final @NonNull LogicalDatastoreType datastore, final @NonNull InstanceIdentifier<T> path) {
+        return new DataTreeIdentifier<>(datastore, path);
+    }
+
+    /**
+     * Create a new {@link DataTreeIdentifier} with specified datastore and path.
+     *
+     * @param <T> target {@link DataObject} type
+     * @param datastore {@link LogicalDatastoreType} of this identifier
+     * @param path {@link InstanceIdentifier} path of this identifier
+     * @throws NullPointerException if any argument is {@code null}
+     * @deprecated Use {@link #of(LogicalDatastoreType, InstanceIdentifier)} instead
+     */
+    @Deprecated(since = "13.0.0", forRemoval = true)
     public static <T extends DataObject> @NonNull DataTreeIdentifier<T> create(
-            final @NonNull LogicalDatastoreType datastoreType, final @NonNull InstanceIdentifier<T> rootIdentifier) {
-        return new DataTreeIdentifier<>(datastoreType, rootIdentifier);
+            final @NonNull LogicalDatastoreType datastore, final @NonNull InstanceIdentifier<T> path) {
+        return of(datastore, path);
+    }
+
+    @Override
+    public LogicalDatastoreType datastore() {
+        return datastoreType;
     }
 
     /**
      * Return the logical data store type.
      *
      * @return Logical data store type. Guaranteed to be non-null.
+     * @deprecated Use {@link #datastore()} instead
      */
+    @Deprecated(since = "13.0.0", forRemoval = true)
     public @NonNull LogicalDatastoreType getDatastoreType() {
-        return datastoreType;
+        return datastore();
+    }
+
+    @Override
+    public InstanceIdentifier<T> path() {
+        return rootIdentifier;
     }
 
     /**
      * Return the {@link InstanceIdentifier} of the root node.
      *
      * @return Instance identifier corresponding to the root node.
+     * @deprecated Use {@link #path()} instead
      */
+    @Deprecated(since = "13.0.0", forRemoval = true)
     public @NonNull InstanceIdentifier<T> getRootIdentifier() {
-        return rootIdentifier;
-    }
-
-    @Override
-    public boolean contains(final DataTreeIdentifier<?> other) {
-        return datastoreType == other.datastoreType && rootIdentifier.contains(other.rootIdentifier);
+        return path();
     }
 
     @Override
index 68a4a1355d6e75704cec519bb1be529d3621fd2f..f3b2fbef9a183844cddbbeb9d16d1bfeb734fbf0 100644 (file)
@@ -34,7 +34,7 @@ class DataTreeChangeServiceWildcardedTest {
     @Test
     void testThrowExceptionOnRegister() {
         final var itemIID = InstanceIdentifier.builder(RegisterListenerTest.class).child(Item.class).build();
-        final var itemDTI = DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, itemIID);
+        final var itemDTI = DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, itemIID);
 
         doCallRealMethod().when(dataBroker).registerDataListener(any(), any());
         final var dataListenerException = assertThrows(IllegalArgumentException.class,
index d87589c5abe385906907277956564c229b992d9d..f879b96d902361b6a4c87e4d67981525c4c58f9c 100644 (file)
@@ -24,42 +24,43 @@ import org.opendaylight.yangtools.yang.binding.DataRoot;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 class DataTreeIdentifierTest {
-    private static final DataTreeIdentifier<TestDataObject1> TEST_IDENTIFIER1 = DataTreeIdentifier.create(
-            LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(TestDataObject1.class));
-    private static final DataTreeIdentifier<TestDataObject2> TEST_IDENTIFIER2 = DataTreeIdentifier.create(
-            LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(TestDataObject2.class));
+    private static final DataTreeIdentifier<TestDataObject1> TEST_IDENTIFIER1 =
+        DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(TestDataObject1.class));
+    private static final DataTreeIdentifier<TestDataObject2> TEST_IDENTIFIER2 =
+        DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(TestDataObject2.class));
 
     @Test
     void basicTest() throws Exception {
-        assertEquals(LogicalDatastoreType.OPERATIONAL, TEST_IDENTIFIER1.getDatastoreType());
-        assertEquals(InstanceIdentifier.create(TestDataObject1.class), TEST_IDENTIFIER1.getRootIdentifier());
+        assertEquals(LogicalDatastoreType.OPERATIONAL, TEST_IDENTIFIER1.datastore());
+        assertEquals(InstanceIdentifier.create(TestDataObject1.class), TEST_IDENTIFIER1.path());
     }
 
     @Test
     void containsTest() {
-        assertTrue(TEST_IDENTIFIER1.contains(DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL,
-                InstanceIdentifier.create(TestDataObject1.class))), "Contains");
-        assertFalse(TEST_IDENTIFIER1.contains(TEST_IDENTIFIER2), "Not Contains");
+        assertTrue(TEST_IDENTIFIER1.contains(
+            DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(TestDataObject1.class))));
+        assertFalse(TEST_IDENTIFIER1.contains(TEST_IDENTIFIER2));
     }
 
     @Test
     void hashCodeTest() {
         assertEquals(TEST_IDENTIFIER1.hashCode(),
-            DataTreeIdentifier.create(
-                LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(TestDataObject1.class)).hashCode());
+            DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(TestDataObject1.class))
+                .hashCode());
         assertNotEquals(TEST_IDENTIFIER1.hashCode(), TEST_IDENTIFIER2.hashCode());
     }
 
     @Test
     void equalsTest() {
-        assertEquals(TEST_IDENTIFIER1, TEST_IDENTIFIER1, "Equals");
-        assertEquals(TEST_IDENTIFIER1, DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL,
-                InstanceIdentifier.create(TestDataObject1.class)), "Equals");
-        assertNotEquals(TEST_IDENTIFIER1, DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION,
-                InstanceIdentifier.create(TestDataObject1.class)), "Different");
-        assertNotEquals(TEST_IDENTIFIER1, TEST_IDENTIFIER2, "Different");
-        assertNotEquals(TEST_IDENTIFIER1, null, "Equals null");
-        assertNotEquals(TEST_IDENTIFIER1, new Object(), "Different object");
+        assertEquals(TEST_IDENTIFIER1, TEST_IDENTIFIER1);
+        assertEquals(TEST_IDENTIFIER1,
+            DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL,InstanceIdentifier.create(TestDataObject1.class)));
+        assertNotEquals(TEST_IDENTIFIER1,
+            DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION,
+                InstanceIdentifier.create(TestDataObject1.class)));
+        assertNotEquals(TEST_IDENTIFIER1, TEST_IDENTIFIER2);
+        assertNotEquals(TEST_IDENTIFIER1, null);
+        assertNotEquals(TEST_IDENTIFIER1, new Object());
     }
 
     @Test
index ddd7aae29ef6d2bd5e046e3cb6d464f00828c349..332dfbe8f6edbd805b48f1dfb070a84d76b3a4c4 100644 (file)
@@ -33,7 +33,7 @@ abstract class AbstractInstanceNotificationListenerAdapter<P extends DataObject,
     AbstractInstanceNotificationListenerAdapter(final AdapterContext adapterContext, final Class<N> nofiticationClass,
             final L delegate, final Executor executor) {
         this.adapterContext = requireNonNull(adapterContext);
-        this.notificationClass = requireNonNull(nofiticationClass);
+        notificationClass = requireNonNull(nofiticationClass);
         this.delegate = requireNonNull(delegate);
         this.executor = requireNonNull(executor);
     }
@@ -54,7 +54,7 @@ abstract class AbstractInstanceNotificationListenerAdapter<P extends DataObject,
             return;
         }
 
-        final var bindingPath = serializer.fromYangInstanceIdentifier(path.getRootIdentifier());
+        final var bindingPath = serializer.fromYangInstanceIdentifier(path.path());
         executor.execute(() -> onNotification(delegate, bindingPath, castNotification));
     }
 
index 5c97a742a0c12598ba5ee8c8da2efb6521e42f7a..12a4081f3d5ac7b7493ae9e2a81fe0c5e6fb0a2f 100644 (file)
@@ -61,13 +61,13 @@ final class ActionAdapter extends AbstractBindingAdapter<DOMActionService> imple
                 break;
             case Naming.ACTION_INVOKE_NAME:
                 if (args.length == 2) {
-                    final InstanceIdentifier<?> path = (InstanceIdentifier<?>) requireNonNull(args[0]);
+                    final var path = (InstanceIdentifier<?>) requireNonNull(args[0]);
                     checkArgument(!path.isWildcarded(), "Cannot invoke action on wildcard path %s", path);
 
-                    final RpcInput input = (RpcInput) requireNonNull(args[1]);
-                    final CurrentAdapterSerializer serializer = currentSerializer();
+                    final var input = (RpcInput) requireNonNull(args[1]);
+                    final var serializer = currentSerializer();
                     final ListenableFuture<? extends DOMActionResult> future = getDelegate().invokeAction(actionPath,
-                        new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL,
+                        DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL,
                             serializer.toYangInstanceIdentifier(path)),
                         serializer.toLazyNormalizedNodeActionInput(spec.type(), inputName, input));
 
index 3694d5f24e165cfc14725534c5dc05a64c01b916..9a0dda900fd928f9c372ab6aaaa85b81f9479203 100644 (file)
@@ -30,8 +30,8 @@ final class ActionAdapterFilter implements InvocationHandler {
     @Override
     public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
         if (Naming.ACTION_INVOKE_NAME.equals(method.getName()) && args.length == 2) {
-            final InstanceIdentifier<?> path = (InstanceIdentifier<?>) requireNonNull(args[0]);
-            checkState(nodes.contains(DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, path)),
+            final var path = (InstanceIdentifier<?>) requireNonNull(args[0]);
+            checkState(nodes.contains(DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, path)),
                 "Cannot service %s", path);
         }
         return delegate.invoke(proxy, method, args);
index dc3492a65533bf213c7d2473f063e57214b1ec64..04c5a43345d2e9ed85099b226733fdbcd9678aa1 100644 (file)
@@ -83,10 +83,10 @@ public final class ActionProviderServiceAdapter extends AbstractBindingAdapter<D
         final Impl impl = new Impl(adapterContext(), actionPath, spec.type(), implementation);
         final DOMActionInstance instance = validNodes.isEmpty()
             // Register on the entire datastore
-            ? DOMActionInstance.of(actionPath, new DOMDataTreeIdentifier(datastore, YangInstanceIdentifier.of()))
+            ? DOMActionInstance.of(actionPath, DOMDataTreeIdentifier.of(datastore, YangInstanceIdentifier.of()))
                 // Register on specific instances
                 : DOMActionInstance.of(actionPath, validNodes.stream()
-                    .map(node -> serializer.toDOMDataTreeIdentifier(DataTreeIdentifier.create(datastore, node)))
+                    .map(node -> serializer.toDOMDataTreeIdentifier(DataTreeIdentifier.of(datastore, node)))
                     .collect(Collectors.toUnmodifiableSet()));
 
 
@@ -121,7 +121,7 @@ public final class ActionProviderServiceAdapter extends AbstractBindingAdapter<D
         public ListenableFuture<? extends DOMActionResult> invokeAction(final Absolute type,
                 final DOMDataTreeIdentifier path, final ContainerNode input) {
             final CurrentAdapterSerializer codec = adapterContext.currentSerializer();
-            final InstanceIdentifier<DataObject> instance = codec.fromYangInstanceIdentifier(path.getRootIdentifier());
+            final InstanceIdentifier<DataObject> instance = codec.fromYangInstanceIdentifier(path.path());
             if (instance == null) {
                 // Not representable: return an error
                 LOG.debug("Path {} is not representable in binding, rejecting invocation", path);
index 42d5fd59b29a4983c35c1f374936b04519f22034..d82203ba5da4473638db1c28b7b21b8de3986eee 100644 (file)
@@ -38,8 +38,8 @@ final class BindingDOMDataTreeChangeServiceAdapter extends AbstractBindingAdapte
     public <T extends DataObject> Registration registerDataTreeChangeListener(final DataTreeIdentifier<T> treeId,
             final DataTreeChangeListener<T> listener) {
         final var domIdentifier = toDomTreeIdentifier(treeId);
-        final var storeType = treeId.getDatastoreType();
-        final var target = treeId.getRootIdentifier().getTargetType();
+        final var storeType = treeId.datastore();
+        final var target = treeId.path().getTargetType();
         final var augment = Augmentation.class.isAssignableFrom(target) ? target : null;
 
         final var domListener = listener instanceof ClusteredDataTreeChangeListener
@@ -65,12 +65,12 @@ final class BindingDOMDataTreeChangeServiceAdapter extends AbstractBindingAdapte
     }
 
     private @NonNull DOMDataTreeIdentifier toDomTreeIdentifier(final DataTreeIdentifier<?> treeId) {
-        return new DOMDataTreeIdentifier(treeId.getDatastoreType(),
-            currentSerializer().toYangInstanceIdentifier(treeId.getRootIdentifier()));
+        return DOMDataTreeIdentifier.of(treeId.datastore(),
+            currentSerializer().toYangInstanceIdentifier(treeId.path()));
     }
 
     private @NonNull DOMDataTreeIdentifier toDomTreeInstance(final DataTreeIdentifier<?> treeId) {
-        final var instanceIdentifier = treeId.getRootIdentifier();
+        final var instanceIdentifier = treeId.path();
         if (instanceIdentifier.isWildcarded()) {
             throw new IllegalArgumentException("Cannot register listener for wildcard " + instanceIdentifier);
         }
index fc3f7980750ea83b066525453b07af1fc306a2a2..16a9d638d4f179e2b6abb2df6cc069782d10177c 100644 (file)
@@ -25,7 +25,7 @@ final class BindingDOMDataTreeCommitCohortRegistryAdapter
     @Override
     public <D extends DataObject, T extends DataTreeCommitCohort<D>> ObjectRegistration<T> registerCommitCohort(
             final DataTreeIdentifier<D> subtree, final T cohort) {
-        final var target = subtree.getRootIdentifier().getTargetType();
+        final var target = subtree.path().getTargetType();
         final var adapter = new BindingDOMDataTreeCommitCohortAdapter<>(adapterContext(), cohort,
             Augmentation.class.isAssignableFrom(target) ? target : null);
         final var domPath = currentSerializer().toDOMDataTreeIdentifier(subtree);
index 53c7720dd2f281bf95d32040d00744de31788ad2..015d66c34d3639bfea2d4d2f49ca8c59755704c3 100644 (file)
@@ -80,7 +80,7 @@ public final class CurrentAdapterSerializer extends ForwardingBindingDOMCodecSer
     }
 
     DOMDataTreeIdentifier toDOMDataTreeIdentifier(final DataTreeIdentifier<?> path) {
-        return new DOMDataTreeIdentifier(path.getDatastoreType(), toYangInstanceIdentifier(path.getRootIdentifier()));
+        return DOMDataTreeIdentifier.of(path.datastore(), toYangInstanceIdentifier(path.path()));
     }
 
     Collection<DOMDataTreeIdentifier> toDOMDataTreeIdentifiers(final Collection<DataTreeIdentifier<?>> subtrees) {
index 09a32f421f45ea7cc42ec361d36ee05c2b6bd906..aab0d809c210e8d0f05c981358acccaab9deaf82 100644 (file)
@@ -81,7 +81,7 @@ final class InstanceNotificationServiceAdapter implements InstanceNotificationSe
             final @NonNull InstanceIdentifier<?> path, final @NonNull DOMInstanceNotificationListener listener) {
         final var serializer = adapterContext.currentSerializer();
         return domNotifService.registerNotificationListener(
-            new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, serializer.toYangInstanceIdentifier(path)),
+            DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, serializer.toYangInstanceIdentifier(path)),
             serializer.getNotificationPath(spec).lastNodeIdentifier(), listener);
     }
 }
index 530b490649a1353c6738a742c72d96032f2fb413..adc4636f5a226697387bfa16a6c921d76e0b54d3 100644 (file)
@@ -48,19 +48,18 @@ final class LazyDataTreeModification<T extends DataObject> implements DataTreeMo
         final var codec = serializer.getSubtreeCodec(bindingPath);
         final var modification = LazyDataObjectModification.from(codec, domChange.getRootNode());
         return modification == null ? null
-            : new LazyDataTreeModification(DataTreeIdentifier.create(datastoreType, bindingPath), modification);
+            : new LazyDataTreeModification(DataTreeIdentifier.of(datastoreType, bindingPath), modification);
     }
 
     @SuppressWarnings({"unchecked", "rawtypes"})
     static <T extends DataObject> @Nullable DataTreeModification<T> from(final CurrentAdapterSerializer serializer,
             final DOMDataTreeCandidate candidate, final Class<T> augment) {
         final var domRootPath = candidate.getRootPath();
-        final var bindingPath = createBindingPath(serializer, domRootPath.getRootIdentifier(), augment);
+        final var bindingPath = createBindingPath(serializer, domRootPath.path(), augment);
         final var codec = serializer.getSubtreeCodec(bindingPath);
         final var modification = LazyDataObjectModification.from(codec, candidate.getRootNode());
         return modification == null ? null
-            : new LazyDataTreeModification(DataTreeIdentifier.create(domRootPath.getDatastoreType(), bindingPath),
-                modification);
+            : new LazyDataTreeModification(DataTreeIdentifier.of(domRootPath.datastore(), bindingPath), modification);
     }
 
     static <T extends DataObject> @NonNull List<DataTreeModification<T>> from(final CurrentAdapterSerializer codec,
index dd862f63d19402b46752fa2ebc6376d2850c0cd3..2e1044b28286c05a9c005b6b38de1481f35a63eb 100644 (file)
@@ -63,7 +63,7 @@ final class PublisherAdapter<N extends InstanceNotification<N, P>, P extends Dat
 
     private static @NonNull DOMDataTreeIdentifier toDomPath(final CurrentAdapterSerializer serializer,
             final InstanceIdentifier<?> path) {
-        return new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, serializer.toYangInstanceIdentifier(path));
+        return DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, serializer.toYangInstanceIdentifier(path));
     }
 
     private @NonNull DOMNotification toDomNotification(final CurrentAdapterSerializer serializer,
index 95f82cf25b4b689295c5c1d82a4121a056f53baf..d96931c67c3d548af2c7081f8ee89a1d204d5af3 100644 (file)
@@ -65,8 +65,9 @@ public class BindingDOMAdapterLoaderTest {
     @Test
     public void registerWithException() {
         final var adapter = assertDataBrokerAdapter();
-        final var ex = assertThrows(UnsupportedOperationException.class, () -> adapter.registerDataTreeChangeListener(
-                DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Top.class)),
+        final var ex = assertThrows(UnsupportedOperationException.class,
+            () -> adapter.registerDataTreeChangeListener(
+                DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Top.class)),
                 mock(DataTreeChangeListener.class)));
         assertEquals("Underlying data broker does not expose DOMDataTreeChangeService.", ex.getMessage());
     }
index 7e246b73721e8bb4b234a67da8ed800771d559b9..a935e831561f120e5cc9dccb6d9b605319cf5719 100644 (file)
@@ -71,7 +71,7 @@ public class BindingDOMDataTreeChangeServiceAdapterTest {
         doReturn(mockDOMReg).when(mockDOMService).registerDataTreeChangeListener(
                 domDataTreeIdentifier(TOP_YIID),
                 any(DOMDataTreeChangeListener.class));
-        final DataTreeIdentifier<Top> treeId = DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, TOP_PATH);
+        final DataTreeIdentifier<Top> treeId = DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, TOP_PATH);
         final TestClusteredDataTreeChangeListener mockClusteredListener = new TestClusteredDataTreeChangeListener();
         service.registerDataTreeChangeListener(treeId , mockClusteredListener);
 
@@ -89,8 +89,7 @@ public class BindingDOMDataTreeChangeServiceAdapterTest {
     }
 
     static DOMDataTreeIdentifier domDataTreeIdentifier(final YangInstanceIdentifier yangID) {
-        return argThat(arg -> arg.getDatastoreType() == LogicalDatastoreType.CONFIGURATION
-                && yangID.equals(arg.getRootIdentifier()));
+        return argThat(arg -> arg.datastore() == LogicalDatastoreType.CONFIGURATION && yangID.equals(arg.path()));
     }
 
     private static final class TestClusteredDataTreeChangeListener implements ClusteredDataTreeChangeListener<Top> {
index d713de2ccd3c3da11ae535acf74b110c81d925f6..1cb164f93941272013cc54feabbcba3ca0cc8987 100644 (file)
@@ -35,7 +35,6 @@ import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidateNode;
 
 @RunWith(MockitoJUnitRunner.StrictStubs.class)
 public class BindingDOMDataTreeCommitCohortAdapterTest {
-
     @Test
     public void canCommitTest() {
         final DataTreeCommitCohort<?> cohort = mock(DataTreeCommitCohort.class);
@@ -48,7 +47,7 @@ public class BindingDOMDataTreeCommitCohortAdapterTest {
 
         final DOMDataTreeCandidate domDataTreeCandidate = mock(DOMDataTreeCandidate.class);
         final DOMDataTreeIdentifier domDataTreeIdentifier =
-                new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of());
+                DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of());
         final var bindingPath = InstanceIdentifier.create(BooleanContainer.class);
         doReturn(bindingPath).when(registry).fromYangInstanceIdentifier(any());
         final BindingDataObjectCodecTreeNode<?> bindingCodecTreeNode = mock(BindingDataObjectCodecTreeNode.class);
@@ -64,7 +63,7 @@ public class BindingDOMDataTreeCommitCohortAdapterTest {
 
         doReturn(PostCanCommitStep.NOOP_SUCCESSFUL_FUTURE).when(cohort).canCommit(any(), any());
         adapter.canCommit(txId, null, List.of(domDataTreeCandidate, domDataTreeCandidate));
-        ArgumentCaptor<Collection> modifications = ArgumentCaptor.forClass(Collection.class);
+        final var modifications = ArgumentCaptor.forClass(Collection.class);
         verify(cohort).canCommit(eq(txId), modifications.capture());
         assertEquals(2, modifications.getValue().size());
     }
index 1e01775f2cd9e5dfaa72e6b420110f637787ea1a..bb76474729e690e9f7c3a9c28f56e50e2b86400d 100644 (file)
@@ -40,7 +40,7 @@ public class BindingDOMDataTreeCommitCohortRegistryAdapterTest {
         final var registryAdapter = new BindingDOMDataTreeCommitCohortRegistryAdapter(bindingTestContext.getCodec(),
             cohortRegistry);
 
-        final var dataTreeIdentifier = DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION,
+        final var dataTreeIdentifier = DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION,
                 InstanceIdentifier.create(Top.class));
         final DataTreeCommitCohort<Top> dataTreeCommitCohort = mock(DataTreeCommitCohort.class);
         try (var objectRegistration = registryAdapter.registerCommitCohort(dataTreeIdentifier, dataTreeCommitCohort)) {
index 78ffc5f88d5da1b5390e3b7243d779ffebe8689f..d9355986d08bbca6c45677aa579963be00e8333f 100644 (file)
@@ -48,7 +48,7 @@ class Bug4513Test extends AbstractDataBrokerTest {
 
         final var wildCard = InstanceIdentifier.builder(ListenerTest.class).child(ListItem.class).build();
         final var reg = dataBroker.registerDataTreeChangeListener(
-                DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, wildCard), listener);
+                DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, wildCard), listener);
 
         final var item = writeListItem();
 
index a347b047c5737776d916f31dc50293274533c46b..fa4586afd7d83985c6c6f766a39dcf38a7a6d13c 100644 (file)
@@ -49,8 +49,7 @@ public class DataListenerTest extends AbstractDataBrokerTest {
     public void testThrowExceptionOnRegister() {
         final InstanceIdentifier<Item> instanceIdentifier = InstanceIdentifier.builder(RegisterListenerTest.class)
             .child(Item.class).build();
-        final DataTreeIdentifier<Item> itemsDataTreeIdentifier = DataTreeIdentifier.create(
-            LogicalDatastoreType.OPERATIONAL,
+        final DataTreeIdentifier<Item> itemsDataTreeIdentifier = DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL,
             instanceIdentifier);
 
         final Throwable dataListenerException = assertThrows(IllegalArgumentException.class,
@@ -69,7 +68,7 @@ public class DataListenerTest extends AbstractDataBrokerTest {
             .child(Item.class, new ItemKey(item.key())).build();
 
         dataBroker.registerDataListener(
-            DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, instanceIdentifier), listener);
+            DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, instanceIdentifier), listener);
 
         verify(listener, timeout(100)).dataChangedTo(item);
     }
@@ -81,7 +80,7 @@ public class DataListenerTest extends AbstractDataBrokerTest {
             .child(Item.class, new ItemKey(item.key())).build();
 
         dataBroker.registerDataChangeListener(
-            DataTreeIdentifier.create(LogicalDatastoreType.CONFIGURATION, instanceIdentifier), changeListener);
+            DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, instanceIdentifier), changeListener);
 
         verify(changeListener, timeout(100)).dataChanged(null, item);
     }
index 14fca329f20f359053a96a0b4074faf38cd6663e..99867ca96d5999f22ab202fb894e725986470df6 100644 (file)
@@ -55,7 +55,7 @@ public class DataTreeChangeListenerTest extends AbstractDataBrokerTest {
     private static final PathArgument BAR_ARGUMENT = Iterables.getLast(BAR_PATH.getPathArguments());
     private static final TopLevelList BAR_DATA = topLevelList(TOP_BAR_KEY);
     private static final DataTreeIdentifier<Top> TOP_IDENTIFIER
-            = DataTreeIdentifier.create(LogicalDatastoreType.OPERATIONAL, TOP_PATH);
+            = DataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, TOP_PATH);
 
     private static final Top TOP_INITIAL_DATA = top(FOO_DATA);
 
@@ -120,24 +120,24 @@ public class DataTreeChangeListenerTest extends AbstractDataBrokerTest {
     @Test
     public void testWildcardedListListener() throws Exception {
         final EventCapturingListener<TopLevelList> listener = new EventCapturingListener<>();
-        final DataTreeIdentifier<TopLevelList> wildcard = DataTreeIdentifier.create(
+        final DataTreeIdentifier<TopLevelList> wildcard = DataTreeIdentifier.of(
                 LogicalDatastoreType.OPERATIONAL, TOP_PATH.child(TopLevelList.class));
         dataBrokerImpl.registerDataTreeChangeListener(wildcard, listener);
 
         putTx(TOP_PATH, TOP_INITIAL_DATA).commit().get();
 
         final DataTreeModification<TopLevelList> fooWriteEvent = Iterables.getOnlyElement(listener.nextEvent());
-        assertEquals(FOO_PATH, fooWriteEvent.getRootPath().getRootIdentifier());
+        assertEquals(FOO_PATH, fooWriteEvent.getRootPath().path());
         verifyModification(fooWriteEvent.getRootNode(), FOO_ARGUMENT, ModificationType.WRITE);
 
         putTx(BAR_PATH, BAR_DATA).commit().get();
         final DataTreeModification<TopLevelList> barWriteEvent = Iterables.getOnlyElement(listener.nextEvent());
-        assertEquals(BAR_PATH, barWriteEvent.getRootPath().getRootIdentifier());
+        assertEquals(BAR_PATH, barWriteEvent.getRootPath().path());
         verifyModification(barWriteEvent.getRootNode(), BAR_ARGUMENT, ModificationType.WRITE);
 
         deleteTx(BAR_PATH).commit().get();
         final DataTreeModification<TopLevelList> barDeleteEvent = Iterables.getOnlyElement(listener.nextEvent());
-        assertEquals(BAR_PATH, barDeleteEvent.getRootPath().getRootIdentifier());
+        assertEquals(BAR_PATH, barDeleteEvent.getRootPath().path());
         verifyModification(barDeleteEvent.getRootNode(), BAR_ARGUMENT, ModificationType.DELETE);
     }
 
@@ -146,12 +146,12 @@ public class DataTreeChangeListenerTest extends AbstractDataBrokerTest {
         putTx(TOP_PATH, TOP_INITIAL_DATA).commit().get();
 
         final EventCapturingListener<TopLevelList> listener = new EventCapturingListener<>();
-        final DataTreeIdentifier<TopLevelList> wildcard = DataTreeIdentifier.create(
+        final DataTreeIdentifier<TopLevelList> wildcard = DataTreeIdentifier.of(
                 LogicalDatastoreType.OPERATIONAL, TOP_PATH.child(TopLevelList.class));
         dataBrokerImpl.registerDataTreeChangeListener(wildcard, listener);
 
         final DataTreeModification<TopLevelList> fooWriteEvent = Iterables.getOnlyElement(listener.nextEvent());
-        assertEquals(FOO_PATH, fooWriteEvent.getRootPath().getRootIdentifier());
+        assertEquals(FOO_PATH, fooWriteEvent.getRootPath().path());
         verifyModification(fooWriteEvent.getRootNode(), FOO_ARGUMENT, ModificationType.WRITE);
     }
 
index ad1618e962af8ae510bc578288ec60c9e5789bae..d5bb353fe2ab5113a589a0aa03bde39c3cc25514 100644 (file)
@@ -30,7 +30,7 @@ public class LazyDataTreeModificationTest {
         final AdapterContext codec = new ConstantAdapterContext(registry);
         final DOMDataTreeCandidate domDataTreeCandidate = mock(DOMDataTreeCandidate.class);
         final DOMDataTreeIdentifier domDataTreeIdentifier =
-                new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of());
+                DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of());
         final var bindingPath = InstanceIdentifier.create(BooleanContainer.class);
         doReturn(bindingPath).when(registry).fromYangInstanceIdentifier(any());
         final BindingDataObjectCodecTreeNode<?> bindingCodecTreeNode = mock(BindingDataObjectCodecTreeNode.class);
index cbc4a294b0d816477c8424fed399fa68db37f561..d036163baf4e451e8c3a873cc3c3921f948ba0b6 100644 (file)
@@ -60,14 +60,14 @@ import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
 
 public class Mdsal298Test extends AbstractDataBrokerTest {
     private static final InstanceIdentifier<Container> CONTAINER = InstanceIdentifier.create(Container.class);
-    private static final DataTreeIdentifier<Container> CONTAINER_TID = DataTreeIdentifier.create(CONFIGURATION,
+    private static final DataTreeIdentifier<Container> CONTAINER_TID = DataTreeIdentifier.of(CONFIGURATION,
         CONTAINER);
     private static final NodeIdentifier CONTAINER_NID = new NodeIdentifier(Container.QNAME);
     private static final QName FOO_QNAME = QName.create(Container.QNAME, "foo");
     private static final QName BAZ_QNAME = QName.create(UnaddressableCont.QNAME, "baz");
 
     private static final InstanceIdentifier<WithChoice> CHOICE_CONTAINER = InstanceIdentifier.create(WithChoice.class);
-    private static final DataTreeIdentifier<WithChoice> CHOICE_CONTAINER_TID = DataTreeIdentifier.create(CONFIGURATION,
+    private static final DataTreeIdentifier<WithChoice> CHOICE_CONTAINER_TID = DataTreeIdentifier.of(CONFIGURATION,
         CHOICE_CONTAINER);
     private static final NodeIdentifier CHOICE_CONTAINER_NID = new NodeIdentifier(WithChoice.QNAME);
     private static final NodeIdentifier CHOICE_NID = new NodeIdentifier(Foo.QNAME);
@@ -76,13 +76,13 @@ public class Mdsal298Test extends AbstractDataBrokerTest {
 
     private static final InstanceIdentifier<AddressableCont> ADDRESSABLE_CONTAINER =
             InstanceIdentifier.create(AddressableCont.class);
-    private static final DataTreeIdentifier<AddressableCont> ADDRESSABLE_CONTAINER_TID = DataTreeIdentifier.create(
+    private static final DataTreeIdentifier<AddressableCont> ADDRESSABLE_CONTAINER_TID = DataTreeIdentifier.of(
         CONFIGURATION, ADDRESSABLE_CONTAINER);
     private static final NodeIdentifier ADDRESSABLE_CONTAINER_NID = new NodeIdentifier(AddressableCont.QNAME);
 
     private static final InstanceIdentifier<UnaddressableCont> UNADDRESSABLE_CONTAINER =
             InstanceIdentifier.create(UnaddressableCont.class);
-    private static final DataTreeIdentifier<UnaddressableCont> UNADDRESSABLE_CONTAINER_TID = DataTreeIdentifier.create(
+    private static final DataTreeIdentifier<UnaddressableCont> UNADDRESSABLE_CONTAINER_TID = DataTreeIdentifier.of(
         CONFIGURATION, UNADDRESSABLE_CONTAINER);
     private static final NodeIdentifier UNADDRESSABLE_CONTAINER_NID = new NodeIdentifier(UnaddressableCont.QNAME);
 
@@ -315,8 +315,7 @@ public class Mdsal298Test extends AbstractDataBrokerTest {
         final DataTreeChangeListener<T> listener = mock(DataTreeChangeListener.class);
         doNothing().when(listener).onDataTreeChanged(anyCollection());
 
-        final DataTreeIdentifier<T> dti = DataTreeIdentifier.create(CONFIGURATION,
-            InstanceIdentifier.create(bindingClass));
+        final DataTreeIdentifier<T> dti = DataTreeIdentifier.of(CONFIGURATION, InstanceIdentifier.create(bindingClass));
         getDataBroker().registerDataTreeChangeListener(dti, listener);
 
         final DOMDataTreeWriteTransaction domTx = getDomBroker().newWriteOnlyTransaction();
@@ -324,7 +323,7 @@ public class Mdsal298Test extends AbstractDataBrokerTest {
             ImmutableNodes.containerNode(qname));
         domTx.commit().get();
 
-        final ArgumentCaptor<Collection> captor = ArgumentCaptor.forClass(Collection.class);
+        final var captor = ArgumentCaptor.forClass(Collection.class);
         verify(listener).onDataTreeChanged(captor.capture());
         Collection<DataTreeModification<T>> capture = captor.getValue();
         assertEquals(1, capture.size());
index 42e723fd2f79f4c54f17fbba40a5f060ec0aec53..274ca6eeaca5d552cdcdaeaa1b2dfe2bbcf613fa 100644 (file)
@@ -66,7 +66,7 @@ public class AbstractDataTreeChangeListenerTest extends AbstractConcurrentDataBr
                 if (!matcher.apply(mod)) {
                     final var rootNode = mod.getRootNode();
                     fail("Received unexpected notification: type: %s, path: %s, before: %s, after: %s".formatted(
-                        rootNode.getModificationType(), mod.getRootPath().getRootIdentifier(), rootNode.getDataBefore(),
+                        rootNode.getModificationType(), mod.getRootPath().path(), rootNode.getDataBefore(),
                         rootNode.getDataAfter()));
                     return;
                 }
@@ -155,8 +155,7 @@ public class AbstractDataTreeChangeListenerTest extends AbstractConcurrentDataBr
     protected final <T extends DataObject> @NonNull ModificationCollector<T> createCollector(
             final LogicalDatastoreType store, final InstanceIdentifier<T> path) {
         final var listener = new TestListener<T>();
-        final var reg = getDataBroker().registerDataTreeChangeListener(DataTreeIdentifier.create(store, path),
-            listener);
+        final var reg = getDataBroker().registerDataTreeChangeListener(DataTreeIdentifier.of(store, path), listener);
         listener.awaitSync();
         return new ModificationCollector<>(listener, reg);
     }
@@ -165,7 +164,7 @@ public class AbstractDataTreeChangeListenerTest extends AbstractConcurrentDataBr
             final InstanceIdentifier<T> path, final DataMatcher<T> checkDataBefore,
             final DataMatcher<T> checkDataAfter) {
         return modification -> type == modification.getRootNode().getModificationType()
-                && path.equals(modification.getRootPath().getRootIdentifier())
+                && path.equals(modification.getRootPath().path())
                 && checkDataBefore.apply(modification.getRootNode().getDataBefore())
                 && checkDataAfter.apply(modification.getRootNode().getDataAfter());
     }
index 5b4d7f27088d88b4467fa4406f910019f9bec4f3..5aad096014dfc4bad395b894665b77acaf7c6f49 100644 (file)
@@ -8,6 +8,7 @@
 module org.opendaylight.mdsal.common.api {
     exports org.opendaylight.mdsal.common.api;
 
+    requires transitive org.opendaylight.yangtools.concepts;
     requires transitive org.opendaylight.yangtools.yang.common;
     requires transitive org.opendaylight.yangtools.util;
 
diff --git a/common/mdsal-common-api/src/main/java/org/opendaylight/mdsal/common/api/LogicalDatastorePath.java b/common/mdsal-common-api/src/main/java/org/opendaylight/mdsal/common/api/LogicalDatastorePath.java
new file mode 100644 (file)
index 0000000..13538ad
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2023 PANTHEON.tech, 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.common.api;
+
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.opendaylight.yangtools.concepts.HierarchicalIdentifier;
+
+/**
+ * A path to a subtree within a particular datastore.
+ */
+@NonNullByDefault
+public interface LogicalDatastorePath<T extends LogicalDatastorePath<T, P>, P extends HierarchicalIdentifier<P>>
+        extends HierarchicalIdentifier<T> {
+    /**
+     * Return the {@link LogicalDatastoreType}.
+     *
+     * @return the {@link LogicalDatastoreType}
+     */
+    LogicalDatastoreType datastore();
+
+    /**
+     * Return the absolute path.
+     *
+     * @return the absolute path
+     */
+    P path();
+
+    @Override
+    default boolean contains(final T other) {
+        return datastore() == other.datastore() && path().contains(other.path());
+    }
+}
index 5b2f170267f915bdc7db34ec51664316412308d6..d8a47d4ff3ea335a995475d6fcafe87ed9362202 100644 (file)
@@ -43,7 +43,7 @@ public final class DOMActionInstance implements Immutable {
 
     public static DOMActionInstance of(final Absolute type, final LogicalDatastoreType datastore,
             final YangInstanceIdentifier path) {
-        return new DOMActionInstance(type, ImmutableSet.of(new DOMDataTreeIdentifier(datastore, path)));
+        return new DOMActionInstance(type, ImmutableSet.of(DOMDataTreeIdentifier.of(datastore, path)));
     }
 
     /**
index 9b2a6ce4d167b8b8d2c1b5724c3c20c4d4fd5295..28b738952979c72f272307817fb7113b605dda67 100644 (file)
@@ -12,16 +12,15 @@ import static java.util.Objects.requireNonNull;
 import com.google.common.base.MoreObjects;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.mdsal.common.api.LogicalDatastorePath;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-import org.opendaylight.yangtools.concepts.HierarchicalIdentifier;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
 
 /**
- * A unique identifier for a particular subtree. It is composed of the logical data store type and the instance
- * identifier of the root node.
+ * A DOM version of {@link LogicalDatastorePath}. Uses {@link YangInstanceIdentifier} for path addressing.
  */
 @NonNullByDefault
-public final class DOMDataTreeIdentifier implements HierarchicalIdentifier<DOMDataTreeIdentifier>,
+public final class DOMDataTreeIdentifier implements LogicalDatastorePath<DOMDataTreeIdentifier, YangInstanceIdentifier>,
         Comparable<DOMDataTreeIdentifier> {
     @java.io.Serial
     private static final long serialVersionUID = 1L;
@@ -29,49 +28,66 @@ public final class DOMDataTreeIdentifier implements HierarchicalIdentifier<DOMDa
     private final YangInstanceIdentifier rootIdentifier;
     private final LogicalDatastoreType datastoreType;
 
-    public DOMDataTreeIdentifier(final LogicalDatastoreType datastoreType,
-            final YangInstanceIdentifier rootIdentifier) {
-        this.datastoreType = requireNonNull(datastoreType);
-        this.rootIdentifier = requireNonNull(rootIdentifier);
+    /**
+     * Default constructor.
+     *
+     * @param datastore {@link LogicalDatastoreType} of this identifier
+     * @param path {@link YangInstanceIdentifier} path of this identifier
+     * @throws NullPointerException if any argument is {@code null}
+     * @deprecated Use {@link #of(LogicalDatastoreType, YangInstanceIdentifier)} instead
+     */
+    @Deprecated(since = "13.0.0", forRemoval = true)
+    public DOMDataTreeIdentifier(final LogicalDatastoreType datastore, final YangInstanceIdentifier path) {
+        datastoreType = requireNonNull(datastore);
+        rootIdentifier = requireNonNull(path);
+    }
+
+    /**
+     * Create a new {@link DOMDataTreeIdentifier} with specified datastore and path.
+     *
+     * @param datastore {@link LogicalDatastoreType} of this identifier
+     * @param path {@link YangInstanceIdentifier} path of this identifier
+     * @throws NullPointerException if any argument is {@code null}
+     */
+    public static DOMDataTreeIdentifier of(final LogicalDatastoreType datastore, final YangInstanceIdentifier path) {
+        return new DOMDataTreeIdentifier(datastore, path);
+    }
+
+    @Override
+    public LogicalDatastoreType datastore() {
+        return datastoreType;
     }
 
     /**
      * Return the logical data store type.
      *
      * @return Logical data store type. Guaranteed to be non-null.
+     * @deprecated Use {@link #datastore()} instead
      */
+    @Deprecated(since = "13.0.0", forRemoval = true)
     public LogicalDatastoreType getDatastoreType() {
-        return datastoreType;
+        return datastore();
+    }
+
+    @Override
+    public YangInstanceIdentifier path() {
+        return rootIdentifier;
     }
 
     /**
      * Return the {@link YangInstanceIdentifier} of the root node.
      *
      * @return Instance identifier corresponding to the root node.
+     * @deprecated Use {@link #path()} instead
      */
+    @Deprecated(since = "13.0.0", forRemoval = true)
     public YangInstanceIdentifier getRootIdentifier() {
-        return rootIdentifier;
-    }
-
-    @Override
-    public boolean contains(final DOMDataTreeIdentifier other) {
-        return datastoreType == other.datastoreType && rootIdentifier.contains(other.rootIdentifier);
+        return path();
     }
 
     public DOMDataTreeIdentifier toOptimized() {
         final var opt = rootIdentifier.toOptimized();
-        return opt == rootIdentifier ? this : new DOMDataTreeIdentifier(datastoreType, opt);
-    }
-
-    @Override
-    public int hashCode() {
-        return datastoreType.hashCode() * 31 + rootIdentifier.hashCode();
-    }
-
-    @Override
-    public boolean equals(final @Nullable Object obj) {
-        return this == obj || obj instanceof DOMDataTreeIdentifier other && datastoreType == other.datastoreType
-            && rootIdentifier.equals(other.rootIdentifier);
+        return opt == rootIdentifier ? this : DOMDataTreeIdentifier.of(datastoreType, opt);
     }
 
     @Override
@@ -100,6 +116,17 @@ public final class DOMDataTreeIdentifier implements HierarchicalIdentifier<DOMDa
         return otherIter.hasNext() ? -1 : 0;
     }
 
+    @Override
+    public int hashCode() {
+        return datastoreType.hashCode() * 31 + rootIdentifier.hashCode();
+    }
+
+    @Override
+    public boolean equals(final @Nullable Object obj) {
+        return this == obj || obj instanceof DOMDataTreeIdentifier other && datastoreType == other.datastoreType
+            && rootIdentifier.equals(other.rootIdentifier);
+    }
+
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(this).add("datastore", datastoreType).add("root", rootIdentifier).toString();
index 71b978a70fbc5a3805acbdab56222d096290fcc3..c15e246fd998c19b445a86e09a2f546d3e28a368 100644 (file)
@@ -37,13 +37,13 @@ final class DTIv1 implements Externalizable {
 
     @Override
     public void writeExternal(final ObjectOutput out) throws IOException {
-        id.getDatastoreType().writeTo(out);
-        out.writeObject(id.getRootIdentifier());
+        id.datastore().writeTo(out);
+        out.writeObject(id.path());
     }
 
     @Override
     public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
-        id = new DOMDataTreeIdentifier(LogicalDatastoreType.readFrom(in), (YangInstanceIdentifier) in.readObject());
+        id = DOMDataTreeIdentifier.of(LogicalDatastoreType.readFrom(in), (YangInstanceIdentifier) in.readObject());
     }
 
     @java.io.Serial
index ee597bfdf98695ab3e086ab1d18be43c01ac5232..e1e7450a081efac6df5ec7f3dbd51aa691cf032a 100644 (file)
@@ -35,26 +35,26 @@ class DOMDataTreeIdentifierTest {
     private static final YangInstanceIdentifier TEST_YII_IID =
         YangInstanceIdentifier.of(QName.create(TEST_MODULE, TEST_LISTS));
     private static final DOMDataTreeIdentifier REF_TREE =
-        new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, REF_YII_IID);
+        DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, REF_YII_IID);
     private static final DOMDataTreeIdentifier TEST_DIFF_TREE =
-        new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL,TEST_YII_IID);
+        DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL,TEST_YII_IID);
 
     @Test
     void constructTest() {
-        assertNotNull(new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, REF_YII_IID), "Instantiation");
+        assertNotNull(DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, REF_YII_IID), "Instantiation");
     }
 
     @Test
     void hashCodeTest() {
         assertEquals(REF_TREE.hashCode(),
-            new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, REF_YII_IID).hashCode());
+            DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, REF_YII_IID).hashCode());
         assertNotEquals(REF_TREE.hashCode(), TEST_DIFF_TREE.hashCode());
     }
 
     @Test
     void equalsTest() {
-        assertEquals(REF_TREE, new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, REF_YII_IID));
-        assertNotEquals(REF_TREE, new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, REF_YII_IID));
+        assertEquals(REF_TREE, DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, REF_YII_IID));
+        assertNotEquals(REF_TREE, DOMDataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, REF_YII_IID));
         assertEquals(REF_TREE, REF_TREE);
         assertNotEquals(REF_TREE, new Object());
         assertNotEquals(REF_TREE, TEST_DIFF_TREE);
@@ -65,21 +65,21 @@ class DOMDataTreeIdentifierTest {
         final var compareFirstIid = YangInstanceIdentifier.of(QName.create(TEST_MODULE, COMPARE_FIRST_LISTS));
         final var compareSecondIid = YangInstanceIdentifier.of(QName.create(TEST_MODULE, COMPARE_SECOND_LISTS));
 
-        assertEquals(0, REF_TREE.compareTo(new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, REF_YII_IID)));
+        assertEquals(0, REF_TREE.compareTo(DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, REF_YII_IID)));
         assertNotEquals(0,
-            REF_TREE.compareTo(new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, REF_YII_IID)));
-        assertEquals(1, new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL,
+            REF_TREE.compareTo(DOMDataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, REF_YII_IID)));
+        assertEquals(1, DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL,
             YangInstanceIdentifier.of(QName.create(TEST_MODULE, REF_LISTS), QName.create(TEST_MODULE, TEST_LISTS)))
                 .compareTo(REF_TREE));
-        assertTrue(new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, compareFirstIid)
-            .compareTo(new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, compareSecondIid)) < 0);
-        assertTrue(new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, compareSecondIid)
-            .compareTo(new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, compareFirstIid)) > 0);
+        assertTrue(DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, compareFirstIid)
+            .compareTo(DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, compareSecondIid)) < 0);
+        assertTrue(DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, compareSecondIid)
+            .compareTo(DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, compareFirstIid)) > 0);
     }
 
     @Test
     void containsTest() {
-        assertTrue(REF_TREE.contains(new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, REF_YII_IID)));
+        assertTrue(REF_TREE.contains(DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, REF_YII_IID)));
         assertEquals(false, REF_TREE.contains(TEST_DIFF_TREE));
     }
 
index 07773f3d76ae6f19970b61a4a2828528a839ecad..06a4e161081b12dcb707ed54d1a78ed7560f6fea 100644 (file)
@@ -46,9 +46,9 @@ public abstract class AbstractDOMDataBroker extends AbstractDOMForwardedTransact
 
         if (treeChange) {
             supportedExtensions = List.of((DOMDataTreeChangeService) (treeId, listener) -> {
-                final var dsType = treeId.getDatastoreType();
+                final var dsType = treeId.datastore();
                 if (getTxFactories().get(dsType) instanceof DOMStoreTreeChangePublisher publisher) {
-                    return publisher.registerTreeChangeListener(treeId.getRootIdentifier(), listener);
+                    return publisher.registerTreeChangeListener(treeId.path(), listener);
                 }
                 throw new IllegalStateException("Publisher for " + dsType + " data store is not available");
             });
index 28ed420567228f8f8d43ea6a25a1e194b79ce6b2..e740b37ba05db7f608834d497e4147d9bab3bffb 100644 (file)
@@ -400,7 +400,7 @@ public final class DOMRpcRouter extends AbstractRegistration implements Effectiv
         @Override
         public ListenableFuture<? extends DOMActionResult> invokeAction(final Absolute type,
                 final DOMDataTreeIdentifier path, final ContainerNode input) {
-            final YangInstanceIdentifier pathRoot = path.getRootIdentifier();
+            final YangInstanceIdentifier pathRoot = path.path();
             checkArgument(!pathRoot.isEmpty(), "Action path must not be empty");
 
             final DOMActionRoutingTableEntry entry = (DOMActionRoutingTableEntry) actionRoutingTable.getEntry(type);
index 1d19e69a65a30a1060940f0e9a589f5a6279727c..52097d09bc286221e8d3d9439742fdad6f87d504 100644 (file)
@@ -33,8 +33,7 @@ final class OperationInvocation {
             final Absolute type, final DOMDataTreeIdentifier path, final ContainerNode input) {
         var impls = entry.getImplementations(path);
         if (impls == null) {
-            impls = entry.getImplementations(
-                new DOMDataTreeIdentifier(path.getDatastoreType(), YangInstanceIdentifier.of()));
+            impls = entry.getImplementations(DOMDataTreeIdentifier.of(path.datastore(), YangInstanceIdentifier.of()));
             if (impls == null) {
                 return Futures.immediateFailedFuture(new DOMActionNotAvailableException(
                     "No implementation of Action %s available for %s", type, path));
index 11a20e3004c875f698f3a8289eb3b04cca45cde2..aef94a089289e8e179fe42d6c3de9a2e4b03803e 100644 (file)
@@ -70,11 +70,11 @@ public class DOMDataTreeListenerTest extends AbstractDatastoreTest {
             .withChild(OUTER_LIST_2)
             .build();
 
-    private static final DOMDataTreeIdentifier ROOT_DATA_TREE_ID = new DOMDataTreeIdentifier(
-            LogicalDatastoreType.CONFIGURATION, TestModel.TEST_PATH);
+    private static final DOMDataTreeIdentifier ROOT_DATA_TREE_ID =
+        DOMDataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, TestModel.TEST_PATH);
 
-    private static final DOMDataTreeIdentifier OUTER_LIST_DATA_TREE_ID = new DOMDataTreeIdentifier(
-            LogicalDatastoreType.CONFIGURATION, TestModel.OUTER_LIST_PATH);
+    private static final DOMDataTreeIdentifier OUTER_LIST_DATA_TREE_ID =
+        DOMDataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, TestModel.OUTER_LIST_PATH);
 
     @Before
     public void setupStore() {
index 3d51e14cfee35d74f260d9f512a6828190b4872e..0deaddea71f3d1883071222ba916d02241e5fd15 100644 (file)
@@ -258,7 +258,7 @@ public class DOMRpcRouterTest {
     private static ListenableFuture<? extends DOMActionResult> invokeBaz(final DOMActionService actionService,
             final YangInstanceIdentifier path) {
         return actionService.invokeAction(Actions.BAZ_TYPE,
-            new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, path),
+            DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, path),
             Builders.containerBuilder().withNodeIdentifier(new NodeIdentifier(Actions.INPUT)).build());
     }
 }
index fd548dfa603bc49ce1a1eb2b1622022393f2f668..2907c949e0517eb924e3eb8fb4390a0d7a8172e6 100644 (file)
@@ -25,13 +25,13 @@ import org.slf4j.LoggerFactory;
  */
 @Beta
 public final class DOMDataTreePrefixTable<V> {
-
     private static final Logger LOG = LoggerFactory.getLogger(DOMDataTreePrefixTable.class);
+
     private final Map<LogicalDatastoreType, DOMDataTreePrefixTableEntry<V>> roots =
         new EnumMap<>(LogicalDatastoreType.class);
 
     private DOMDataTreePrefixTable() {
-
+        // Hidden in purpose
     }
 
     public static <V> DOMDataTreePrefixTable<V> create() {
@@ -46,8 +46,8 @@ public final class DOMDataTreePrefixTable<V> {
      * @return closest non-null entry towards root or null if no entry towards root exists.
      */
     public @Nullable DOMDataTreePrefixTableEntry<V> lookup(final @NonNull DOMDataTreeIdentifier prefix) {
-        final DOMDataTreePrefixTableEntry<V> t = roots.get(prefix.getDatastoreType());
-        return t == null ? null : t.lookup(prefix.getRootIdentifier());
+        final var entryt = roots.get(prefix.datastore());
+        return entryt == null ? null : entryt.lookup(prefix.path());
     }
 
     /**
@@ -58,13 +58,13 @@ public final class DOMDataTreePrefixTable<V> {
      * @throws IllegalStateException If value is already stored for provided prefix
      */
     public void store(final @NonNull DOMDataTreeIdentifier prefix, final @NonNull V value) {
-        DOMDataTreePrefixTableEntry<V> domDataTreePrefixTableEntry = roots.get(prefix.getDatastoreType());
+        var domDataTreePrefixTableEntry = roots.get(prefix.datastore());
         if (domDataTreePrefixTableEntry == null) {
             domDataTreePrefixTableEntry = new DOMDataTreePrefixTableEntry<>();
-            roots.put(prefix.getDatastoreType(), domDataTreePrefixTableEntry);
+            roots.put(prefix.datastore(), domDataTreePrefixTableEntry);
         }
 
-        domDataTreePrefixTableEntry.store(prefix.getRootIdentifier(), value);
+        domDataTreePrefixTableEntry.store(prefix.path(), value);
     }
 
     /**
@@ -75,12 +75,12 @@ public final class DOMDataTreePrefixTable<V> {
      * @param prefix to be removed
      */
     public void remove(final @NonNull DOMDataTreeIdentifier prefix) {
-        final DOMDataTreePrefixTableEntry<V> t = roots.get(prefix.getDatastoreType());
-        if (t == null) {
+        final var entry = roots.get(prefix.datastore());
+        if (entry == null) {
             LOG.warn("Shard registration {} points to non-existent table", prefix);
             return;
         }
 
-        t.remove(prefix.getRootIdentifier());
+        entry.remove(prefix.path());
     }
 }
index 88ee9ec6bcbf72c9f306fbf385344c1f41f95934..d9413726eff89b79628854d45f20c73f283d5e9a 100644 (file)
@@ -24,7 +24,7 @@ public class DOMDataTreePrefixTableTest {
         final Object testObject = new Object();
         final YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.of(QName.create("", "test"));
         final DOMDataTreeIdentifier domDataTreeIdentifier =
-                new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, yangInstanceIdentifier);
+                DOMDataTreeIdentifier.of(LogicalDatastoreType.OPERATIONAL, yangInstanceIdentifier);
 
         domDataTreePrefixTable.store(domDataTreeIdentifier, testObject);
         assertEquals(QName.create("", "test"),
@@ -33,7 +33,7 @@ public class DOMDataTreePrefixTableTest {
         assertNull(domDataTreePrefixTable.lookup(domDataTreeIdentifier));
 
         final DOMDataTreeIdentifier invalidDOMDataTreeIdentifier =
-                new DOMDataTreeIdentifier(LogicalDatastoreType.CONFIGURATION, yangInstanceIdentifier);
+                DOMDataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, yangInstanceIdentifier);
         domDataTreePrefixTable.remove(invalidDOMDataTreeIdentifier);
         assertNull(domDataTreePrefixTable.lookup(invalidDOMDataTreeIdentifier));
     }
index 8f51fe9a4018135e74e95e39e15a1730f07c9a3f..515b07a6dfb78a7f208295d23070de4eaa12c354 100644 (file)
@@ -307,8 +307,8 @@ public class TracingBroker implements TracingDOMDataBroker {
         final var ext = delegate.extension(type);
         if (DOMDataTreeChangeService.class.equals(type) && ext instanceof DOMDataTreeChangeService treeChange) {
             return type.cast((DOMDataTreeChangeService) (domDataTreeIdentifier, listener) -> {
-                final var rootId = domDataTreeIdentifier.getRootIdentifier();
-                if (isRegistrationWatched(rootId, domDataTreeIdentifier.getDatastoreType())) {
+                final var rootId = domDataTreeIdentifier.path();
+                if (isRegistrationWatched(rootId, domDataTreeIdentifier.datastore())) {
                     LOG.warn("{} registration (registerDataTreeChangeListener) for {} from {}.",
                         listener instanceof ClusteredDOMDataTreeChangeListener ? "Clustered" : "Non-clustered",
                             toPathString(rootId), getStackSummary());