Update the API generation code and code generation sample
[controller.git] / opendaylight / sal / yang-prototype / code-generator / yang-model-parser-impl / src / main / java / org / opendaylight / controller / yang / model / parser / impl / YangModelParserListenerImpl.java
index a9fce16bfaee5569962526de28427f887fcfdd6d..6ff69eee516986dce0b02b26c9ef56c43c65f566 100644 (file)
@@ -22,6 +22,7 @@ import java.util.TreeMap;
 \r
 import org.antlr.v4.runtime.tree.ParseTree;\r
 import org.opendaylight.controller.antlrv4.code.gen.YangParser;\r
+import org.opendaylight.controller.antlrv4.code.gen.YangParser.Base_stmtContext;\r
 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Contact_stmtContext;\r
 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Container_stmtContext;\r
 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Description_stmtContext;\r
@@ -49,7 +50,6 @@ import org.opendaylight.controller.antlrv4.code.gen.YangParser.Type_body_stmtsCo
 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Union_specificationContext;\r
 import org.opendaylight.controller.antlrv4.code.gen.YangParser.Yang_version_stmtContext;\r
 import org.opendaylight.controller.antlrv4.code.gen.YangParserBaseListener;\r
-import org.opendaylight.controller.model.util.YangTypesConverter;\r
 import org.opendaylight.controller.yang.common.QName;\r
 import org.opendaylight.controller.yang.model.api.Status;\r
 import org.opendaylight.controller.yang.model.api.TypeDefinition;\r
@@ -59,6 +59,7 @@ import org.opendaylight.controller.yang.model.parser.builder.impl.ContainerSchem
 import org.opendaylight.controller.yang.model.parser.builder.impl.DeviationBuilder;\r
 import org.opendaylight.controller.yang.model.parser.builder.impl.ExtensionBuilder;\r
 import org.opendaylight.controller.yang.model.parser.builder.impl.FeatureBuilder;\r
+import org.opendaylight.controller.yang.model.parser.builder.impl.IdentitySchemaNodeBuilder;\r
 import org.opendaylight.controller.yang.model.parser.builder.impl.LeafListSchemaNodeBuilder;\r
 import org.opendaylight.controller.yang.model.parser.builder.impl.LeafSchemaNodeBuilder;\r
 import org.opendaylight.controller.yang.model.parser.builder.impl.ListSchemaNodeBuilder;\r
@@ -67,6 +68,7 @@ import org.opendaylight.controller.yang.model.parser.builder.impl.NotificationBu
 import org.opendaylight.controller.yang.model.parser.builder.impl.RpcDefinitionBuilder;\r
 import org.opendaylight.controller.yang.model.parser.builder.impl.TypedefBuilder;\r
 import org.opendaylight.controller.yang.model.parser.builder.impl.UnknownSchemaNodeBuilder;\r
+import org.opendaylight.controller.yang.model.util.YangTypesConverter;\r
 import org.slf4j.Logger;\r
 import org.slf4j.LoggerFactory;\r
 \r
