Fixed getTypeDefaultConstruction method in TypeProvider. 25/3325/1
authorMartin Vitez <mvitez@cisco.com>
Fri, 29 Nov 2013 14:27:24 +0000 (15:27 +0100)
committerMartin Vitez <mvitez@cisco.com>
Mon, 2 Dec 2013 10:19:39 +0000 (11:19 +0100)
Signed-off-by: Martin Vitez <mvitez@cisco.com>
code-generator/binding-generator-impl/src/test/java/org/opendaylight/yangtools/sal/binding/generator/impl/TypeProviderIntegrationTest.java
code-generator/binding-generator-impl/src/test/resources/type-provider/test.yang
code-generator/binding-type-provider/src/main/java/org/opendaylight/yangtools/sal/binding/yang/types/TypeProviderImpl.java

index 10ff12620ad9731d460536366d0b66578e358560..e02778224bea202453afb0978d2ab71aef87d751 100644 (file)
@@ -17,7 +17,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
-import org.junit.Ignore;
+import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Test;
 import org.opendaylight.yangtools.sal.binding.yang.types.TypeProviderImpl;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
@@ -28,171 +29,230 @@ import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
 
 public class TypeProviderIntegrationTest {
     private final String PKG = "org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev131008.";
+    private static SchemaContext context;
+    private TypeProviderImpl provider;
+    private Module m;
+
+    @BeforeClass
+    public static void setup() throws ParseException {
+        final String path1 = TypeProviderIntegrationTest.class.getResource("/type-provider/test.yang").getPath();
+        final String path2 = TypeProviderIntegrationTest.class.getResource(
+                "/type-provider/ietf-inet-types@2010-09-24.yang").getPath();
+        context = resolveSchemaContextFromFiles(path1, path2);
+        assertNotNull(context);
+    }
 
-    private SchemaContext resolveSchemaContextFromFiles(final String... yangFiles) {
-        final YangModelParser parser = new YangParserImpl();
-
-        final List<File> inputFiles = new ArrayList<File>();
-        for (int i = 0; i < yangFiles.length; ++i) {
-            inputFiles.add(new File(yangFiles[i]));
-        }
-
-        final Set<Module> modules = parser.parseYangModels(inputFiles);
-        return parser.resolveSchemaContext(modules);
+    @Before
+    public void init() throws ParseException {
+        provider = new TypeProviderImpl(context);
+        m = context.findModuleByName("test", new SimpleDateFormat("yyyy-MM-dd").parse("2013-10-08"));
     }
 
     @Test
-    public void testGetTypeDefaultConstruction1() throws ParseException {
-        final String path1 = getClass().getResource("/type-provider/test.yang").getPath();
-        final String path2 = getClass().getResource("/type-provider/ietf-inet-types@2010-09-24.yang").getPath();
-        final SchemaContext context = resolveSchemaContextFromFiles(path1, path2);
-        assertNotNull(context);
-        TypeProviderImpl provider = new TypeProviderImpl(context);
-        Module m = context.findModuleByName("test", new SimpleDateFormat("yyyy-MM-dd").parse("2013-10-08"));
-
-        LeafSchemaNode leaf = (LeafSchemaNode)m.getDataChildByName("id-binary");
+    public void testGetTypeDefaultConstructionBinary() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("leaf-binary");
         String actual = provider.getTypeDefaultConstruction(leaf);
         assertEquals("new byte[] {77, 97, 110}", actual);
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("id-bits");
+        leaf = (LeafSchemaNode) m.getDataChildByName("ext-binary");
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "TestData.IdBits(false, false, true)", actual);
+        assertEquals("new " + PKG + "MyBinary(new byte[] {77, 97, 110})", actual);
+    }
+
+    @Test
+    public void testGetTypeDefaultConstructionBits() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("leaf-bits");
+        String actual = provider.getTypeDefaultConstruction(leaf);
+        assertEquals("new " + PKG + "TestData.LeafBits(false, false, true)", actual);
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("id-boolean");
+        leaf = (LeafSchemaNode) m.getDataChildByName("ext-bits");
         actual = provider.getTypeDefaultConstruction(leaf);
+        assertEquals("new " + PKG + "MyBits(false, false, true)", actual);
+    }
+
+    @Test
+    public void testGetTypeDefaultConstructionBoolean() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("leaf-boolean");
+        String actual = provider.getTypeDefaultConstruction(leaf);
         assertEquals("new java.lang.Boolean(\"true\")", actual);
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("id-decimal64");
+        leaf = (LeafSchemaNode) m.getDataChildByName("ext-boolean");
         actual = provider.getTypeDefaultConstruction(leaf);
+        assertEquals("new " + PKG + "MyBoolean(new java.lang.Boolean(\"true\"))", actual);
+    }
+
+    @Test
+    public void testGetTypeDefaultConstructionDecimal() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("leaf-decimal64");
+        String actual = provider.getTypeDefaultConstruction(leaf);
         assertEquals("new java.math.BigDecimal(\"3.14\")", actual);
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("id-empty");
+        leaf = (LeafSchemaNode) m.getDataChildByName("ext-decimal64");
         actual = provider.getTypeDefaultConstruction(leaf);
