Eliminate dependecies on parser internals 05/63205/3
authorRobert Varga <robert.varga@pantheon.tech>
Sun, 17 Sep 2017 09:53:06 +0000 (11:53 +0200)
committerRobert Varga <nite@hq.sk>
Mon, 18 Sep 2017 12:47:53 +0000 (12:47 +0000)
yangtools have moved sort utilities into utility components. Also
remove reference to YangValidationException, as it is not used anywhere
except this codebase.

Change-Id: Ife5ef6e3b83768d111eb3f16de431a078d747942
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderImpl.java
binding/mdsal-binding-generator-impl/src/test/java/org/opendaylight/mdsal/binding/yang/types/TypeProviderImplTest.java
binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/GroupingDefinitionDependencySort.java
binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/NodeWrappedType.java [new file with mode: 0644]
binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/TypeProviderImpl.java

index caff06f0efde6679cbf7cdb4c61bd9bed58b35e2..c5526b4525d4c1576dfa54e1958ff2205c4ad331 100644 (file)
@@ -86,7 +86,6 @@ import org.opendaylight.yangtools.yang.model.util.RevisionAwareXPathImpl;
 import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
 import org.opendaylight.yangtools.yang.model.util.type.BaseTypes;
 import org.opendaylight.yangtools.yang.model.util.type.CompatUtils;
