X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fsal%2Fyang-prototype%2Fcode-generator%2Fyang-model-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fyang%2Fmodel%2Fparser%2Fimpl%2FYangModelParserListenerImpl.java;h=6ff69eee516986dce0b02b26c9ef56c43c65f566;hp=a9fce16bfaee5569962526de28427f887fcfdd6d;hb=e028e5b6177c47d08f4f2da677759c4665da3f84;hpb=bb3842c34d5c56d9aa37c02e9eea6128a2f6d86b diff --git a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/impl/YangModelParserListenerImpl.java b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/impl/YangModelParserListenerImpl.java index a9fce16bfa..6ff69eee51 100644 --- a/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/impl/YangModelParserListenerImpl.java +++ b/opendaylight/sal/yang-prototype/code-generator/yang-model-parser-impl/src/main/java/org/opendaylight/controller/yang/model/parser/impl/YangModelParserListenerImpl.java @@ -22,6 +22,7 @@ import java.util.TreeMap; import org.antlr.v4.runtime.tree.ParseTree; import org.opendaylight.controller.antlrv4.code.gen.YangParser; +import org.opendaylight.controller.antlrv4.code.gen.YangParser.Base_stmtContext; import org.opendaylight.controller.antlrv4.code.gen.YangParser.Contact_stmtContext; import org.opendaylight.controller.antlrv4.code.gen.YangParser.Container_stmtContext; import org.opendaylight.controller.antlrv4.code.gen.YangParser.Description_stmtContext; @@ -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; import org.opendaylight.controller.antlrv4.code.gen.YangParser.Yang_version_stmtContext; import org.opendaylight.controller.antlrv4.code.gen.YangParserBaseListener; -import org.opendaylight.controller.model.util.YangTypesConverter; import org.opendaylight.controller.yang.common.QName; import org.opendaylight.controller.yang.model.api.Status; import org.opendaylight.controller.yang.model.api.TypeDefinition; @@ -59,6 +59,7 @@ import org.opendaylight.controller.yang.model.parser.builder.impl.ContainerSchem import org.opendaylight.controller.yang.model.parser.builder.impl.DeviationBuilder; import org.opendaylight.controller.yang.model.parser.builder.impl.ExtensionBuilder; import org.opendaylight.controller.yang.model.parser.builder.impl.FeatureBuilder; +import org.opendaylight.controller.yang.model.parser.builder.impl.IdentitySchemaNodeBuilder; import org.opendaylight.controller.yang.model.parser.builder.impl.LeafListSchemaNodeBuilder; import org.opendaylight.controller.yang.model.parser.builder.impl.LeafSchemaNodeBuilder; import org.opendaylight.controller.yang.model.parser.builder.impl.ListSchemaNodeBuilder; @@ -67,6 +68,7 @@ import org.opendaylight.controller.yang.model.parser.builder.impl.NotificationBu import org.opendaylight.controller.yang.model.parser.builder.impl.RpcDefinitionBuilder; import org.opendaylight.controller.yang.model.parser.builder.impl.TypedefBuilder; import org.opendaylight.controller.yang.model.parser.builder.impl.UnknownSchemaNodeBuilder; +import org.opendaylight.controller.yang.model.util.YangTypesConverter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -80,7 +82,7 @@ final class YangModelParserListenerImpl extends YangParserBaseListener { private String moduleName; private URI namespace; private String yangModelPrefix; - private Date revision; + private Date revision = new Date(0L); private final DateFormat simpleDateFormat = new SimpleDateFormat( "yyyy-mm-dd"); @@ -121,7 +123,8 @@ final class YangModelParserListenerImpl extends YangParserBaseListener { @Override public void enterModule_header_stmts(final Module_header_stmtsContext ctx) { super.enterModule_header_stmts(ctx); - + + String yangVersion = null; for (int i = 0; i < ctx.getChildCount(); ++i) { final ParseTree treeNode = ctx.getChild(i); if (treeNode instanceof Namespace_stmtContext) { @@ -132,10 +135,14 @@ final class YangModelParserListenerImpl extends YangParserBaseListener { yangModelPrefix = stringFromNode(treeNode); moduleBuilder.setPrefix(yangModelPrefix); } else if (treeNode instanceof Yang_version_stmtContext) { - final String yangVersion = stringFromNode(treeNode); - moduleBuilder.setYangVersion(yangVersion); + yangVersion = stringFromNode(treeNode); } } + + if (yangVersion == null) { + yangVersion = "1"; + } + moduleBuilder.setYangVersion(yangVersion); } @Override @@ -167,35 +174,37 @@ final class YangModelParserListenerImpl extends YangParserBaseListener { @Override public void enterRevision_stmts(Revision_stmtsContext ctx) { - TreeMap revisions = new TreeMap(); - - for (int i = 0; i < ctx.getChildCount(); ++i) { - final ParseTree treeNode = ctx.getChild(i); - if (treeNode instanceof Revision_stmtContext) { - final String revisionDateStr = stringFromNode(treeNode); - try { - Date revision = simpleDateFormat.parse(revisionDateStr); - revisions.put(revision, (Revision_stmtContext)treeNode); - - } catch (ParseException e) { - final String message = "Failed to parse revision string: "+ revisionDateStr; - logger.warn(message); + if (ctx != null) { + for (int i = 0; i < ctx.getChildCount(); ++i) { + final ParseTree treeNode = ctx.getChild(i); + if (treeNode instanceof Revision_stmtContext) { + updateRevisionForRevisionStatement(treeNode); } } } - if(revisions.size() > 0) { - Revision_stmtContext revisionCtx = revisions.firstEntry().getValue(); - moduleBuilder.setRevision(revisions.firstKey()); - - for(int i = 0; i < revisionCtx.getChildCount(); i++) { - ParseTree child = revisionCtx.getChild(i); - if(child instanceof Reference_stmtContext) { - moduleBuilder.setReference(stringFromNode(child)); + } + + private void updateRevisionForRevisionStatement(final ParseTree treeNode) { + final String revisionDateStr = stringFromNode(treeNode); + try { + final Date revision = simpleDateFormat.parse(revisionDateStr); + if ((revision != null) && (this.revision.compareTo(revision) < 0)) { + this.revision = revision; + moduleBuilder.setRevision(this.revision); + for (int i = 0; i < treeNode.getChildCount(); ++i) { + ParseTree child = treeNode.getChild(i); + if (child instanceof Reference_stmtContext) { + moduleBuilder.setReference(stringFromNode(child)); + } } } + } catch (ParseException e) { + final String message = "Failed to parse revision string: " + + revisionDateStr; + logger.warn(message); } } - + @Override public void enterImport_stmt(Import_stmtContext ctx) { super.enterImport_stmt(ctx); @@ -305,8 +314,6 @@ final class YangModelParserListenerImpl extends YangParserBaseListener { } } - - // if this is base yang type... if(YangTypesConverter.isBaseYangType(typeName)) { if (typeBody == null) { @@ -650,6 +657,33 @@ final class YangModelParserListenerImpl extends YangParserBaseListener { moduleBuilder.addConfiguration(configuration, actualPath); } + @Override + public void enterIdentity_stmt(YangParser.Identity_stmtContext ctx) { + final String identityName = stringFromNode(ctx); + final QName identityQName = new QName(namespace, revision, + yangModelPrefix, identityName); + IdentitySchemaNodeBuilder builder = moduleBuilder.addIdentity(identityQName); + updatePath(identityName); + + builder.setPath(createActualSchemaPath(actualPath, namespace, + revision, yangModelPrefix)); + parseSchemaNodeArgs(ctx, builder); + + for(int i = 0; i < ctx.getChildCount(); i++) { + ParseTree child = ctx.getChild(i); + if(child instanceof Base_stmtContext) { + String baseIdentityName = stringFromNode(child); + builder.setBaseIdentityName(baseIdentityName); + } + } + } + + @Override + public void exitIdentity_stmt(YangParser.Identity_stmtContext ctx) { + final String actContainer = actualPath.pop(); + logger.debug("exiting " + actContainer); + } + public ModuleBuilder getModuleBuilder() { return moduleBuilder; } @@ -662,4 +696,4 @@ final class YangModelParserListenerImpl extends YangParserBaseListener { return Collections.unmodifiableList(actualPath); } -} +}