+        assertEquals("new " + PKG + "MyDecimal64(new java.math.BigDecimal(\"3.14\"))", actual);
+    }
+
+    @Test
+    public void testGetTypeDefaultConstructionEmpty() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("leaf-empty");
+        String actual = provider.getTypeDefaultConstruction(leaf);
         assertEquals("new java.lang.Boolean(\"false\")", actual);
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("id-enumeration");
+        leaf = (LeafSchemaNode) m.getDataChildByName("ext-empty");
         actual = provider.getTypeDefaultConstruction(leaf);
-        //assertEquals("org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev131008.IdEnumeration.Seven", actual);
+        assertEquals("new " + PKG + "MyEmpty(new java.lang.Boolean(\"false\"))", actual);
+    }
+
+    @Test
+    public void testGetTypeDefaultConstructionEnumeration() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("leaf-enumeration");
+        String actual = provider.getTypeDefaultConstruction(leaf);
+        assertEquals("org.opendaylight.yang.gen.v1.urn.opendaylight.test.rev131008.LeafEnumeration.Seven", actual);
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("id-8");
+        leaf = (LeafSchemaNode) m.getDataChildByName("ext-enumeration");
         actual = provider.getTypeDefaultConstruction(leaf);
+        assertEquals("new " + PKG + "MyEnumeration(" + PKG + "MyEnumeration.Seven)", actual);
+    }
+
+    @Test
+    public void testGetTypeDefaultConstructionInt8() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("leaf-int8");
+        String actual = provider.getTypeDefaultConstruction(leaf);
         assertEquals("new java.lang.Byte(\"11\")", actual);
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("id-16");
+        leaf = (LeafSchemaNode) m.getDataChildByName("ext-int8");
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.lang.Short(\"111\")", actual);
+        assertEquals("new " + PKG + "MyInt8(new java.lang.Byte(\"11\"))", actual);
+    }
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("id-32");
-        actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.lang.Integer(\"1111\")", actual);
+    @Test
+    public void testGetTypeDefaultConstructionInt16() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("leaf-int16");
+        String actual = provider.getTypeDefaultConstruction(leaf);
+        assertEquals("new java.lang.Short(\"111\")", actual);
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("id-64");
+        leaf = (LeafSchemaNode) m.getDataChildByName("ext-int16");
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.lang.Long(\"11111\")", actual);
+        assertEquals("new " + PKG + "MyInt16(new java.lang.Short(\"111\"))", actual);
+    }
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("id-leafref");
-        actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.math.BigDecimal(\"1.234\")", actual);
+    @Test
+    public void testGetTypeDefaultConstructionInt32() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("leaf-int32");
+        String actual = provider.getTypeDefaultConstruction(leaf);
+        assertEquals("new java.lang.Integer(\"1111\")", actual);
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("id-string");
+        leaf = (LeafSchemaNode) m.getDataChildByName("ext-int32");
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("\"name\"", actual);
+        assertEquals("new " + PKG + "MyInt32(new java.lang.Integer(\"1111\"))", actual);
+    }
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("id-u8");
-        actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.lang.Short(\"11\")", actual);
+    @Test
+    public void testGetTypeDefaultConstructionInt64() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("leaf-int64");
+        String actual = provider.getTypeDefaultConstruction(leaf);
+        assertEquals("new java.lang.Long(\"11111\")", actual);
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("id-u16");
+        leaf = (LeafSchemaNode) m.getDataChildByName("ext-int64");
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.lang.Integer(\"111\")", actual);
+        assertEquals("new " + PKG + "MyInt64(new java.lang.Long(\"11111\"))", actual);
+    }
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("id-u32");
-        actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.lang.Long(\"1111\")", actual);
+    @Test
+    public void testGetTypeDefaultConstructionLeafref1() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("leaf-leafref");
+        String actual = provider.getTypeDefaultConstruction(leaf);
+        assertEquals("new java.math.BigDecimal(\"1.234\")", actual);
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("id-u64");
+        leaf = (LeafSchemaNode) m.getDataChildByName("ext-leafref");
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.math.BigInteger(\"11111\")", actual);
+        assertEquals("new java.math.BigDecimal(\"1.234\")", actual);
     }
 
-    @Ignore
     @Test
