Added builder generation for augmentations 27/927/1
authorTony Tkacik <ttkacik@cisco.com>
Tue, 20 Aug 2013 16:58:31 +0000 (18:58 +0200)
committerTony Tkacik <ttkacik@cisco.com>
Tue, 20 Aug 2013 16:58:31 +0000 (18:58 +0200)
Added support for named augmentations

Signed-off-by: Tony Tkacik <ttkacik@cisco.com>
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderGenerator.java
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend
yang/yang-maven-plugin/pom.xml
yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/type/UnknownTypeDefinition.java
yang/yang-model-util/src/main/java/org/opendaylight/yangtools/yang/model/util/UnknownType.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/impl/YangParserImpl.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ParserListenerUtils.java
yang/yang-parser-impl/src/test/java/org/opendaylight/yangtools/yang/parser/impl/YangParserWithContextTest.java

index 08ff99d1965644e01eefcbe813fdb014845e4b86..571c301b009ec2b6d2b315f3b5c383f194e705aa 100644 (file)
@@ -5,6 +5,8 @@ import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject;
 import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType;\r
 import org.opendaylight.yangtools.sal.binding.model.api.Type;\r
 import org.opendaylight.yangtools.yang.binding.Augmentable;\r
+import org.opendaylight.yangtools.yang.binding.Augmentation;\r
+import org.opendaylight.yangtools.yang.binding.DataObject;\r
 \r
 public final class BuilderGenerator implements CodeGenerator {\r
 \r
@@ -17,7 +19,11 @@ public final class BuilderGenerator implements CodeGenerator {
                 // "rpc" and "grouping" elements do not implement Augmentable\r
                 if (t.getFullyQualifiedName().equals(Augmentable.class.getName())) {\r
                     return true;\r
+                } else if (t.getFullyQualifiedName().equals(Augmentation.class.getName())) {\r
+                    return true;\r
                 }\r
+                \r
+                \r
             }\r
         }\r
         return false;\r
index a56a79ebf7ba3a95b8287ec19adf8f5280f82bd2..6ffc912ebfd7d781da432f2992efe4aab0149968 100644 (file)
@@ -136,7 +136,7 @@ class BuilderTemplate {
     def private generateBody() '''
         public class «genType.name»«BUILDER» {
         
-            «generateFields»
+            «generateFields(false)»
 
             «generateSetters»
 
@@ -146,7 +146,7 @@ class BuilderTemplate {
 
             private class «genType.name»«IMPL» implements «genType.name» {
 
-                «generateFields»
+                «generateFields(true)»
 
                 «generateConstructor»
 
@@ -157,10 +157,10 @@ class BuilderTemplate {
         }
     '''
 
-    def private generateFields() '''
+    def private generateFields(boolean _final) '''
         «IF !fields.empty»
             «FOR f : fields»
-                private «f.returnType.resolveName» «f.name»;
+                private  «IF _final»final«ENDIF»  «f.returnType.resolveName» «f.name»;
             «ENDFOR»
         «ENDIF»
         «IF augmentField != null»
index 8055fad5dcd62bef6965a61c2416ab66565fbd1c..776868a0a9f97fc58855d59ac520c7a51c21dfda 100644 (file)
                        <artifactId>maven-artifact</artifactId>
                        <version>2.0</version>
                </dependency>
-
+<dependency>
+<groupId>org.slf4j</groupId>
+<artifactId>slf4j-simple</artifactId>
+<version>1.7.2</version>
+</dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>yang-parser-impl</artifactId>
index 691fadc281e111cf3eb30dec7364625a719dcac3..7459e6f6e6987a82f6f2c07018520bc7021a4e7c 100644 (file)
@@ -25,7 +25,7 @@ public class UnknownType implements UnknownTypeDefinition {
     private final SchemaPath path;
     private final String description;
     private final String reference;
-
+    private final boolean referenceOnly;
     private final List<LengthConstraint> lengthStatements;
     private final List<PatternConstraint> patterns;
     private final List<RangeConstraint> rangeStatements;
@@ -55,6 +55,7 @@ public class UnknownType implements UnknownTypeDefinition {
         private Status status = Status.CURRENT;
         private String units = "";
         private Object defaultValue = null;
+        private boolean referenceOnly = false;
 
         public Builder(final QName name, final String description,
                 final String reference) {
@@ -129,9 +130,15 @@ public class UnknownType implements UnknownTypeDefinition {
         public UnknownTypeDefinition build() {
             return new UnknownType(this);
         }
+
+        public void setReferenceOnly(boolean b) {
+            this.referenceOnly  = b;
+            
+        }
     }
 
     private UnknownType(Builder builder) {
+        this.referenceOnly = builder.referenceOnly;
         this.name = builder.name;
         this.path = builder.path;
         this.description = builder.description;
@@ -296,6 +303,11 @@ public class UnknownType implements UnknownTypeDefinition {
         return fractionDigits;
     }
 
+    @Override
+    public boolean isReferenceOnly() {
+        return referenceOnly;
+    }
+    
     @Override
     public int hashCode() {
         final int prime = 31;
index 4bd6f20ffa49f5b2c6bff03290c668d39b245951..604a0c2fcff05a263ea1bcbfd02e1bd9f1af4454 100644 (file)
@@ -839,6 +839,7 @@ public final class YangParserImpl implements YangModelParser {
                         usnb.getLine());
                 for (ExtensionBuilder extension : dependentModule.getExtensions()) {
                     if (extension.getQName().getLocalName().equals(nodeType.getLocalName())) {
+                        usnb.setNodeType(extension.getQName());
                         usnb.setExtensionBuilder(extension);
                         break;
                     }
@@ -863,6 +864,7 @@ public final class YangParserImpl implements YangModelParser {
                             usnb.getLine());
                     for (ExtensionDefinition e : dependentModule.getExtensionSchemaNodes()) {
                         if (e.getQName().getLocalName().equals(nodeType.getLocalName())) {
+                            usnb.setNodeType(new QName(e.getQName().getNamespace(),e.getQName().getRevision() , nodeType.getPrefix(), e.getQName().getLocalName()));
                             usnb.setExtensionDefinition(e);
                             break;
                         }
index 51d7e3120b23bed689f06163b5db9f37f41d9d86..0766b781ab4dee065e040d049474107020d51c24 100644 (file)
@@ -1024,8 +1024,10 @@ public final class ParserListenerUtils {
 
                 return result;
             }
+        } else {
+            unknownType.setReferenceOnly(true);
         }
-
+        
         return unknownType.build();
     }
 
index 1ffe85365b66632d3d84268983fff41417872337..4cab8d8da6a005bd02a3c556164317c821464a85 100644 (file)
@@ -316,8 +316,8 @@ public class YangParserWithContextTest {
 
         UnknownSchemaNode un = unknownNodes.get(0);
         QName unType = un.getNodeType();
-        assertEquals(URI.create("urn:simple.demo.test3"), unType.getNamespace());
-        assertEquals(simpleDateFormat.parse("2013-06-18"), unType.getRevision());
+        assertEquals(URI.create("urn:custom.types.demo"), unType.getNamespace());
+        assertEquals(simpleDateFormat.parse("2012-04-16"), unType.getRevision());
         assertEquals("custom", unType.getPrefix());
         assertEquals("mountpoint", unType.getLocalName());
         assertEquals("point", un.getNodeParameter());