-import org.opendaylight.yangtools.yang.parser.util.YangValidationException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -315,17 +314,14 @@ public final class TypeProviderImpl implements TypeProvider {
     private Type javaTypeForLeafrefOrIdentityRef(final TypeDefinition<?> typeDefinition, final SchemaNode parentNode) {
         if (typeDefinition instanceof LeafrefTypeDefinition) {
             final LeafrefTypeDefinition leafref = (LeafrefTypeDefinition) typeDefinition;
-            if (isLeafRefSelfReference(leafref, parentNode)) {
-                throw new YangValidationException("Leafref " + leafref.toString() + " is referencing itself, incoming" +
-                        " StackOverFlowError detected.");
-            }
+            Preconditions.checkArgument(!isLeafRefSelfReference(leafref, parentNode),
+                "Leafref %s is referencing itself, incoming StackOverFlowError detected.", leafref);
             return provideTypeForLeafref(leafref, parentNode);
         } else if (typeDefinition instanceof IdentityrefTypeDefinition) {
-            final IdentityrefTypeDefinition idref = (IdentityrefTypeDefinition) typeDefinition;
-            return provideTypeForIdentityref(idref);
-        } else {
-            return null;
+            return provideTypeForIdentityref((IdentityrefTypeDefinition) typeDefinition);
         }
+
+        return null;
     }
 
     /**
index c8f0656e9ecf465733ad5bb5f86651ca1d910375..0aa5658665f30f32f61323293395801a85112fa4 100644 (file)
@@ -40,17 +40,17 @@ import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
 import org.opendaylight.yangtools.yang.model.util.type.BaseTypes;
 import org.opendaylight.yangtools.yang.model.util.type.IdentityrefTypeBuilder;
-import org.opendaylight.yangtools.yang.parser.util.YangValidationException;
 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
 
 public class TypeProviderImplTest {
 
-    @Test (expected = YangValidationException.class)
+    @Test (expected = IllegalArgumentException.class)
     public void testLeafRefRelativeSelfReference() throws Exception {
         File relative = new File(getClass().getResource("/leafref/leafref-relative-invalid.yang").toURI());
 
         final SchemaContext schemaContext = YangParserTestUtils.parseYangSources(relative);
-        final Module moduleRelative = schemaContext.findModuleByNamespace(new URI("urn:xml:ns:yang:lrr")).iterator().next();
+        final Module moduleRelative = schemaContext.findModuleByNamespace(new URI("urn:xml:ns:yang:lrr")).iterator()
+                .next();
         final TypeProviderImpl typeProvider = new TypeProviderImpl(schemaContext);
 
         final QName listNode = QName.create(moduleRelative.getQNameModule(), "neighbor");
@@ -63,12 +63,13 @@ public class TypeProviderImplTest {
         assertNotNull(leafrefResolvedType);
     }
 
-    @Test (expected = YangValidationException.class)
+    @Test (expected = IllegalArgumentException.class)
     public void testLeafRefAbsoluteSelfReference() throws Exception {
         File relative = new File(getClass().getResource("/leafref/leafref-absolute-invalid.yang").toURI());
 
         final SchemaContext schemaContext = YangParserTestUtils.parseYangSources(relative);
-        final Module moduleRelative = schemaContext.findModuleByNamespace(new URI("urn:xml:ns:yang:lra")).iterator().next();
+        final Module moduleRelative = schemaContext.findModuleByNamespace(new URI("urn:xml:ns:yang:lra")).iterator()
+                .next();
         final TypeProviderImpl typeProvider = new TypeProviderImpl(schemaContext);
 
         final QName listNode = QName.create(moduleRelative.getQNameModule(), "neighbor");
@@ -86,7 +87,8 @@ public class TypeProviderImplTest {
         File valid = new File(getClass().getResource("/leafref/leafref-valid.yang").toURI());
 
         final SchemaContext schemaContext = YangParserTestUtils.parseYangSources(valid);
-        final Module moduleValid = schemaContext.findModuleByNamespace(new URI("urn:xml:ns:yang:lrv")).iterator().next();
+        final Module moduleValid = schemaContext.findModuleByNamespace(new URI("urn:xml:ns:yang:lrv")).iterator()
+                .next();
         final TypeProviderImpl typeProvider = new TypeProviderImpl(schemaContext);
 
         final QName listNode = QName.create(moduleValid.getQNameModule(), "neighbor");
@@ -116,7 +118,8 @@ public class TypeProviderImplTest {
         final TypeProviderImpl typeProvider = new TypeProviderImpl(schemaContext);
 
         final SchemaPath refTypePath = SchemaPath.create(true, QName.create("cont1"), QName.create("list1"));
-        final GeneratedTypeBuilderImpl refType = new GeneratedTypeBuilderImpl("org.opendaylight.yangtools.test", "TestType");
+        final GeneratedTypeBuilderImpl refType = new GeneratedTypeBuilderImpl("org.opendaylight.yangtools.test",
+            "TestType");
         typeProvider.putReferencedType(refTypePath, refType);
         final StringTypeDefinition stringType = BaseTypes.stringType();
 
@@ -162,14 +165,16 @@ public class TypeProviderImplTest {
         assertEquals("java.lang.Boolean.FALSE", typeProvider.getTypeDefaultConstruction(leafSchemaNode, "false"));
 
         // decimal type
-        final DecimalTypeDefinition decimalType = BaseTypes.decimalTypeBuilder(refTypePath).setFractionDigits(4).build();
+        final DecimalTypeDefinition decimalType = BaseTypes.decimalTypeBuilder(refTypePath).setFractionDigits(4)
+                .build();
 
         reset(leafSchemaNode);
         doReturn(decimalType).when(leafSchemaNode).getType();
         doReturn(SchemaPath.ROOT).when(leafSchemaNode).getPath();
         doReturn(QName.create("Cont1")).when(leafSchemaNode).getQName();
 
-        assertEquals("new java.math.BigDecimal(\"111\")", typeProvider.getTypeDefaultConstruction(leafSchemaNode, "111"));
+        assertEquals("new java.math.BigDecimal(\"111\")", typeProvider.getTypeDefaultConstruction(leafSchemaNode,
+            "111"));
 
         // empty type
         final EmptyTypeDefinition emptyType = BaseTypes.emptyType();
@@ -179,7 +184,8 @@ public class TypeProviderImplTest {
         doReturn(SchemaPath.ROOT).when(leafSchemaNode).getPath();
         doReturn(QName.create("Cont1")).when(leafSchemaNode).getQName();
 
-        assertEquals("java.lang.Boolean.valueOf(\"default value\")", typeProvider.getTypeDefaultConstruction(leafSchemaNode, "default value"));
+        assertEquals("java.lang.Boolean.valueOf(\"default value\")", typeProvider.getTypeDefaultConstruction(
+            leafSchemaNode, "default value"));
 
         // enum type
         final EnumTypeDefinition enumType =  BaseTypes.enumerationTypeBuilder(refTypePath).build();
index e0c470b819a1e9bd9e59cb40c83e3e979c407912..4285e1c3452a40935f6501f941310185eac24e4a 100644 (file)
@@ -16,6 +16,8 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import org.opendaylight.yangtools.util.TopologicalSort;
+import org.opendaylight.yangtools.util.TopologicalSort.Node;
 import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
 import org.opendaylight.yangtools.yang.model.api.ChoiceCaseNode;
 import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
@@ -24,24 +26,16 @@ import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.GroupingDefinition;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.UsesNode;
-import org.opendaylight.yangtools.yang.parser.util.NodeWrappedType;
-import org.opendaylight.yangtools.yang.parser.util.TopologicalSort;
-import org.opendaylight.yangtools.yang.parser.util.TopologicalSort.Node;
 
 public class GroupingDefinitionDependencySort {
 
     /**
-     * Sorts set <code>groupingDefinitions</code> according to the mutual
-     * dependencies.<br>
+     * Sorts set <code>groupingDefinitions</code> according to the mutual dependencies.<br>
      *
-     * Elements of <code>groupingDefinitions</code> are firstly transformed to
-     * {@link org.opendaylight.yangtools.yang.parser.util.TopologicalSort.Node
-     * Node} interfaces and then are sorted by
-     * {@link org.opendaylight.yangtools.yang.parser.util.TopologicalSort#sort(Set)
-     * sort()} method of <code>TopologicalSort</code>.<br>
+     * Elements of <code>groupingDefinitions</code> are firstly transformed to {@link Node} interfaces and then are
+     * sorted by {@link TopologicalSort#sort(Set)} method.
      * <br>
      *
-     *
      * <i>Definition of dependency relation:<br>
      * The first <code>GroupingDefinition</code> object (in this context)
      * depends on second <code>GroupingDefinition</code> object if the first one
@@ -63,12 +57,12 @@ public class GroupingDefinitionDependencySort {
             throw new IllegalArgumentException("Set of Type Definitions " + "cannot be NULL!");
         }
 
-        final List<GroupingDefinition> resultGroupingDefinitions = new ArrayList<GroupingDefinition>();
+        final List<GroupingDefinition> resultGroupingDefinitions = new ArrayList<>();
         final Set<Node> unsorted = groupingDefinitionsToNodes(groupingDefinitions);
         final List<Node> sortedNodes = TopologicalSort.sort(unsorted);
         for (Node node : sortedNodes) {
             NodeWrappedType nodeWrappedType = (NodeWrappedType) node;
-            resultGroupingDefinitions.add((GroupingDefinition) (nodeWrappedType.getWrappedType()));
+            resultGroupingDefinitions.add((GroupingDefinition) nodeWrappedType.getWrappedType());
         }
         return resultGroupingDefinitions;
 
diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/NodeWrappedType.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/yang/types/NodeWrappedType.java
new file mode 100644 (file)
index 0000000..53d359d
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * 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.mdsal.binding.javav2.generator.yang.types;
+
+import org.opendaylight.yangtools.util.TopologicalSort.NodeImpl;
+
+public final class NodeWrappedType extends NodeImpl {
+    /**
+     * The payload which is saved inside Node
+     */
+    private final Object wrappedType;
+
+    /**
+     * Create new instance of class <code>NodeWrappedType</code>.
+     *
+     * @param wrappedType
+     *            object with payload data
+     */
+    NodeWrappedType(Object wrappedType) {
+        this.wrappedType = wrappedType;
+    }
+
+    /**
+     * Gets payload from class
+     *
+     * @return object with <code>wrappedType</code>
+     */
+    Object getWrappedType() {
+        return wrappedType;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (!(o instanceof NodeWrappedType)) {
+            return false;
+        }
+        NodeWrappedType nodeWrappedType = (NodeWrappedType) o;
+        if (!wrappedType.equals(nodeWrappedType.wrappedType)) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        return wrappedType.hashCode();
+    }
+
+    @Override
+    public String toString() {
+        return "NodeWrappedType{" + "wrappedType=" + wrappedType + '}';
+    }
+
+}
index aa5bda7e7401d7b334cbf9cd7490495eff2b6e61..31e1f0fcb2acb845d734eb149ca994d5e11cb0c0 100644 (file)
@@ -86,7 +86,6 @@ import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition;
 import org.opendaylight.yangtools.yang.model.util.ModuleDependencySort;
 import org.opendaylight.yangtools.yang.model.util.RevisionAwareXPathImpl;
 import org.opendaylight.yangtools.yang.model.util.SchemaContextUtil;
-import org.opendaylight.yangtools.yang.parser.util.YangValidationException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -597,10 +596,8 @@ public final class TypeProviderImpl implements TypeProvider {
             ModuleContext context) {
         if (typeDefinition instanceof LeafrefTypeDefinition) {
             final LeafrefTypeDefinition leafref = (LeafrefTypeDefinition) typeDefinition;
-            if (isLeafRefSelfReference(leafref, parentNode, schemaContext)) {
-                throw new YangValidationException("Leafref " + leafref.toString() + " is referencing itself, incoming" +
-                        " StackOverFlowError detected.");
-            }
+            Preconditions.checkArgument(!isLeafRefSelfReference(leafref, parentNode, schemaContext),
+                "Leafref %s is referencing itself, incoming StackOverFlowError detected.", leafref);
             return provideTypeForLeafref(leafref, parentNode, schemaContext, genTypeDefsContextMap, context);
         } else if (typeDefinition instanceof IdentityrefTypeDefinition) {
             final IdentityrefTypeDefinition idref = (IdentityrefTypeDefinition) typeDefinition;