-    public void testGetTypeDefaultConstruction2() throws ParseException {
-        final String path1 = getClass().getResource("/type-provider/test.yang").getPath();
-        final String path2 = getClass().getResource("/type-provider/ietf-inet-types@2010-09-24.yang").getPath();
-        final SchemaContext context = resolveSchemaContextFromFiles(path1, path2);
-        assertNotNull(context);
-        TypeProviderImpl provider = new TypeProviderImpl(context);
-        Module m = context.findModuleByName("test", new SimpleDateFormat("yyyy-MM-dd").parse("2013-10-08"));
-
-        LeafSchemaNode leaf = (LeafSchemaNode)m.getDataChildByName("ext-binary");
+    public void testGetTypeDefaultConstructionLeafref2() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("leaf-leafref1");
         String actual = provider.getTypeDefaultConstruction(leaf);
         assertEquals("new " + PKG + "MyBinary(new byte[] {77, 97, 110})", actual);
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("ext-bits");
-        actual = provider.getTypeDefaultConstruction(leaf);
-        //assertEquals("new " + PKG + "MyBits(false, false, true)", actual);
-
-        leaf = (LeafSchemaNode)m.getDataChildByName("ext-boolean");
+        leaf = (LeafSchemaNode) m.getDataChildByName("ext-leafref1");
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyBoolean(new java.lang.Boolean(\"true\"))", actual);
+        assertEquals("new " + PKG + "MyBinary(new byte[] {77, 97, 110})", actual);
+    }
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("ext-decimal64");
-        actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyDecimal64(new java.math.BigDecimal(\"3.14\"))", actual);
+    @Test
+    public void testGetTypeDefaultConstructionString() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("leaf-string");
+        String actual = provider.getTypeDefaultConstruction(leaf);
+        assertEquals("\"name\"", actual);
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("ext-empty");
+        leaf = (LeafSchemaNode) m.getDataChildByName("ext-string");
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyEmpty(new java.lang.Boolean(\"false\"))", actual);
+        assertEquals("new " + PKG + "MyString(\"name\")", actual);
+    }
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("ext-enumeration");
-        actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyEnumeration(" + PKG + "MyEnumeration.Seven)", actual);
+    @Test
+    public void testGetTypeDefaultConstructionUint8() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("leaf-uint8");
+        String actual = provider.getTypeDefaultConstruction(leaf);
+        assertEquals("new java.lang.Short(\"11\")", actual);
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("ext-8");
+        leaf = (LeafSchemaNode) m.getDataChildByName("ext-uint8");
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "My8(new java.lang.Byte(\"11\"))", actual);
+        assertEquals("new " + PKG + "MyUint8(new java.lang.Short(\"11\"))", actual);
+    }
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("ext-16");
-        actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "My16(new java.lang.Short(\"111\"))", actual);
+    @Test
+    public void testGetTypeDefaultConstructionUint16() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("leaf-uint16");
+        String actual = provider.getTypeDefaultConstruction(leaf);
+        assertEquals("new java.lang.Integer(\"111\")", actual);
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("ext-32");
+        leaf = (LeafSchemaNode) m.getDataChildByName("ext-uint16");
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "My32(new java.lang.Integer(\"1111\"))", actual);
+        assertEquals("new " + PKG + "MyUint16(new java.lang.Integer(\"111\"))", actual);
+    }
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("ext-64");
-        actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "My64(new java.lang.Long(\"11111\"))", actual);
+    @Test
+    public void testGetTypeDefaultConstructionUint32() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("leaf-uint32");
+        String actual = provider.getTypeDefaultConstruction(leaf);
+        assertEquals("new java.lang.Long(\"1111\")", actual);
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("ext-leafref");
+        leaf = (LeafSchemaNode) m.getDataChildByName("ext-uint32");
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new java.math.BigDecimal(\"1.234\")", actual);
+        assertEquals("new " + PKG + "MyUint32(new java.lang.Long(\"1111\"))", actual);
+    }
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("ext-string");
-        actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyString(\"name\")", actual);
+    @Test
+    public void testGetTypeDefaultConstructionUint64() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("leaf-uint64");
+        String actual = provider.getTypeDefaultConstruction(leaf);
+        assertEquals("new java.math.BigInteger(\"11111\")", actual);
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("ext-u8");
+        leaf = (LeafSchemaNode) m.getDataChildByName("ext-uint64");
         actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyU8(new java.lang.Short(\"11\"))", actual);
+        assertEquals("new " + PKG + "MyUint64(new java.math.BigInteger(\"11111\"))", actual);
+    }
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("ext-u16");
-        actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyU16(new java.lang.Integer(\"111\"))", actual);
+    @Test
+    public void testGetTypeDefaultConstruction() throws ParseException {
+        LeafSchemaNode leaf = (LeafSchemaNode) m.getDataChildByName("ip-leaf");
+        String actual = provider.getTypeDefaultConstruction(leaf);
+        String exp = "new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address(\"0.0.0.1\")";
+        assertEquals(exp, actual);
+    }
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("ext-u32");
-        actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyU32(new java.lang.Long(\"1111\"))", actual);
+    private static SchemaContext resolveSchemaContextFromFiles(final String... yangFiles) {
+        final YangModelParser parser = new YangParserImpl();
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("ext-u64");
-        actual = provider.getTypeDefaultConstruction(leaf);
-        assertEquals("new " + PKG + "MyU64(new java.math.BigInteger(\"11111\"))", actual);
+        final List<File> inputFiles = new ArrayList<File>();
+        for (int i = 0; i < yangFiles.length; ++i) {
+            inputFiles.add(new File(yangFiles[i]));
+        }
 
-        leaf = (LeafSchemaNode)m.getDataChildByName("ip-leaf");
-        actual = provider.getTypeDefaultConstruction(leaf);
-        String exp = "new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.Ipv4Address(\"0.0.0.1\")";
-        assertEquals(exp, actual);
+        final Set<Module> modules = parser.parseYangModels(inputFiles);
+        return parser.resolveSchemaContext(modules);
     }
 
 }
index 479b370d33441fa6eb5a53d9dc2f63cd5fe2d092..c47f00cde011d0f80e527153914faf8b2d3fd2d0 100644 (file)
@@ -11,10 +11,25 @@ module test {
     }
 
 
+
+    // binary
     typedef my-binary {
         type binary;
     }
 
+    leaf ext-binary {
+        type my-binary;
+        default "TWFu";
+    }
+
+    leaf leaf-binary {
+        type binary;
+        default "TWFu";
+    }
+
+
+
+    // bits
     typedef my-bits {
         type bits {
             bit ctrl;
@@ -25,21 +40,80 @@ module test {
         }
     }
 
+    leaf ext-bits {
+        type my-bits;
+        default "delete";
+    }
+
+    leaf leaf-bits {
+        type bits {
+            bit ctrl;
+            bit alt {
+                position 5;
+            }
+            bit delete;
+        }
+        default "delete";
+    }
+
+
+
+    // boolean
     typedef my-boolean {
         type boolean;
     }
 
-    
+    leaf ext-boolean {
+        type my-boolean;
+        default true;
+    }
+
+    leaf leaf-boolean {
+        type boolean;
+        default true;
+    }
+
+
+
+    // decimal64
     typedef my-decimal64 {
         type decimal64 {
             fraction-digits 4;
         }
     }
 
+    leaf ext-decimal64 {
+        type my-decimal64;
+        default "3.14";
+    }
+
+    leaf leaf-decimal64 {
+        type decimal64 {
+            fraction-digits 4;
+        }
+        default "3.14";
+    }
+
+
+
+    // empty
     typedef my-empty {
         type empty;
     }
 
+    leaf ext-empty {
+        type my-empty;
+        default false;
+    }
+
+    leaf leaf-empty {
+        type empty;
+        default false;
+    }
+
+
+
+    // enumeration
     typedef my-enumeration {
         type enumeration {
             enum zero;
@@ -50,229 +124,230 @@ module test {
         }
     }
 
+    leaf ext-enumeration {
+        type my-enumeration;
+        default seven;
+    }
+
+    leaf leaf-enumeration {
+        type enumeration {
+            enum zero;
+            enum one;
+            enum seven {
+                value 7;
+            }
+        }
+        default seven;
+    }
+
+
+
+    // identityref
     typedef my-identityref {
         type identityref {
             base alg;
         }
     }
 
-    typedef my-8 {
-        type int8;
-    }
-    typedef my-16 {
-        type int16;
-    }
-    typedef my-32 {
-        type int32;
-    }
-    typedef my-64 {
-        type int64;
+    leaf ext-identityref {
+        type my-identityref;
     }
 
-    typedef my-leafref {
-        type leafref {
-            path "/links/node/id-64";
+    leaf leaf-identityref {
+        type identityref {
+            base alg;
         }
     }
 
-    typedef my-string {
-        type string;
-    }
 
-    typedef my-u8 {
-        type uint8;
-    }
-    typedef my-u16 {
-        type uint16;
+
+    // int8
+    typedef my-int8 {
+        type int8;
     }
-    typedef my-u32 {
-        type uint32;
+
+    leaf ext-int8 {
+        type my-int8;
+        default "11";
     }
-    typedef my-u64 {
-        type uint64;
+
+    leaf leaf-int8 {
+        type int8;
+        default "11";
     }
 
 
 
-    leaf id-binary {
-        type binary;
-        default "TWFu";
+    // int16
+    typedef my-int16 {
+        type int16;
     }
 
-    leaf id-bits {
-        type bits {
-            bit ctrl;
-            bit alt {
-                position 5;
-            }
-            bit delete;
-        }
-        default "delete";
+    leaf ext-int16 {
+        type my-int16;
+        default "111";
     }
 
-    leaf id-boolean {
-        type boolean;
-        default true;
+    leaf leaf-int16 {
+        type int16;
+        default "111";
     }
 
-    leaf id-decimal64 {
-        type decimal64 {
-            fraction-digits 4;
-        }
-        default "3.14";
-    }
 
-    leaf id-empty {
-        type empty;
-        default false;
-    }
 
-    leaf id-enumeration {
-        type enumeration {
-            enum zero;
-            enum one;
-            enum seven {
-                value 7;
-            }
-        }
-        default seven;
+    // int32
+    typedef my-int32 {
+        type int32;
     }
 
-    leaf id-identityref {
-        type identityref {
-            base alg;
-        }
+    leaf ext-int32 {
+        type my-int32;
+        default "1111";
     }
 
-    leaf id-8 {
-        type int8;
-        default "11";
-    }
-    leaf id-16 {
-        type int16;
-        default "111";
-    }
-    leaf id-32 {
+    leaf leaf-int32 {
         type int32;
         default "1111";
     }
-    leaf id-64 {
+
+
+
+    // int64
+    typedef my-int64 {
+        type int64;
+    }
+
+    leaf ext-int64 {
+        type my-int64;
+        default "11111";
+    }
+
+    leaf leaf-int64 {
         type int64;
         default "11111";
     }
 
-    leaf id-leafref {
+
+
+    // leafref
+    typedef my-leafref {
         type leafref {
             path "/links/node/id-64";
         }
-        default "1.234";
     }
 
-    leaf id-string {
-        type string;
-        default "name";
+    leaf ext-leafref {
+        type my-leafref;
+        default "1.234";
     }
 
-    leaf id-u8 {
-        type uint8;
-        default "11";
-    }
-    leaf id-u16 {
-        type uint16;
-        default "111";
-    }
-    leaf id-u32 {
-        type uint32;
-        default "1111";
-    }
-    leaf id-u64 {
-        type uint64;
-        default "11111";
+    leaf leaf-leafref {
+        type leafref {
+            path "/links/node/id-64";
+        }
+        default "1.234";
     }
 
+    typedef my-leafref1 {
+        type leafref {
+            path "/links/node/id-for-binary";
+        }
+    }
 
-
-    leaf ext-binary {
-        type my-binary;
+    leaf ext-leafref1 {
+        type my-leafref1;
         default "TWFu";
     }
 
-    leaf ext-bits {
-        type my-bits {
-            bit ctrl;
-            bit alt {
-                position 5;
-            }
-            bit delete;
+    leaf leaf-leafref1 {
+        type leafref {
+            path "/links/node/id-for-binary";
         }
-        default "delete";
+        default "TWFu";
     }
 
-    leaf ext-boolean {
-        type my-boolean;
-        default true;
+
+
+    // string
+    typedef my-string {
+        type string;
     }
 
-    leaf ext-decimal64 {
-        type my-decimal64;
-        default "3.14";
+    leaf ext-string {
+        type my-string;
+        default "name";
     }
 
-    leaf ext-empty {
-        type my-empty;
-        default false;
+    leaf leaf-string {
+        type string;
+        default "name";
     }
 
-    leaf ext-enumeration {
-        type my-enumeration;
-        default seven;
+
+
+    // uint8
+    typedef my-uint8 {
+        type uint8;
     }
 
-    leaf ext-identityref {
-        type my-identityref;
+    leaf ext-uint8 {
+        type my-uint8;
+        default "11";
     }
 
-    leaf ext-8 {
-        type my-8;
+    leaf leaf-uint8 {
+        type uint8;
         default "11";
     }
-    leaf ext-16 {
-        type my-16;
-        default "111";
+
+
+
+    // uint16
+    typedef my-uint16 {
+        type uint16;
     }
-    leaf ext-32 {
-        type my-32;
-        default "1111";
+
+    leaf ext-uint16 {
+        type my-uint16;
+        default "111";
     }
-    leaf ext-64 {
-        type my-64;
-        default "11111";
+
+    leaf leaf-uint16 {
+        type uint16;
+        default "111";
     }
 
-    leaf ext-leafref {
-        type my-leafref;
-        default "1.234";
+
+
+    // uint32
+    typedef my-uint32 {
+        type uint32;
     }
 
-    leaf ext-string {
-        type my-string;
-        default "name";
+    leaf ext-uint32 {
+        type my-uint32;
+        default "1111";
     }
 
-    leaf ext-u8 {
-        type my-u8;
-        default "11";
+    leaf leaf-uint32 {
+        type uint32;
+        default "1111";
     }
-    leaf ext-u16 {
-        type my-u16;
-        default "111";
+
+
+
+    // uint64
+    typedef my-uint64 {
+        type uint64;
     }
-    leaf ext-u32 {
-        type my-u32;
-        default "1111";
+
+    leaf ext-uint64 {
+        type my-uint64;
+        default "11111";
     }
-    leaf ext-u64 {
-        type my-u64;
+
+    leaf leaf-uint64 {
+        type uint64;
         default "11111";
     }
 
@@ -285,6 +360,9 @@ module test {
                     fraction-digits "7";
                 }
             }
+            leaf id-for-binary {
+                type my-binary;
+            }
         }
     }
 
index c94a75c810ff165af8c54015e30b791684882abf..95d07870dbb937968e53d98f9f2b04761f8f8783 100644 (file)
@@ -43,12 +43,8 @@ import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedPr
 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTOBuilder;
 import org.opendaylight.yangtools.sal.binding.model.api.type.builder.GeneratedTypeBuilderBase;
 import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.AugmentationSchema;
-import org.opendaylight.yangtools.yang.model.api.AugmentationTarget;
-import org.opendaylight.yangtools.yang.model.api.ChoiceNode;
 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.IdentitySchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
 import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
@@ -58,7 +54,6 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.api.UsesNode;
 import org.opendaylight.yangtools.yang.model.api.YangNode;
 import org.opendaylight.yangtools.yang.model.api.type.BinaryTypeDefinition;
 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;
@@ -177,7 +172,8 @@ public final class TypeProviderImpl implements TypeProvider {
      *             </ul>
      */
     @Override
-    public Type javaTypeForSchemaDefinitionType(final TypeDefinition<?> typeDefinition, final SchemaNode parentNode, Restrictions r) {
+    public Type javaTypeForSchemaDefinitionType(final TypeDefinition<?> typeDefinition, final SchemaNode parentNode,
+            Restrictions r) {
         Type returnType = null;
         Preconditions.checkArgument(typeDefinition != null, "Type Definition cannot be NULL!");
         if (typeDefinition.getQName() == null) {
@@ -362,7 +358,9 @@ public final class TypeProviderImpl implements TypeProvider {
     private TypeDefinition<?> baseTypeDefForExtendedType(final TypeDefinition<?> extendTypeDef) {
         Preconditions.checkArgument(extendTypeDef != null, "Type Definiition reference cannot be NULL!");
         final TypeDefinition<?> baseTypeDef = extendTypeDef.getBaseType();
-        if (baseTypeDef instanceof ExtendedType) {
+        if (baseTypeDef == null) {
+            return extendTypeDef;
+        } else if (baseTypeDef instanceof ExtendedType) {
             return baseTypeDefForExtendedType(baseTypeDef);
         } else {
             return baseTypeDef;
@@ -637,8 +635,8 @@ public final class TypeProviderImpl implements TypeProvider {
      *         <code>modulName</code> or <code>typedef</code> or Q name of
      *         <code>typedef</code> equals <code>null</code>
      */
-    private Type typedefToGeneratedType(final String basePackageName, final String moduleName, final Date moduleRevision,
-            final TypeDefinition<?> typedef) {
+    private Type typedefToGeneratedType(final String basePackageName, final String moduleName,
+            final Date moduleRevision, final TypeDefinition<?> typedef) {
         if ((basePackageName != null) && (moduleName != null) && (typedef != null) && (typedef.getQName() != null)) {
 
             final String typedefName = typedef.getQName().getLocalName();
@@ -676,7 +674,6 @@ public final class TypeProviderImpl implements TypeProvider {
                     final Map<Date, Map<String, Type>> modulesByDate = genTypeDefsContextMap.get(moduleName);
                     final Map<String, Type> typeMap = modulesByDate.get(moduleRevision);
 
-
                     if (typeMap != null) {
                         typeMap.put(typedefName, returnType);
                     }
@@ -1121,8 +1118,8 @@ public final class TypeProviderImpl implements TypeProvider {
      *             <li>if <code>typedefName</code> equals null</li>
      *             </ul>
      */
-    private GeneratedTransferObject provideGeneratedTOFromExtendedType(final TypeDefinition<?> typedef, final ExtendedType innerExtendedType,
-            final String basePackageName) {
+    private GeneratedTransferObject provideGeneratedTOFromExtendedType(final TypeDefinition<?> typedef,
+            final ExtendedType innerExtendedType, final String basePackageName) {
         Preconditions.checkArgument(innerExtendedType != null, "Extended type cannot be NULL!");
         Preconditions.checkArgument(basePackageName != null, "String with base package name cannot be NULL!");
 
@@ -1263,37 +1260,32 @@ public final class TypeProviderImpl implements TypeProvider {
 
     public String getTypeDefaultConstruction(LeafSchemaNode node, String defaultValue) {
         TypeDefinition<?> type = node.getType();
+        QName typeQName = type.getQName();
+        TypeDefinition<?> base = baseTypeDefForExtendedType(type);
         Preconditions.checkNotNull(type, "Cannot provide default construction for null type of " + node);
         Preconditions.checkNotNull(defaultValue, "Cannot provide default construction for null default statement of "
                 + node);
 
-        Module module = getParentModule(node);
-        String basePackageName = BindingGeneratorUtil.moduleNamespaceToPackageName(module);
-        String packageName = packageNameForGeneratedType(basePackageName, node.getType().getPath());
-        String className = packageName + "." + parseToClassName(node.getType().getQName().getLocalName());
-
         StringBuilder sb = new StringBuilder();
-        TypeDefinition<?> base = baseTypeDefForExtendedType(type);
-        final boolean isBaseNull = base == null;
-
-        if (isBaseNull) {
-            base = type;
-        }
-
         String result = null;
         if (base instanceof BinaryTypeDefinition) {
             result = binaryToDef(defaultValue);
         } else if (base instanceof BitsTypeDefinition) {
             String parentName;
+            String className;
             YangNode parent = node.getParent();
             if (parent instanceof Module) {
-                parentName = parseToClassName(((Module)parent).getName()) + "Data";
+                parentName = parseToClassName(((Module) parent).getName()) + "Data";
+                String basePackageName = BindingGeneratorUtil.moduleNamespaceToPackageName((Module) parent);
                 className = basePackageName + "." + parentName + "." + parseToClassName(node.getQName().getLocalName());
             } else {
-                parentName = parseToClassName(((SchemaNode)parent).getQName().getLocalName());
+                Module parentModule = getParentModule(node);
+                String basePackageName = BindingGeneratorUtil.moduleNamespaceToPackageName(parentModule);
+                String packageName = packageNameForGeneratedType(basePackageName, type.getPath());
+                parentName = parseToClassName(((SchemaNode) parent).getQName().getLocalName());
                 className = packageName + "." + parentName + "." + parseToClassName(node.getQName().getLocalName());
             }
-            result = bitsToDef((BitsTypeDefinition) base, className, defaultValue, isBaseNull);
+            result = bitsToDef((BitsTypeDefinition) base, className, defaultValue, type instanceof ExtendedType);
         } else if (base instanceof BooleanTypeDefinition) {
             result = typeToDef(Boolean.class, defaultValue);
         } else if (base instanceof DecimalTypeDefinition) {
@@ -1305,8 +1297,18 @@ public final class TypeProviderImpl implements TypeProvider {
             char first = Character.toUpperCase(defaultValue.charAt(0));
             defValArray[0] = first;
             String newDefVal = new String(defValArray);
+            String className;
             if (type instanceof ExtendedType) {
-                className = packageName + "." + parseToClassName(node.getType().getQName().getLocalName());
+                QName qname = type.getPath().getPath().get(0);
+                Module m = schemaContext.findModuleByNamespaceAndRevision(qname.getNamespace(), qname.getRevision());
+                String basePackageName = BindingGeneratorUtil.moduleNamespaceToPackageName(m);
+                String packageName = packageNameForGeneratedType(basePackageName, type.getPath());
+                className = packageName + "." + parseToClassName(typeQName.getLocalName());
+            } else {
+                Module parentModule = getParentModule(node);
+                String basePackageName = BindingGeneratorUtil.moduleNamespaceToPackageName(parentModule);
+                String packageName = packageNameForGeneratedType(basePackageName, node.getPath());
+                className = packageName + "." + parseToClassName(node.getQName().getLocalName());
             }
             result = className + "." + newDefVal;
         } else if (base instanceof IdentityrefTypeDefinition) {
@@ -1322,7 +1324,7 @@ public final class TypeProviderImpl implements TypeProvider {
         } else if (base instanceof Int64) {
             result = typeToDef(Long.class, defaultValue);
         } else if (base instanceof LeafrefTypeDefinition) {
-            result = leafrefToDef(node, (LeafrefTypeDefinition)base);
+            result = leafrefToDef(node, (LeafrefTypeDefinition) base);
         } else if (base instanceof StringTypeDefinition) {
             result = "\"" + defaultValue + "\"";
         } else if (base instanceof Uint8) {
@@ -1340,8 +1342,12 @@ public final class TypeProviderImpl implements TypeProvider {
         }
         sb.append(result);
 
-        if (result != null && !result.isEmpty() && type instanceof ExtendedType && !(base instanceof LeafrefTypeDefinition)) {
-            className = packageName + "." + parseToClassName(node.getType().getQName().getLocalName());
+        if (type instanceof ExtendedType && !(base instanceof LeafrefTypeDefinition)) {
+            QName qname = type.getPath().getPath().get(0);
+            Module m = schemaContext.findModuleByNamespaceAndRevision(qname.getNamespace(), qname.getRevision());
+            String basePackageName = BindingGeneratorUtil.moduleNamespaceToPackageName(m);
+            String packageName = packageNameForGeneratedType(basePackageName, type.getPath());
+            String className = packageName + "." + parseToClassName(typeQName.getLocalName());
             sb.insert(0, "new " + className + "(");
             sb.insert(sb.length(), ")");
         }
@@ -1349,7 +1355,6 @@ public final class TypeProviderImpl implements TypeProvider {
         return sb.toString();
     }
 
-
     private String typeToDef(Class<?> clazz, String defaultValue) {
         return "new " + clazz.getName() + "(\"" + defaultValue + "\")";
     }
@@ -1369,7 +1374,7 @@ public final class TypeProviderImpl implements TypeProvider {
         return sb.toString();
     }
 
-    private String bitsToDef(BitsTypeDefinition type, String className, String defaultValue, boolean isBase) {
+    private String bitsToDef(BitsTypeDefinition type, String className, String defaultValue, boolean isExt) {
         List<Bit> bits = new ArrayList<>(type.getBits());
         Collections.sort(bits, new Comparator<Bit>() {
             @Override
@@ -1378,7 +1383,7 @@ public final class TypeProviderImpl implements TypeProvider {
             }
         });
         StringBuilder sb = new StringBuilder();
-        sb.append(isBase ? "new " + className + "(" : "");
+        sb.append(isExt ? "" : "new " + className + "(");
         for (int i = 0; i < bits.size(); i++) {
             if (bits.get(i).getName().equals(defaultValue)) {
                 sb.append(true);
@@ -1389,7 +1394,7 @@ public final class TypeProviderImpl implements TypeProvider {
                 sb.append(", ");
             }
         }
-        sb.append(isBase ? ")" : "");
+        sb.append(isExt ? "" : ")");
         return sb.toString();
     }
 
@@ -1421,7 +1426,8 @@ public final class TypeProviderImpl implements TypeProvider {
 
     private String leafrefToDef(LeafSchemaNode parentNode, LeafrefTypeDefinition leafrefType) {
         Preconditions.checkArgument(leafrefType != null, "Leafref Type Definition reference cannot be NULL!");
-        Preconditions.checkArgument(leafrefType.getPathStatement() != null, "The Path Statement for Leafref Type Definition cannot be NULL!");
+        Preconditions.checkArgument(leafrefType.getPathStatement() != null,
+                "The Path Statement for Leafref Type Definition cannot be NULL!");
 
         final RevisionAwareXPath xpath = leafrefType.getPathStatement();
         final String strXPath = xpath.toString();
@@ -1438,171 +1444,15 @@ public final class TypeProviderImpl implements TypeProvider {
                     } else {
                         dataNode = findDataSchemaNodeForRelativeXPath(schemaContext, module, parentNode, xpath);
                     }
-                    return getTypeDefaultConstruction((LeafSchemaNode)dataNode, parentNode.getDefault());
-                }
-            }
-        }
-
-        return null;
-    }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-    /**
-     * Utility method which search for original node defined in grouping.
-     */
-    private DataSchemaNode findOriginal(DataSchemaNode node) {
-        DataSchemaNode result = findCorrectTargetFromGrouping(node);
-        if (result == null) {
-            result = findCorrectTargetFromAugment(node);
-            if (result != null) {
-                if (result.isAddedByUses()) {
-                    result = findOriginal(result);
-                }
-            }
-        }
-        return result;
-    }
-
-    private DataSchemaNode findCorrectTargetFromAugment(DataSchemaNode node) {
-        if (!node.isAugmenting()) {
-            return null;
-        }
-
-        String currentName = node.getQName().getLocalName();
-        List<String> tmpPath = new ArrayList<>();
-        YangNode parent = node;
-        AugmentationSchema augment = null;
-        do {
-            parent = ((DataSchemaNode)parent).getParent();
-            if (parent instanceof AugmentationTarget) {
-                tmpPath.add(currentName);
-                augment = findNodeInAugment(((AugmentationTarget)parent).getAvailableAugmentations(), currentName);
-                if (augment == null) {
-                    currentName = ((DataSchemaNode)parent).getQName().getLocalName();
-                }
-            }
-        } while (((DataSchemaNode)parent).isAugmenting() && augment == null);
-
-        if (augment == null) {
-            return null;
-        } else {
-            Collections.reverse(tmpPath);
-            Object actualParent = augment;
-            DataSchemaNode result = null;
-            for (String name : tmpPath) {
-                if (actualParent instanceof DataNodeContainer) {
-                    result = ((DataNodeContainer)actualParent).getDataChildByName(name);
-                    actualParent = ((DataNodeContainer)actualParent).getDataChildByName(name);
-                } else {
-                    if (actualParent instanceof ChoiceNode) {
-                        result = ((ChoiceNode)actualParent).getCaseNodeByName(name);
-                        actualParent = ((ChoiceNode)actualParent).getCaseNodeByName(name);
-                    }
+                    String result = getTypeDefaultConstruction((LeafSchemaNode) dataNode, parentNode.getDefault());
+                    return result;
                 }
             }
-
-            if (result.isAddedByUses()) {
-                result = findCorrectTargetFromGrouping(result);
-            }
-
-            return result;
         }
-    }
 
-    private AugmentationSchema findNodeInAugment(Collection<AugmentationSchema> augments, String name) {
-        for (AugmentationSchema augment : augments) {
-            if (augment.getDataChildByName(name) != null) {
-                return augment;
-            }
-        }
         return null;
     }
 
-    private DataSchemaNode findCorrectTargetFromGrouping(DataSchemaNode node) {
-        if (node.getPath().getPath().size() == 1) {
-
-            // uses is under module statement
-            Module m = findParentModule(schemaContext, node);
-            DataSchemaNode result = null;
-            for (UsesNode u : m.getUses()) {
-                SchemaNode targetGrouping = findNodeInSchemaContext(schemaContext, u.getGroupingPath().getPath());
-                if (!(targetGrouping instanceof GroupingDefinition)) {
-                    throw new IllegalArgumentException("Failed to generate code for augment in " + u);
-                }
-                GroupingDefinition gr = (GroupingDefinition)targetGrouping;
-                result = gr.getDataChildByName(node.getQName().getLocalName());
-            }
-            if (result == null) {
-                throw new IllegalArgumentException("Failed to generate code for augment");
-            }
-            return result;
-        } else {
-            DataSchemaNode result = null;
-            String currentName = node.getQName().getLocalName();
-            List<String> tmpPath = new ArrayList<>();
-            YangNode parent = node.getParent();
-            do {
-                tmpPath.add(currentName);
-                DataNodeContainer dataNodeParent = (DataNodeContainer)parent;
-                for (UsesNode u : dataNodeParent.getUses()) {
-                    if (result == null) {
-                        SchemaNode targetGrouping = findNodeInSchemaContext(schemaContext, u.getGroupingPath().getPath());
-                        if (!(targetGrouping instanceof GroupingDefinition)) {
-                            throw new IllegalArgumentException("Failed to generate code for augment in " + u);
-                        }
-                        GroupingDefinition gr = (GroupingDefinition)targetGrouping;
-                        result = gr.getDataChildByName(currentName);
-                    }
-                }
-                if (result == null) {
-                    currentName = ((SchemaNode)parent).getQName().getLocalName();
-                    if (parent instanceof DataSchemaNode) {
-                        parent = ((DataSchemaNode)parent).getParent();
-                    } else {
-                        parent = ((DataNodeContainer)parent).getParent();
-                    }
-                }
-            } while (result == null && !(parent instanceof Module));
-
-            if (result != null) {
-                if (tmpPath.size() == 1) {
-                    if (result != null && result.isAddedByUses()) {
-                        result = findOriginal(result);
-                    }
-                    return result;
-                } else {
-                    DataSchemaNode newParent = result;
-                    Collections.reverse(tmpPath);
-                    tmpPath.remove(0);
-                    for (String name : tmpPath) {
-                        newParent = ((DataNodeContainer)newParent).getDataChildByName(name);
-                    }
-                    if (newParent != null && newParent.isAddedByUses()) {
-                        newParent = findOriginal(newParent);
-                    }
-                    return newParent;
-                }
-            }
-
-            return result;
-        }
-    }
-
     @Override
     public String getConstructorPropertyName(SchemaNode node) {
         if (node instanceof TypeDefinition<?>) {
@@ -1612,5 +1462,4 @@ public final class TypeProviderImpl implements TypeProvider {
         }
     }
 
-
 }