@@ -80,7 +82,7 @@ final class YangModelParserListenerImpl extends YangParserBaseListener {
     private String moduleName;\r
     private URI namespace;\r
     private String yangModelPrefix;\r
-    private Date revision;\r
+    private Date revision = new Date(0L);\r
 \r
     private final DateFormat simpleDateFormat = new SimpleDateFormat(\r
             "yyyy-mm-dd");\r
@@ -121,7 +123,8 @@ final class YangModelParserListenerImpl extends YangParserBaseListener {
     @Override\r
     public void enterModule_header_stmts(final Module_header_stmtsContext ctx) {\r
         super.enterModule_header_stmts(ctx);\r
-\r
+        \r
+        String yangVersion = null;\r
         for (int i = 0; i < ctx.getChildCount(); ++i) {\r
             final ParseTree treeNode = ctx.getChild(i);\r
             if (treeNode instanceof Namespace_stmtContext) {\r
@@ -132,10 +135,14 @@ final class YangModelParserListenerImpl extends YangParserBaseListener {
                 yangModelPrefix = stringFromNode(treeNode);\r
                 moduleBuilder.setPrefix(yangModelPrefix);\r
             } else if (treeNode instanceof Yang_version_stmtContext) {\r
-                final String yangVersion = stringFromNode(treeNode);\r
-                moduleBuilder.setYangVersion(yangVersion);\r
+                yangVersion = stringFromNode(treeNode);\r
             }\r
         }\r
+        \r
+        if (yangVersion == null) {\r
+            yangVersion = "1";\r
+        }\r
+        moduleBuilder.setYangVersion(yangVersion);\r
     }\r
 \r
     @Override\r
@@ -167,35 +174,37 @@ final class YangModelParserListenerImpl extends YangParserBaseListener {
 \r
     @Override\r
     public void enterRevision_stmts(Revision_stmtsContext ctx) {\r
-        TreeMap<Date, Revision_stmtContext> revisions = new TreeMap<Date, Revision_stmtContext>();\r
-\r
-        for (int i = 0; i < ctx.getChildCount(); ++i) {\r
-            final ParseTree treeNode = ctx.getChild(i);\r
-            if (treeNode instanceof Revision_stmtContext) {\r
-                final String revisionDateStr = stringFromNode(treeNode);\r
-                try {\r
-                    Date revision = simpleDateFormat.parse(revisionDateStr);\r
-                    revisions.put(revision, (Revision_stmtContext)treeNode);\r
-\r
-                } catch (ParseException e) {\r
-                    final String message = "Failed to parse revision string: "+ revisionDateStr;\r
-                    logger.warn(message);\r
+        if (ctx != null) {\r
+            for (int i = 0; i < ctx.getChildCount(); ++i) {\r
+                final ParseTree treeNode = ctx.getChild(i);\r
+                if (treeNode instanceof Revision_stmtContext) {\r
+                    updateRevisionForRevisionStatement(treeNode);\r
                 }\r
             }\r
         }\r
-        if(revisions.size() > 0) {\r
-            Revision_stmtContext revisionCtx = revisions.firstEntry().getValue();\r
-            moduleBuilder.setRevision(revisions.firstKey());\r
-\r
-            for(int i = 0; i < revisionCtx.getChildCount(); i++) {\r
-                ParseTree child = revisionCtx.getChild(i);\r
-                if(child instanceof Reference_stmtContext) {\r
-                    moduleBuilder.setReference(stringFromNode(child));\r
+    }\r
+\r
+    private void updateRevisionForRevisionStatement(final ParseTree treeNode) {\r
+        final String revisionDateStr = stringFromNode(treeNode);\r
+        try {\r
+            final Date revision = simpleDateFormat.parse(revisionDateStr);\r
+            if ((revision != null) && (this.revision.compareTo(revision) < 0)) {\r
+                this.revision = revision;\r
+                moduleBuilder.setRevision(this.revision);\r
+                for (int i = 0; i < treeNode.getChildCount(); ++i) {\r
+                    ParseTree child = treeNode.getChild(i);\r
+                    if (child instanceof Reference_stmtContext) {\r
+                        moduleBuilder.setReference(stringFromNode(child));\r
+                    }\r
                 }\r
             }\r
+        } catch (ParseException e) {\r
+            final String message = "Failed to parse revision string: "\r
+                    + revisionDateStr;\r
+            logger.warn(message);\r
         }\r
     }\r
-\r
+    \r
     @Override\r
     public void enterImport_stmt(Import_stmtContext ctx) {\r
         super.enterImport_stmt(ctx);\r
@@ -305,8 +314,6 @@ final class YangModelParserListenerImpl extends YangParserBaseListener {
             }\r
         }\r
 \r
-\r
-\r
         // if this is base yang type...\r
         if(YangTypesConverter.isBaseYangType(typeName)) {\r
             if (typeBody == null) {\r
@@ -650,6 +657,33 @@ final class YangModelParserListenerImpl extends YangParserBaseListener {
         moduleBuilder.addConfiguration(configuration, actualPath);\r
     }\r
 \r
+    @Override\r
+    public void enterIdentity_stmt(YangParser.Identity_stmtContext ctx) {\r
+        final String identityName = stringFromNode(ctx);\r
+        final QName identityQName = new QName(namespace, revision,\r
+                yangModelPrefix, identityName);\r
+        IdentitySchemaNodeBuilder builder = moduleBuilder.addIdentity(identityQName);\r
+        updatePath(identityName);\r
+\r
+        builder.setPath(createActualSchemaPath(actualPath, namespace,\r
+                revision, yangModelPrefix));\r
+        parseSchemaNodeArgs(ctx, builder);\r
+\r
+        for(int i = 0; i < ctx.getChildCount(); i++) {\r
+            ParseTree child = ctx.getChild(i);\r
+            if(child instanceof Base_stmtContext) {\r
+                String baseIdentityName = stringFromNode(child);\r
+                builder.setBaseIdentityName(baseIdentityName);\r
+            }\r
+        }\r
+    }\r
+\r
+    @Override\r
+    public void exitIdentity_stmt(YangParser.Identity_stmtContext ctx) {\r
+        final String actContainer = actualPath.pop();\r
+        logger.debug("exiting " + actContainer);\r
+    }\r
+\r
     public ModuleBuilder getModuleBuilder() {\r
         return moduleBuilder;\r
     }\r
@@ -662,4 +696,4 @@ final class YangModelParserListenerImpl extends YangParserBaseListener {
         return Collections.unmodifiableList(actualPath);\r
     }\r
 \r
-}
+}\r