Remove DataNodeIterator 87/88087/2
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 27 Feb 2020 08:32:19 +0000 (09:32 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 27 Feb 2020 08:33:28 +0000 (09:33 +0100)
This utility is superfluous as we have a more general/efficient
ways of achieving the same result. Remove it and migrate the tests
to test generic infra.

Change-Id: I16bd9b8b6f86e64da3c45e6f0441e97f951fb7cb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/DataNodeIterator.java [deleted file]
yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/DataNodeIteratorTest.java [deleted file]
yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/SchemaNodeUtilsTest.java

diff --git a/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/DataNodeIterator.java b/yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/DataNodeIterator.java
deleted file mode 100644 (file)
index fdfee35..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 2013 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.yangtools.yang.model.util;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
-import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
-import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-
-/**
- * DataNodeIterator is iterator, which walks down whole YANG DataNodeContainer
- * and walks all instances of {@link DataSchemaNode} present in subtree.
- *
- * <p>
- * Iterator instance is eagerly created, walking happens on initialization. Iteration is not ordered.
- *
- * @deprecated Use {@link SchemaNodeUtils#getAllContainers(DataNodeContainer)},
- *             {@link SchemaNodeUtils#getAllTypeDefinitions(DataNodeContainer)} or
- *             {@link SchemaNodeUtils#traverse(DataNodeAggregator, DataNodeContainer)} instead.
- */
-@Deprecated
-public class DataNodeIterator extends DataNodeAggregator implements Iterator<DataSchemaNode> {
-    private final List<ListSchemaNode> allLists = new ArrayList<>();
-    private final List<ContainerSchemaNode> allContainers = new ArrayList<>();
-    private final List<ChoiceSchemaNode> allChoices = new ArrayList<>();
-    private final List<DataSchemaNode> allChilds = new ArrayList<>();
-    private final List<GroupingDefinition> allGroupings = new ArrayList<>();
-    private final List<TypeDefinition<?>> allTypedefs = new ArrayList<>();
-
-    private final DataNodeContainer container;
-
-    public DataNodeIterator(final DataNodeContainer container) {
-        if (container == null) {
-            throw new IllegalArgumentException("Data Node Container MUST be specified and cannot be NULL!");
-        }
-
-        this.container = container;
-        SchemaNodeUtils.traverse(this, container);
-    }
-
-    /**
-     * Returns list all containers present in subtree.
-     *
-     * @return Returns list all containers present in subtree.
-     */
-    public List<ContainerSchemaNode> allContainers() {
-        return allContainers;
-    }
-
-    /**
-     * Returns list all lists present in subtree.
-     *
-     * @return Returns list all containers present in subtree.
-     */
-    public List<ListSchemaNode> allLists() {
-        return allLists;
-    }
-
-    /**
-     * Returns list all choices present in subtree.
-     *
-     * @return Returns list all containers present in subtree.
-     */
-    public List<ChoiceSchemaNode> allChoices() {
-        return allChoices;
-    }
-
-    /**
-     * Returns list all groupings present in subtree.
-     *
-     * @return Returns list all containers present in subtree.
-     */
-    public List<GroupingDefinition> allGroupings() {
-        return allGroupings;
-    }
-
-    /**
-     * Returns list all typedefs present in subtree.
-     *
-     * @return Returns list all containers present in subtree.
-     */
-    public List<TypeDefinition<?>> allTypedefs() {
-        return allTypedefs;
-    }
-
-    @Override
-    public boolean hasNext() {
-        return !container.getChildNodes().isEmpty();
-    }
-
-    @Override
-    public DataSchemaNode next() {
-        return allChilds.iterator().next();
-    }
-
-    @Override
-    protected void addChild(final DataSchemaNode childNode) {
-        allChilds.add(childNode);
-    }
-
-    @Override
-    protected void addContainer(final ContainerSchemaNode containerNode) {
-        allContainers.add(containerNode);
-    }
-
-    @Override
-    protected void addList(final ListSchemaNode list) {
-        allLists.add(list);
-    }
-
-    @Override
-    protected void addChoice(final ChoiceSchemaNode choiceNode) {
-        allChoices.add(choiceNode);
-    }
-
-    @Override
-    protected void addTypedefs(final Collection<? extends TypeDefinition<?>> typeDefs) {
-        allTypedefs.addAll(typeDefs);
-    }
-
-    @Override
-    protected void addGrouping(final GroupingDefinition grouping) {
-        allGroupings.add(grouping);
-    }
-}
diff --git a/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/DataNodeIteratorTest.java b/yang/yang-model-util/src/test/java/org/opendaylight/yangtools/yang/model/util/DataNodeIteratorTest.java
deleted file mode 100644 (file)
index 4a632fd..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 2014 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.yangtools.yang.model.util;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-
-import com.google.common.collect.ImmutableSet;
-import java.util.Collections;
-import java.util.NoSuchElementException;
-import java.util.Set;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.CopyableNode;
-import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
-import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
-import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
-import org.opendaylight.yangtools.yang.model.api.OperationDefinition;
-import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
-
-@RunWith(MockitoJUnitRunner.class)
-public class DataNodeIteratorTest {
-    private DataNodeIterator dataNodeIterator;
-
-    @Before
-    public void before() {
-        this.dataNodeIterator = new DataNodeIterator(mockDataNodeContainer(DataNodeContainer.class));
-    }
-
-    private static <T extends DataNodeContainer> T mockDataNodeContainer(final Class<T> clazz) {
-        final T mock = mock(clazz);
-        doReturn(Collections.emptyList()).when(mock).getChildNodes();
-        doReturn(Collections.emptySet()).when(mock).getGroupings();
-        doReturn(Collections.emptySet()).when(mock).getTypeDefinitions();
-        return mock;
-    }
-
-    private static <T extends OperationDefinition> T mockOperationDefinition(final T mock) {
-        doReturn(Collections.emptySet()).when(mock).getTypeDefinitions();
-        doReturn(mockDataNodeContainer(ContainerSchemaNode.class)).when(mock).getOutput();
-        return mock;
-    }
-
-    @Deprecated
-    private static <T extends CopyableNode> T mockCopyableNode(final boolean augmenting, final T node) {
-        doReturn(augmenting).when(node).isAugmenting();
-        return node;
-    }
-
-    @Test(expected = IllegalArgumentException.class)
-    public void createDataNodeIteratorWithNullArgument() {
-        new DataNodeIterator(null);
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void removeFromEmptyDataNodeContainer() {
-        dataNodeIterator.remove();
-    }
-
-    @Test(expected = NoSuchElementException.class)
-    public void tryNextOnEmptyDataContainer() {
-        dataNodeIterator.next();
-    }
-
-    @Test
-    public void createDataNodeIteratorWith() {
-        assertFalse("Has no next", dataNodeIterator.hasNext());
-        assertEquals("Should be empty list", Collections.emptyList(), dataNodeIterator.allChoices());
-        assertEquals("Should be empty list", Collections.emptyList(), dataNodeIterator.allContainers());
-        assertEquals("Should be empty list", Collections.emptyList(), dataNodeIterator.allTypedefs());
-        assertEquals("Should be empty list", Collections.emptyList(), dataNodeIterator.allGroupings());
-        assertEquals("Should be empty list", Collections.emptyList(), dataNodeIterator.allLists());
-    }
-
-    @Test
-    public void testTraversal() {
-        final Module mockedModule = mockDataNodeContainer(Module.class);
-
-        final ContainerSchemaNode mockedAugmentingContainer = mockCopyableNode(true, mock(ContainerSchemaNode.class));
-        final ContainerSchemaNode mockedContainer = mockCopyableNode(false, mockDataNodeContainer(
-            ContainerSchemaNode.class));
-
-        final ListSchemaNode mockedList = mockCopyableNode(false, mockDataNodeContainer(ListSchemaNode.class));
-
-        final ChoiceSchemaNode mockedChoice = mockCopyableNode(false, mock(ChoiceSchemaNode.class));
-        final CaseSchemaNode mockedCase1 = mockDataNodeContainer(CaseSchemaNode.class);
-        final QName mockedCase1QName = QName.create("", "case1");
-        final CaseSchemaNode mockedCase2 = mockDataNodeContainer(CaseSchemaNode.class);
-        final QName mockedCase2QName = QName.create("", "case2");
-        doReturn(ImmutableSet.of(mockedCase1, mockedCase2)).when(mockedChoice).getCases();
-
-        final Set<DataSchemaNode> childNodes = ImmutableSet.of(mockedAugmentingContainer, mockedContainer, mockedList,
-                mockedChoice);
-        doReturn(childNodes).when(mockedModule).getChildNodes();
-
-        final NotificationDefinition mockedNotification = mockDataNodeContainer(NotificationDefinition.class);
-        final ContainerSchemaNode mockedContainerInNotification = mockCopyableNode(false,
-            mockDataNodeContainer(ContainerSchemaNode.class));
-        final Set<DataSchemaNode> notificationChildNodes = ImmutableSet.of(mockedContainerInNotification);
-        doReturn(notificationChildNodes).when(mockedNotification).getChildNodes();
-        final Set<NotificationDefinition> notifications = ImmutableSet.of(mockedNotification);
-
-        doReturn(notifications).when(mockedModule).getNotifications();
-
-        final RpcDefinition mockedRpc = mockOperationDefinition(mock(RpcDefinition.class));
-        final ContainerSchemaNode mockedContainerInRpcInput = mockDataNodeContainer(ContainerSchemaNode.class);
-        final ListSchemaNode mockedListInRpcInputContainer = mockCopyableNode(false,
-            mockDataNodeContainer(ListSchemaNode.class));
-        final Set<DataSchemaNode> rpcInputChildNodes = ImmutableSet.of(mockedListInRpcInputContainer);
-        doReturn(rpcInputChildNodes).when(mockedContainerInRpcInput).getChildNodes();
-        doReturn(mockedContainerInRpcInput).when(mockedRpc).getInput();
-        final Set<RpcDefinition> rpcs = ImmutableSet.of(mockedRpc);
-
-        doReturn(rpcs).when(mockedModule).getRpcs();
-
-        final GroupingDefinition mockedGrouping = mockDataNodeContainer(GroupingDefinition.class);
-        final Set<GroupingDefinition> groupings = ImmutableSet.of(mockedGrouping);
-
-        doReturn(groupings).when(mockedModule).getGroupings();
-
-        final DataNodeIterator it = new DataNodeIterator(mockedModule);
-        assertFalse(it.allContainers().contains(mockedAugmentingContainer));
-        assertTrue(it.allContainers().contains(mockedContainer));
-        assertTrue(it.allLists().contains(mockedList));
-        assertTrue(it.allChoices().contains(mockedChoice));
-        assertTrue(it.allChoices().get(0).getCases().contains(mockedCase1));
-        assertTrue(it.allChoices().get(0).getCases().contains(mockedCase2));
-        assertTrue(it.allContainers().contains(mockedContainerInNotification));
-        assertTrue(it.allLists().contains(mockedListInRpcInputContainer));
-        assertTrue(it.allGroupings().contains(mockedGrouping));
-    }
-}
index cd0e1fefce26147353b9a68c6396924e72c1d8a6..45309e2d608482f7667262292f947366e151beda 100644 (file)
@@ -9,16 +9,36 @@ package org.opendaylight.yangtools.yang.model.util;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
 
+import com.google.common.collect.ImmutableSet;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Optional;
+import java.util.Set;
 import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
+import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.CopyableNode;
+import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.DerivableSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
+import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
+import org.opendaylight.yangtools.yang.model.api.OperationDefinition;
+import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 
 public class SchemaNodeUtilsTest {
@@ -55,4 +75,75 @@ public class SchemaNodeUtilsTest {
                 .getRootOriginalIfPossible(null);
         assertNull(rootOriginalIfPossible);
     }
+
+    @Test
+    public void testTraversal() {
+        final Module mockedModule = mockDataNodeContainer(Module.class);
+
+        final ContainerSchemaNode mockedAugmentingContainer = mockCopyableNode(true, mock(ContainerSchemaNode.class));
+        final ContainerSchemaNode mockedContainer = mockCopyableNode(false, mockDataNodeContainer(
+            ContainerSchemaNode.class));
+
+        final ListSchemaNode mockedList = mockCopyableNode(false, mockDataNodeContainer(ListSchemaNode.class));
+
+        final ChoiceSchemaNode mockedChoice = mockCopyableNode(false, mock(ChoiceSchemaNode.class));
+        final CaseSchemaNode mockedCase1 = mockDataNodeContainer(CaseSchemaNode.class);
+        final CaseSchemaNode mockedCase2 = mockDataNodeContainer(CaseSchemaNode.class);
+        doReturn(ImmutableSet.of(mockedCase1, mockedCase2)).when(mockedChoice).getCases();
+
+        final Set<DataSchemaNode> childNodes = ImmutableSet.of(mockedAugmentingContainer, mockedContainer, mockedList,
+                mockedChoice);
+        doReturn(childNodes).when(mockedModule).getChildNodes();
+
+        final NotificationDefinition mockedNotification = mockDataNodeContainer(NotificationDefinition.class);
+        final ContainerSchemaNode mockedContainerInNotification = mockCopyableNode(false,
+            mockDataNodeContainer(ContainerSchemaNode.class));
+        final Set<DataSchemaNode> notificationChildNodes = ImmutableSet.of(mockedContainerInNotification);
+        doReturn(notificationChildNodes).when(mockedNotification).getChildNodes();
+        final Set<NotificationDefinition> notifications = ImmutableSet.of(mockedNotification);
+
+        doReturn(notifications).when(mockedModule).getNotifications();
+
+        final RpcDefinition mockedRpc = mockOperationDefinition(mock(RpcDefinition.class));
+        final ContainerSchemaNode mockedContainerInRpcInput = mockDataNodeContainer(ContainerSchemaNode.class);
+        final ListSchemaNode mockedListInRpcInputContainer = mockCopyableNode(false,
+            mockDataNodeContainer(ListSchemaNode.class));
+        final Set<DataSchemaNode> rpcInputChildNodes = ImmutableSet.of(mockedListInRpcInputContainer);
+        doReturn(rpcInputChildNodes).when(mockedContainerInRpcInput).getChildNodes();
+        doReturn(mockedContainerInRpcInput).when(mockedRpc).getInput();
+        final Set<RpcDefinition> rpcs = ImmutableSet.of(mockedRpc);
+
+        doReturn(rpcs).when(mockedModule).getRpcs();
+
+        final GroupingDefinition mockedGrouping = mockDataNodeContainer(GroupingDefinition.class);
+        final Set<GroupingDefinition> groupings = ImmutableSet.of(mockedGrouping);
+
+        doReturn(groupings).when(mockedModule).getGroupings();
+
+        final Collection<? extends ContainerSchemaNode> containers = SchemaNodeUtils.getAllContainers(mockedModule);
+        assertEquals(2, containers.size());
+        assertFalse(containers.contains(mockedAugmentingContainer));
+        assertTrue(containers.contains(mockedContainer));
+        assertTrue(containers.contains(mockedContainerInNotification));
+    }
+
+    @Deprecated
+    private static <T extends CopyableNode> T mockCopyableNode(final boolean augmenting, final T node) {
+        doReturn(augmenting).when(node).isAugmenting();
+        return node;
+    }
+
+    private static <T extends DataNodeContainer> T mockDataNodeContainer(final Class<T> clazz) {
+        final T mock = mock(clazz);
+        doReturn(Collections.emptyList()).when(mock).getChildNodes();
+        doReturn(Collections.emptySet()).when(mock).getGroupings();
+        doReturn(Collections.emptySet()).when(mock).getTypeDefinitions();
+        return mock;
+    }
+
+    private static <T extends OperationDefinition> T mockOperationDefinition(final T mock) {
+        doReturn(Collections.emptySet()).when(mock).getTypeDefinitions();
+        doReturn(mockDataNodeContainer(ContainerSchemaNode.class)).when(mock).getOutput();
+        return mock;
+    }
 }