Added support for named augmentations
authorTony Tkacik <ttkacik@cisco.com>
Mon, 19 Aug 2013 16:59:58 +0000 (18:59 +0200)
committerTony Tkacik <ttkacik@cisco.com>
Mon, 19 Aug 2013 16:59:58 +0000 (18:59 +0200)
Signed-off-by: Tony Tkacik <ttkacik@cisco.com>
code-generator/binding-generator-impl/src/main/java/org/opendaylight/yangtools/sal/binding/generator/impl/BindingGeneratorImpl.java

index f20e01dc989f41266e3c1e228a4cf3b2e3691864..ea3b472710fbeb84b4783396ee0e73809d274b56 100644 (file)
@@ -15,6 +15,8 @@ import static org.opendaylight.yangtools.binding.generator.util.BindingGenerator
 import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findDataSchemaNode;\r
 import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.findParentModule;\r
 \r
+import java.net.URI;\r
+import java.net.URISyntaxException;\r
 import java.util.ArrayList;\r
 import java.util.Collections;\r
 import java.util.Comparator;\r
@@ -66,6 +68,7 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;\r
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;\r
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;\r
+import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;\r
 import org.opendaylight.yangtools.yang.model.api.UsesNode;\r
 import org.opendaylight.yangtools.yang.model.api.type.BitsTypeDefinition;\r
 import org.opendaylight.yangtools.yang.model.api.type.EnumTypeDefinition;\r
@@ -109,6 +112,10 @@ public final class BindingGeneratorImpl implements BindingGenerator {
     /**\r
      * Only parent constructor is invoked.\r
      */\r
+    \r
+    private final static String YANG_EXT_NAMESPACE = "urn:opendaylight:yang:extension:yang-ext";\r
+    private final static String AUGMENT_IDENTIFIER_NAME = "augment-identifier";\r
+    \r
     public BindingGeneratorImpl() {\r
         super();\r
     }\r
@@ -1000,8 +1007,9 @@ public final class BindingGeneratorImpl implements BindingGenerator {
             augmentBuilders = new HashMap<>();\r
             genTypeBuilders.put(augmentPackageName, augmentBuilders);\r
         }\r
-\r
-        final String augTypeName = augGenTypeName(augmentBuilders, targetTypeName);\r
+        final String augIdentifier = getAugmentIdentifier(augSchema.getUnknownSchemaNodes());\r
+        \r
+        final String augTypeName =  augIdentifier != null ? parseToClassName(augIdentifier): augGenTypeName(augmentBuilders, targetTypeName);\r
         final Type targetTypeRef = new ReferencedTypeImpl(targetPackageName, targetTypeName);\r
         final Set<DataSchemaNode> augChildNodes = augSchema.getChildNodes();\r
 \r
@@ -1016,6 +1024,18 @@ public final class BindingGeneratorImpl implements BindingGenerator {
         return augTypeBuilder;\r
     }\r
 \r
+    private String getAugmentIdentifier(List<UnknownSchemaNode> unknownSchemaNodes) {\r
+        String ret = null;\r
+        for (UnknownSchemaNode unknownSchemaNode : unknownSchemaNodes) {\r
+            QName nodeType = unknownSchemaNode.getNodeType();\r
+            if(AUGMENT_IDENTIFIER_NAME.equals(nodeType.getLocalName()) &&\r
+                    YANG_EXT_NAMESPACE.equals(nodeType.getNamespace().toString())) {\r
+                return unknownSchemaNode.getNodeParameter();\r
+            }\r
+        }\r
+        return ret;\r
+    }\r
+\r
     /**\r
      * Convert a container, list and choice subnodes (and recursivelly their\r
      * subnodes) of augment to generated types\r