Gaurav Agrawal
Committed by Gerrit Code Review

[ONOS-3897] Yang Listener for Enumeration Data Type

Change-Id: If257c73da8fe2dcc2f4111f103967cfcdd7fa273
......@@ -20,6 +20,8 @@ import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
import org.onosproject.yangutils.parser.Parsable;
import org.onosproject.yangutils.parser.ParsableDataType;
import java.util.Objects;
/*-
* The "ENUM" statement, which is a sub-statement to the "type"
* statement, MUST be present if the type is "enumeration". It is
......@@ -188,6 +190,23 @@ public class YangEnum implements YangCommonInfo, Parsable {
return ParsableDataType.ENUM_DATA;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof YangEnum) {
final YangEnum other = (YangEnum) obj;
return Objects.equals(this.namedValue, other.namedValue);
}
return false;
}
@Override
public int hashCode() {
return Objects.hashCode(this.namedValue);
}
/**
* Validate the data on entering the corresponding parse tree node.
*
......
......@@ -16,13 +16,12 @@
package org.onosproject.yangutils.datamodel;
import java.util.HashSet;
import java.util.Set;
import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
import org.onosproject.yangutils.parser.Parsable;
import org.onosproject.yangutils.parser.ParsableDataType;
import org.onosproject.yangutils.translator.CachedFileHandle;
import java.util.HashSet;
import java.util.Set;
/*
* The enumeration built-in type represents values from a set of
......@@ -32,20 +31,19 @@ import org.onosproject.yangutils.translator.CachedFileHandle;
/**
* Maintains the enumeration data type information.
*/
public class YangEnumeration extends YangNode implements Parsable {
public class YangEnumeration implements Parsable {
/**
* Enumeration info set.
*/
// Enumeration info set.
private Set<YangEnum> enumSet;
// Enumeration name.
private String enumerationName;
/**
* Create an enumeration object.
* Creates an enumeration object.
*/
public YangEnumeration() {
super(YangNodeType.ENUMERATION_NODE);
setEnumSet(new HashSet<YangEnum>());
}
/**
......@@ -67,12 +65,33 @@ public class YangEnumeration extends YangNode implements Parsable {
}
/**
* Add ENUM value.
* Add ENUM information.
*
* @param enumInfo the ENUM information to be added.
* @throws DataModelException due to violation in data model rules.
*/
public void addEnumInfo(YangEnum enumInfo) throws DataModelException {
if (!getEnumSet().add(enumInfo)) {
throw new DataModelException("YANG ENUM already exists");
}
}
/**
* Return enumeration name.
*
* @param enumInfo the ENUM value of string
* @return the enumeration name
*/
public void addEnumInfo(YangEnum enumInfo) {
public String getEnumerationName() {
return enumerationName;
}
/**
* Set the enumeration name.
*
* @param enumerationName enumeration name
*/
public void setEnumerationName(String enumerationName) {
this.enumerationName = enumerationName;
}
/**
......@@ -104,70 +123,4 @@ public class YangEnumeration extends YangNode implements Parsable {
public void validateDataOnExit() throws DataModelException {
// TODO auto-generated method stub, to be implemented by parser
}
/* (non-Javadoc)
* @see org.onosproject.yangutils.datamodel.YangNode#getName()
*/
@Override
public String getName() {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.onosproject.yangutils.datamodel.YangNode#setName(java.lang.String)
*/
@Override
public void setName(String name) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.onosproject.yangutils.datamodel.YangNode#getPackage()
*/
@Override
public String getPackage() {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see org.onosproject.yangutils.datamodel.YangNode#setPackage(java.lang.String)
*/
@Override
public void setPackage(String pkg) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.onosproject.yangutils.translator.CodeGenerator#generateJavaCodeEntry()
*/
@Override
public void generateJavaCodeEntry() {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see org.onosproject.yangutils.translator.CodeGenerator#generateJavaCodeExit()
*/
@Override
public void generateJavaCodeExit() {
// TODO Auto-generated method stub
}
@Override
public CachedFileHandle getFileHandle() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setFileHandle(CachedFileHandle fileHandle) {
// TODO Auto-generated method stub
}
}
......
......@@ -215,6 +215,11 @@ public enum ParsableDataType {
DEFAULT_DATA,
/**
* Identifies the YANG value element parsed data.
*/
VALUE_DATA,
/**
* Identifies the YANG organization parsed data.
*/
ORGANIZATION_DATA;
......@@ -306,6 +311,8 @@ public enum ParsableDataType {
return "prefix";
case ORGANIZATION_DATA:
return "organization";
case VALUE_DATA:
return "value";
case DEFAULT_DATA:
return "default";
default:
......
......@@ -16,8 +16,6 @@
package org.onosproject.yangutils.parser.impl;
import java.util.Stack;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ErrorNode;
import org.antlr.v4.runtime.tree.TerminalNode;
......@@ -32,6 +30,8 @@ import org.onosproject.yangutils.parser.impl.listeners.ContactListener;
import org.onosproject.yangutils.parser.impl.listeners.ContainerListener;
import org.onosproject.yangutils.parser.impl.listeners.DefaultListener;
import org.onosproject.yangutils.parser.impl.listeners.DescriptionListener;
import org.onosproject.yangutils.parser.impl.listeners.EnumListener;
import org.onosproject.yangutils.parser.impl.listeners.EnumerationListener;
import org.onosproject.yangutils.parser.impl.listeners.ImportListener;
import org.onosproject.yangutils.parser.impl.listeners.IncludeListener;
import org.onosproject.yangutils.parser.impl.listeners.KeyListener;
......@@ -54,8 +54,11 @@ import org.onosproject.yangutils.parser.impl.listeners.SubModuleListener;
import org.onosproject.yangutils.parser.impl.listeners.TypeDefListener;
import org.onosproject.yangutils.parser.impl.listeners.TypeListener;
import org.onosproject.yangutils.parser.impl.listeners.UnitsListener;
import org.onosproject.yangutils.parser.impl.listeners.ValueListener;
import org.onosproject.yangutils.parser.impl.listeners.VersionListener;
import java.util.Stack;
/**
* ANTLR generates a parse-tree listener interface that responds to events
* triggered by the built-in tree walker. The methods in listener are just
......@@ -128,62 +131,62 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void enterModuleBody(GeneratedYangParser.ModuleBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitModuleBody(GeneratedYangParser.ModuleBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterModuleHeaderStatement(GeneratedYangParser.ModuleHeaderStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitModuleHeaderStatement(GeneratedYangParser.ModuleHeaderStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterLinkageStatements(GeneratedYangParser.LinkageStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitLinkageStatements(GeneratedYangParser.LinkageStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterMetaStatements(GeneratedYangParser.MetaStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitMetaStatements(GeneratedYangParser.MetaStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterRevisionStatements(GeneratedYangParser.RevisionStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitRevisionStatements(GeneratedYangParser.RevisionStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterBodyStatements(GeneratedYangParser.BodyStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitBodyStatements(GeneratedYangParser.BodyStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -193,7 +196,7 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitYangVersionStatement(GeneratedYangParser.YangVersionStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -203,7 +206,7 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitNamespaceStatement(GeneratedYangParser.NamespaceStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -213,7 +216,7 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitPrefixStatement(GeneratedYangParser.PrefixStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -228,12 +231,12 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void enterImportStatementBody(GeneratedYangParser.ImportStatementBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitImportStatementBody(GeneratedYangParser.ImportStatementBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -243,7 +246,7 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitRevisionDateStatement(GeneratedYangParser.RevisionDateStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -263,7 +266,7 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitOrganizationStatement(GeneratedYangParser.OrganizationStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -273,7 +276,7 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitContactStatement(GeneratedYangParser.ContactStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -283,7 +286,7 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitDescriptionStatement(GeneratedYangParser.DescriptionStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -293,7 +296,7 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitReferenceStatement(GeneratedYangParser.ReferenceStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -308,12 +311,12 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void enterRevisionStatementBody(GeneratedYangParser.RevisionStatementBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitRevisionStatementBody(GeneratedYangParser.RevisionStatementBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -328,22 +331,22 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void enterSubmoduleBody(GeneratedYangParser.SubmoduleBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitSubmoduleBody(GeneratedYangParser.SubmoduleBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterSubmoduleHeaderStatement(GeneratedYangParser.SubmoduleHeaderStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitSubmoduleHeaderStatement(GeneratedYangParser.SubmoduleHeaderStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -358,132 +361,132 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void enterBelongstoStatementBody(GeneratedYangParser.BelongstoStatementBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitBelongstoStatementBody(GeneratedYangParser.BelongstoStatementBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterExtensionStatement(GeneratedYangParser.ExtensionStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitExtensionStatement(GeneratedYangParser.ExtensionStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterExtensionBody(GeneratedYangParser.ExtensionBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitExtensionBody(GeneratedYangParser.ExtensionBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterArgumentStatement(GeneratedYangParser.ArgumentStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitArgumentStatement(GeneratedYangParser.ArgumentStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterArgumentBody(GeneratedYangParser.ArgumentBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitArgumentBody(GeneratedYangParser.ArgumentBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterYinElementStatement(GeneratedYangParser.YinElementStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitYinElementStatement(GeneratedYangParser.YinElementStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterIdentityStatement(GeneratedYangParser.IdentityStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitIdentityStatement(GeneratedYangParser.IdentityStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterIdentityBody(GeneratedYangParser.IdentityBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitIdentityBody(GeneratedYangParser.IdentityBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterBaseStatement(GeneratedYangParser.BaseStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitBaseStatement(GeneratedYangParser.BaseStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterFeatureStatement(GeneratedYangParser.FeatureStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitFeatureStatement(GeneratedYangParser.FeatureStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterFeatureBody(GeneratedYangParser.FeatureBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitFeatureBody(GeneratedYangParser.FeatureBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterDataDefStatement(GeneratedYangParser.DataDefStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitDataDefStatement(GeneratedYangParser.DataDefStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterIfFeatureStatement(GeneratedYangParser.IfFeatureStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitIfFeatureStatement(GeneratedYangParser.IfFeatureStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -493,7 +496,7 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitUnitsStatement(GeneratedYangParser.UnitsStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -513,77 +516,77 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitTypeStatement(GeneratedYangParser.TypeStatementContext ctx) {
//TODO: implement the method.
TypeListener.processTypeExit(this, ctx);
}
@Override
public void enterTypeBodyStatements(GeneratedYangParser.TypeBodyStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitTypeBodyStatements(GeneratedYangParser.TypeBodyStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterNumericalRestrictions(GeneratedYangParser.NumericalRestrictionsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitNumericalRestrictions(GeneratedYangParser.NumericalRestrictionsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterRangeStatement(GeneratedYangParser.RangeStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitRangeStatement(GeneratedYangParser.RangeStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterCommonStatements(GeneratedYangParser.CommonStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitCommonStatements(GeneratedYangParser.CommonStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterStringRestrictions(GeneratedYangParser.StringRestrictionsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitStringRestrictions(GeneratedYangParser.StringRestrictionsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterLengthStatement(GeneratedYangParser.LengthStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitLengthStatement(GeneratedYangParser.LengthStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterPatternStatement(GeneratedYangParser.PatternStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitPatternStatement(GeneratedYangParser.PatternStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -593,137 +596,137 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitDefaultStatement(GeneratedYangParser.DefaultStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterEnumSpecification(GeneratedYangParser.EnumSpecificationContext ctx) {
//TODO: implement the method.
EnumerationListener.processEnumerationEntry(this, ctx);
}
@Override
public void exitEnumSpecification(GeneratedYangParser.EnumSpecificationContext ctx) {
//TODO: implement the method.
EnumerationListener.processEnumerationExit(this, ctx);
}
@Override
public void enterEnumStatement(GeneratedYangParser.EnumStatementContext ctx) {
//TODO: implement the method.
EnumListener.processEnumEntry(this, ctx);
}
@Override
public void exitEnumStatement(GeneratedYangParser.EnumStatementContext ctx) {
//TODO: implement the method.
EnumListener.processEnumExit(this, ctx);
}
@Override
public void enterEnumStatementBody(GeneratedYangParser.EnumStatementBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitEnumStatementBody(GeneratedYangParser.EnumStatementBodyContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterPathStatement(GeneratedYangParser.PathStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitPathStatement(GeneratedYangParser.PathStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterInstanceIdentifierSpecification(GeneratedYangParser.InstanceIdentifierSpecificationContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitInstanceIdentifierSpecification(GeneratedYangParser.InstanceIdentifierSpecificationContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterIdentityrefSpecification(GeneratedYangParser.IdentityrefSpecificationContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitIdentityrefSpecification(GeneratedYangParser.IdentityrefSpecificationContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterUnionSpecification(GeneratedYangParser.UnionSpecificationContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitUnionSpecification(GeneratedYangParser.UnionSpecificationContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterBitsSpecification(GeneratedYangParser.BitsSpecificationContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitBitsSpecification(GeneratedYangParser.BitsSpecificationContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterBitStatement(GeneratedYangParser.BitStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitBitStatement(GeneratedYangParser.BitStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterBitBodyStatement(GeneratedYangParser.BitBodyStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitBitBodyStatement(GeneratedYangParser.BitBodyStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterPositionStatement(GeneratedYangParser.PositionStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitPositionStatement(GeneratedYangParser.PositionStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -733,7 +736,7 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitStatusStatement(GeneratedYangParser.StatusStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -743,7 +746,7 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitConfigStatement(GeneratedYangParser.ConfigStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -753,7 +756,7 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitMandatoryStatement(GeneratedYangParser.MandatoryStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -763,47 +766,47 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitPresenceStatement(GeneratedYangParser.PresenceStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterOrderedByStatement(GeneratedYangParser.OrderedByStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitOrderedByStatement(GeneratedYangParser.OrderedByStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterMustStatement(GeneratedYangParser.MustStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitMustStatement(GeneratedYangParser.MustStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterErrorMessageStatement(GeneratedYangParser.ErrorMessageStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitErrorMessageStatement(GeneratedYangParser.ErrorMessageStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterErrorAppTagStatement(GeneratedYangParser.ErrorAppTagStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitErrorAppTagStatement(GeneratedYangParser.ErrorAppTagStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -813,7 +816,7 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitMinElementsStatement(GeneratedYangParser.MinElementsStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -823,37 +826,37 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitMaxElementsStatement(GeneratedYangParser.MaxElementsStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterMaxValueArgument(GeneratedYangParser.MaxValueArgumentContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitMaxValueArgument(GeneratedYangParser.MaxValueArgumentContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterValueStatement(GeneratedYangParser.ValueStatementContext ctx) {
//TODO: implement the method.
ValueListener.processValueEntry(this, ctx);
}
@Override
public void exitValueStatement(GeneratedYangParser.ValueStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterGroupingStatement(GeneratedYangParser.GroupingStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitGroupingStatement(GeneratedYangParser.GroupingStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
......@@ -903,276 +906,276 @@ public class TreeWalkListener implements GeneratedYangListener {
@Override
public void exitKeyStatement(GeneratedYangParser.KeyStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterUniqueStatement(GeneratedYangParser.UniqueStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitUniqueStatement(GeneratedYangParser.UniqueStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterChoiceStatement(GeneratedYangParser.ChoiceStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitChoiceStatement(GeneratedYangParser.ChoiceStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterShortCaseStatement(GeneratedYangParser.ShortCaseStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitShortCaseStatement(GeneratedYangParser.ShortCaseStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterCaseStatement(GeneratedYangParser.CaseStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitCaseStatement(GeneratedYangParser.CaseStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterUsesStatement(GeneratedYangParser.UsesStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitUsesStatement(GeneratedYangParser.UsesStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterRefineStatement(GeneratedYangParser.RefineStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitRefineStatement(GeneratedYangParser.RefineStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterRefineContainerStatements(GeneratedYangParser.RefineContainerStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitRefineContainerStatements(GeneratedYangParser.RefineContainerStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterRefineLeafStatements(GeneratedYangParser.RefineLeafStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitRefineLeafStatements(GeneratedYangParser.RefineLeafStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterRefineLeafListStatements(GeneratedYangParser.RefineLeafListStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitRefineLeafListStatements(GeneratedYangParser.RefineLeafListStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterRefineListStatements(GeneratedYangParser.RefineListStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitRefineListStatements(GeneratedYangParser.RefineListStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterRefineChoiceStatements(GeneratedYangParser.RefineChoiceStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitRefineChoiceStatements(GeneratedYangParser.RefineChoiceStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterRefineCaseStatements(GeneratedYangParser.RefineCaseStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitRefineCaseStatements(GeneratedYangParser.RefineCaseStatementsContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterUsesAugmentStatement(GeneratedYangParser.UsesAugmentStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitUsesAugmentStatement(GeneratedYangParser.UsesAugmentStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterAugmentStatement(GeneratedYangParser.AugmentStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitAugmentStatement(GeneratedYangParser.AugmentStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterWhenStatement(GeneratedYangParser.WhenStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitWhenStatement(GeneratedYangParser.WhenStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterRpcStatement(GeneratedYangParser.RpcStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitRpcStatement(GeneratedYangParser.RpcStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterInputStatement(GeneratedYangParser.InputStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitInputStatement(GeneratedYangParser.InputStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterOutputStatement(GeneratedYangParser.OutputStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitOutputStatement(GeneratedYangParser.OutputStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterNotificationStatement(GeneratedYangParser.NotificationStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitNotificationStatement(GeneratedYangParser.NotificationStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterDeviationStatement(GeneratedYangParser.DeviationStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitDeviationStatement(GeneratedYangParser.DeviationStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterDeviateNotSupportedStatement(GeneratedYangParser.DeviateNotSupportedStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitDeviateNotSupportedStatement(GeneratedYangParser.DeviateNotSupportedStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterDeviateAddStatement(GeneratedYangParser.DeviateAddStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitDeviateAddStatement(GeneratedYangParser.DeviateAddStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterDeviateDeleteStatement(GeneratedYangParser.DeviateDeleteStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitDeviateDeleteStatement(GeneratedYangParser.DeviateDeleteStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterDeviateReplaceStatement(GeneratedYangParser.DeviateReplaceStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitDeviateReplaceStatement(GeneratedYangParser.DeviateReplaceStatementContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterString(GeneratedYangParser.StringContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitString(GeneratedYangParser.StringContext ctx) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void visitTerminal(TerminalNode terminalNode) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void visitErrorNode(ErrorNode errorNode) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void enterEveryRule(ParserRuleContext parserRuleContext) {
//TODO: implement the method.
// TODO: implement the method.
}
@Override
public void exitEveryRule(ParserRuleContext parserRuleContext) {
//TODO: implement the method.
// TODO: implement the method.
}
}
......
/*
* Copyright 2014-2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.yangutils.parser.impl.listeners;
/*
* Reference: RFC6020 and YANG ANTLR Grammar
*
* ABNF grammar as per RFC6020
* enum-stmt = enum-keyword sep string optsep
* (";" /
* "{" stmtsep
* ;; these stmts can appear in any order
* [value-stmt stmtsep]
* [status-stmt stmtsep]
* [description-stmt stmtsep]
* [reference-stmt stmtsep]
* "}")
*
* ANTLR grammar rule
* enumStatement : ENUM_KEYWORD string (STMTEND | LEFT_CURLY_BRACE enumStatementBody RIGHT_CURLY_BRACE);
*
* enumStatementBody : valueStatement? statusStatement? descriptionStatement? referenceStatement?
* | valueStatement? statusStatement? referenceStatement? descriptionStatement?
* | valueStatement? descriptionStatement? statusStatement? referenceStatement?
* | valueStatement? descriptionStatement? referenceStatement? statusStatement?
* | valueStatement? referenceStatement? statusStatement? descriptionStatement?
* | valueStatement? referenceStatement? descriptionStatement? statusStatement?
* | statusStatement? valueStatement? descriptionStatement? referenceStatement?
* | statusStatement? valueStatement? referenceStatement? descriptionStatement?
* | statusStatement? descriptionStatement? descriptionStatement? valueStatement?
* | statusStatement? descriptionStatement? valueStatement? descriptionStatement?
* | statusStatement? referenceStatement? valueStatement? descriptionStatement?
* | statusStatement? referenceStatement? descriptionStatement? valueStatement?
* | descriptionStatement? valueStatement? statusStatement? referenceStatement?
* | descriptionStatement? valueStatement? referenceStatement? statusStatement?
* | descriptionStatement? statusStatement? valueStatement? referenceStatement?
* | descriptionStatement? statusStatement? referenceStatement? valueStatement?
* | descriptionStatement? referenceStatement? valueStatement? statusStatement?
* | descriptionStatement? referenceStatement? statusStatement? valueStatement?
* | referenceStatement? valueStatement? descriptionStatement? statusStatement?
* | referenceStatement? valueStatement? statusStatement? descriptionStatement?
* | referenceStatement? statusStatement? descriptionStatement? valueStatement?
* | referenceStatement? statusStatement? valueStatement? descriptionStatement?
* | referenceStatement? descriptionStatement? valueStatement? statusStatement?
* | referenceStatement? descriptionStatement? statusStatement? valueStatement?
* ;
*/
import org.onosproject.yangutils.datamodel.YangEnum;
import org.onosproject.yangutils.datamodel.YangEnumeration;
import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
import org.onosproject.yangutils.parser.Parsable;
import static org.onosproject.yangutils.parser.ParsableDataType.ENUM_DATA;
import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
import org.onosproject.yangutils.parser.exceptions.ParserException;
import org.onosproject.yangutils.parser.impl.TreeWalkListener;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructExtendedListenerErrorMessage;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.DUPLICATE_ENTRY;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
/**
* Implements listener based call back function corresponding to the "enum" rule
* defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
*/
public final class EnumListener {
/**
* Creates a new enum listener.
*/
private EnumListener() {
}
/**
* It is called when parser enters grammar rule (enum), it perform
* validations and updates the data model tree.
*
* @param listener listener's object.
* @param ctx context object of the grammar rule.
*/
public static void processEnumEntry(TreeWalkListener listener, GeneratedYangParser.EnumStatementContext ctx) {
// Check for stack to be non empty.
checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUM_DATA, ctx.string().getText(), ENTRY);
YangEnum enumNode = new YangEnum();
enumNode.setNamedValue(ctx.string().getText());
listener.getParsedDataStack().push(enumNode);
}
/**
* It is called when parser exits from grammar rule (enum), it perform
* validations and update the data model tree.
*
* @param listener Listener's object.
* @param ctx context object of the grammar rule.
*/
public static void processEnumExit(TreeWalkListener listener, GeneratedYangParser.EnumStatementContext ctx) {
// Check for stack to be non empty.
checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUM_DATA, ctx.string().getText(), EXIT);
Parsable tmpEnumNode = listener.getParsedDataStack().peek();
if (tmpEnumNode instanceof YangEnum) {
listener.getParsedDataStack().pop();
// Check for stack to be non empty.
checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUM_DATA, ctx.string().getText(), EXIT);
Parsable tmpNode = listener.getParsedDataStack().peek();
switch (tmpNode.getParsableDataType()) {
case ENUMERATION_DATA: {
YangEnumeration yangEnumeration = (YangEnumeration) tmpNode;
if ((ctx.enumStatementBody() == null) || (ctx.enumStatementBody().valueStatement() == null)) {
int maxValue = 0;
boolean isValuePresent = false;
for (YangEnum curEnum : yangEnumeration.getEnumSet()) {
if (maxValue <= curEnum.getValue()) {
maxValue = curEnum.getValue();
isValuePresent = true;
}
}
if (isValuePresent) {
maxValue++;
}
((YangEnum) tmpEnumNode).setValue(maxValue);
}
try {
yangEnumeration.addEnumInfo((YangEnum) tmpEnumNode);
} catch (DataModelException e) {
ParserException parserException = new ParserException(constructExtendedListenerErrorMessage(
DUPLICATE_ENTRY, ENUM_DATA, ctx.string().getText(), EXIT, e.getMessage()));
parserException.setLine(ctx.string().STRING(0).getSymbol().getLine());
parserException.setCharPosition(ctx.string().STRING(0).getSymbol().getCharPositionInLine());
throw parserException;
}
break;
}
default:
throw new ParserException(
constructListenerErrorMessage(INVALID_HOLDER, ENUM_DATA, ctx.string().getText(), EXIT));
}
} else {
throw new ParserException(
constructListenerErrorMessage(MISSING_CURRENT_HOLDER, ENUM_DATA, ctx.string().getText(), EXIT));
}
}
}
/*
* Copyright 2014-2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.yangutils.parser.impl.listeners;
/*
* Reference: RFC6020 and YANG ANTLR Grammar
*
* ABNF grammar as per RFC6020
* type-body-stmts = numerical-restrictions /
* decimal64-specification /
* string-restrictions /
* enum-specification /
* leafref-specification /
* identityref-specification /
* instance-identifier-specification /
* bits-specification /
* union-specification
*
* enum-specification = 1*(enum-stmt stmtsep)
*
* ANTLR grammar rule
*
* typeBodyStatements : numericalRestrictions | stringRestrictions | enumSpecification
* | leafrefSpecification | identityrefSpecification | instanceIdentifierSpecification
* | bitsSpecification | unionSpecification;
*
* enumSpecification : enumStatement+;
*/
import org.onosproject.yangutils.datamodel.YangEnumeration;
import org.onosproject.yangutils.datamodel.YangLeaf;
import org.onosproject.yangutils.datamodel.YangLeafList;
import org.onosproject.yangutils.datamodel.YangType;
import org.onosproject.yangutils.parser.Parsable;
import static org.onosproject.yangutils.parser.ParsableDataType.ENUMERATION_DATA;
import static org.onosproject.yangutils.parser.ParsableDataType.TYPE_DATA;
import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
import org.onosproject.yangutils.parser.exceptions.ParserException;
import org.onosproject.yangutils.parser.impl.TreeWalkListener;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
/**
* Implements listener based call back function corresponding to the
* "enumeration" rule defined in ANTLR grammar file for corresponding ABNF rule
* in RFC 6020.
*/
public final class EnumerationListener {
/**
* Creates a new enumeration listener.
*/
private EnumerationListener() {
}
/**
* It is called when parser enters grammar rule (enumeration), it perform
* validations and updates the data model tree.
*
* @param listener listener's object.
* @param ctx context object of the grammar rule.
*/
public static void processEnumerationEntry(TreeWalkListener listener,
GeneratedYangParser.EnumSpecificationContext ctx) {
// Check for stack to be non empty.
checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUMERATION_DATA, "", ENTRY);
if (listener.getParsedDataStack().peek() instanceof YangType) {
YangEnumeration enumerationNode = new YangEnumeration();
Parsable typeData = listener.getParsedDataStack().pop();
// Check for stack to be non empty.
checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUMERATION_DATA, "", ENTRY);
Parsable tmpData = listener.getParsedDataStack().peek();
switch (tmpData.getParsableDataType()) {
case LEAF_DATA:
enumerationNode.setEnumerationName(((YangLeaf) tmpData).getLeafName());
break;
case LEAF_LIST_DATA:
enumerationNode.setEnumerationName(((YangLeafList) tmpData).getLeafName());
break;
// TODO typedef, union, deviate.
default:
throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA,
((YangType) typeData).getDataTypeName(), ENTRY));
}
listener.getParsedDataStack().push(typeData);
listener.getParsedDataStack().push(enumerationNode);
} else {
throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, ENUMERATION_DATA, "", ENTRY));
}
}
/**
* It is called when parser exits from grammar rule (enumeration), it
* perform validations and update the data model tree.
*
* @param listener Listener's object.
* @param ctx context object of the grammar rule.
*/
public static void processEnumerationExit(TreeWalkListener listener,
GeneratedYangParser.EnumSpecificationContext ctx) {
// Check for stack to be non empty.
checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUMERATION_DATA, "", EXIT);
Parsable tmpEnumerationNode = listener.getParsedDataStack().peek();
if (tmpEnumerationNode instanceof YangEnumeration) {
listener.getParsedDataStack().pop();
// Check for stack to be non empty.
checkStackIsNotEmpty(listener, MISSING_HOLDER, ENUMERATION_DATA, "", EXIT);
Parsable tmpNode = listener.getParsedDataStack().peek();
switch (tmpNode.getParsableDataType()) {
case TYPE_DATA: {
YangType typeNode = (YangType) tmpNode;
typeNode.setDataTypeExtendedInfo((YangEnumeration) tmpEnumerationNode);
break;
}
default:
throw new ParserException(
constructListenerErrorMessage(INVALID_HOLDER, ENUMERATION_DATA, "", EXIT));
}
} else {
throw new ParserException(
constructListenerErrorMessage(MISSING_CURRENT_HOLDER, ENUMERATION_DATA, "", EXIT));
}
}
}
......@@ -21,18 +21,18 @@ import org.onosproject.yangutils.datamodel.YangLeaf;
import org.onosproject.yangutils.datamodel.YangLeafList;
import org.onosproject.yangutils.datamodel.YangType;
import org.onosproject.yangutils.parser.Parsable;
import static org.onosproject.yangutils.parser.ParsableDataType.TYPE_DATA;
import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
import org.onosproject.yangutils.parser.exceptions.ParserException;
import org.onosproject.yangutils.parser.impl.TreeWalkListener;
import static org.onosproject.yangutils.parser.ParsableDataType.TYPE_DATA;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_CURRENT_HOLDER;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
/*
* Reference: RFC6020 and YANG ANTLR Grammar
*
......@@ -48,8 +48,8 @@ import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidati
*/
/**
* Implements listener based call back function corresponding to the "type"
* rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
* Implements listener based call back function corresponding to the "type" rule
* defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
*/
public final class TypeListener {
......@@ -60,9 +60,8 @@ public final class TypeListener {
}
/**
* It is called when parser receives an input matching the grammar
* rule (type), performs validation and updates the data model
* tree.
* It is called when parser receives an input matching the grammar rule
* (type), performs validation and updates the data model tree.
*
* @param listener listener's object.
* @param ctx context object of the grammar rule.
......@@ -78,21 +77,46 @@ public final class TypeListener {
type.setDataTypeName(ctx.string().getText());
type.setDataType(yangDataTypes);
listener.getParsedDataStack().push(type);
}
/**
* It is called when parser exits from grammar rule (type), it perform
* validations and update the data model tree.
*
* @param listener Listener's object.
* @param ctx context object of the grammar rule.
*/
public static void processTypeExit(TreeWalkListener listener,
GeneratedYangParser.TypeStatementContext ctx) {
// Check for stack to be non empty.
checkStackIsNotEmpty(listener, MISSING_CURRENT_HOLDER, TYPE_DATA, ctx.string().getText(), EXIT);
Parsable type = listener.getParsedDataStack().pop();
if (!(type instanceof YangType)) {
throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA,
ctx.string().getText(), EXIT));
}
// Check for stack to be non empty.
checkStackIsNotEmpty(listener, MISSING_HOLDER, TYPE_DATA, ctx.string().getText(), EXIT);
Parsable tmpData = listener.getParsedDataStack().peek();
switch (tmpData.getParsableDataType()) {
case LEAF_DATA:
YangLeaf leaf = (YangLeaf) tmpData;
leaf.setDataType(type);
leaf.setDataType((YangType) type);
break;
case LEAF_LIST_DATA:
YangLeafList leafList = (YangLeafList) tmpData;
leafList.setDataType(type);
leafList.setDataType((YangType) type);
break;
case TYPEDEF_DATA: //TODO
break;
default:
throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, TYPE_DATA,
ctx.string().getText(), ENTRY));
ctx.string().getText(), EXIT));
}
}
}
......
/*
* Copyright 2014-2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.yangutils.parser.impl.listeners;
/*
* Reference: RFC6020 and YANG ANTLR Grammar
*
* ABNF grammar as per RFC6020
* value-stmt = value-keyword sep integer-value stmtend
*
* ANTLR grammar rule
* valueStatement : VALUE_KEYWORD ((MINUS INTEGER) | INTEGER) STMTEND;
*/
import org.onosproject.yangutils.datamodel.YangEnum;
import org.onosproject.yangutils.datamodel.YangEnumeration;
import org.onosproject.yangutils.parser.Parsable;
import static org.onosproject.yangutils.parser.ParsableDataType.VALUE_DATA;
import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
import org.onosproject.yangutils.parser.exceptions.ParserException;
import org.onosproject.yangutils.parser.impl.TreeWalkListener;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.ENTRY;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorLocation.EXIT;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorMessageConstruction.constructListenerErrorMessage;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.INVALID_HOLDER;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerErrorType.MISSING_HOLDER;
import static org.onosproject.yangutils.parser.impl.parserutils.ListenerValidation.checkStackIsNotEmpty;
/**
* Implements listener based call back function corresponding to the "value"
* rule defined in ANTLR grammar file for corresponding ABNF rule in RFC 6020.
*/
public final class ValueListener {
/**
* Creates a new value listener.
*/
private ValueListener() {
}
/**
* It is called when parser receives an input matching the grammar rule
* (value), perform validations and update the data model tree.
*
* @param listener Listener's object.
* @param ctx context object of the grammar rule.
*/
public static void processValueEntry(TreeWalkListener listener, GeneratedYangParser.ValueStatementContext ctx) {
// Check for stack to be non empty.
checkStackIsNotEmpty(listener, MISSING_HOLDER, VALUE_DATA, ctx.INTEGER().getText(), ENTRY);
// Obtain the node of the stack.
Parsable tmpNode = listener.getParsedDataStack().peek();
switch (tmpNode.getParsableDataType()) {
case ENUM_DATA: {
YangEnum enumNode = (YangEnum) tmpNode;
if (!isEnumValueValid(listener, ctx)) {
ParserException parserException = new ParserException("Input version not supported");
parserException.setLine(ctx.INTEGER().getSymbol().getLine());
parserException.setCharPosition(ctx.INTEGER().getSymbol().getCharPositionInLine());
throw parserException;
}
enumNode.setValue(Integer.valueOf(ctx.INTEGER().getText()));
break;
}
default:
throw new ParserException(
constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.INTEGER().getText(), ENTRY));
}
}
/**
* Validates ENUM value uniqueness.
*
* @param listener Listener's object.
* @param ctx context object of the grammar rule.
* @return validation result
*/
private static boolean isEnumValueValid(TreeWalkListener listener, GeneratedYangParser.ValueStatementContext ctx) {
Parsable enumNode = listener.getParsedDataStack().pop();
Parsable tmpNode = listener.getParsedDataStack().peek();
switch (tmpNode.getParsableDataType()) {
case ENUMERATION_DATA: {
YangEnumeration yangEnumeration = (YangEnumeration) tmpNode;
for (YangEnum curEnum : yangEnumeration.getEnumSet()) {
if (Integer.valueOf(ctx.INTEGER().getText()) == curEnum.getValue()) {
listener.getParsedDataStack().push(enumNode);
return false;
}
}
listener.getParsedDataStack().push(enumNode);
return true;
}
default:
listener.getParsedDataStack().push(enumNode);
throw new ParserException(
constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.INTEGER().getText(), EXIT));
}
}
}
......@@ -21,22 +21,26 @@ package org.onosproject.yangutils.parser.impl.parserutils;
*/
public enum ListenerErrorType {
/**
* Represents the parent holder in parsable stack for given YANG construct is invalid.
* Represents the parent holder in parsable stack for given YANG construct
* is invalid.
*/
INVALID_HOLDER(),
/**
* Represents the parent holder in parsable stack for given YANG construct is missing.
* Represents the parent holder in parsable stack for given YANG construct
* is missing.
*/
MISSING_HOLDER(),
/**
* Represents the current holder in parsable stack for given YANG construct is missing.
* Represents the current holder in parsable stack for given YANG construct
* is missing.
*/
MISSING_CURRENT_HOLDER(),
/**
* Represents that the child in parsable stack for given YANG construct is invalid.
* Represents that the child in parsable stack for given YANG construct is
* invalid.
*/
INVALID_CHILD(),
......@@ -46,6 +50,11 @@ public enum ListenerErrorType {
INVALID_CARDINALITY(),
/**
* Represents that the entry is duplicate.
*/
DUPLICATE_ENTRY(),
/**
* Represents that some of earlier parsed data is not handled correctly.
*/
UNHANDLED_PARSED_DATA();
......@@ -69,6 +78,8 @@ public enum ListenerErrorType {
return "Invalid child in";
case INVALID_CARDINALITY:
return "Invalid cardinality in";
case DUPLICATE_ENTRY:
return "Duplicate";
case UNHANDLED_PARSED_DATA:
return "Unhandled parsed data at";
default:
......
/*
* Copyright 2014-2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.yangutils.parser.impl.listeners;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import org.junit.Test;
import org.onosproject.yangutils.datamodel.YangDataTypes;
import org.onosproject.yangutils.datamodel.YangEnum;
import org.onosproject.yangutils.datamodel.YangEnumeration;
import org.onosproject.yangutils.datamodel.YangLeaf;
import org.onosproject.yangutils.datamodel.YangModule;
import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.YangNodeType;
import org.onosproject.yangutils.parser.exceptions.ParserException;
import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
import java.io.IOException;
import java.util.ListIterator;
import java.util.Set;
/**
* Test cases for enum listener.
*/
public class EnumListenerTest {
private final YangUtilsParserManager manager = new YangUtilsParserManager();
/**
* Checks enum statement without value.
*/
@Test
public void processEnumTypeStatement() throws IOException, ParserException {
YangNode node = manager.getDataModel("src/test/resources/EnumTypeStatement.yang");
// Check whether the data model tree returned is of type module.
assertThat((node instanceof YangModule), is(true));
// Check whether the node type is set properly to module.
assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
// Check whether the module name is set correctly.
YangModule yangNode = (YangModule) node;
assertThat(yangNode.getName(), is("Test"));
ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
YangLeaf leafInfo = leafIterator.next();
assertThat(leafInfo.getLeafName(), is("speed"));
assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration"));
assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumerationName(),
is("speed"));
Set<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet();
for (YangEnum tmp : enumSet) {
if (tmp.getNamedValue().equals("10m")) {
assertThat(tmp.getValue(), is(0));
} else if (tmp.getNamedValue().equals("100m")) {
assertThat(tmp.getValue(), is(1));
} else if (tmp.getNamedValue().equals("auto")) {
assertThat(tmp.getValue(), is(2));
}
}
}
}
/*
* Copyright 2014-2016 Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.yangutils.parser.impl.listeners;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import org.junit.Test;
import org.onosproject.yangutils.datamodel.YangDataTypes;
import org.onosproject.yangutils.datamodel.YangEnum;
import org.onosproject.yangutils.datamodel.YangEnumeration;
import org.onosproject.yangutils.datamodel.YangLeaf;
import org.onosproject.yangutils.datamodel.YangModule;
import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.YangNodeType;
import org.onosproject.yangutils.parser.exceptions.ParserException;
import org.onosproject.yangutils.parser.impl.YangUtilsParserManager;
import java.io.IOException;
import java.util.ListIterator;
import java.util.Set;
/**
* Test cases for value listener.
*/
public class ValueListenerTest {
private final YangUtilsParserManager manager = new YangUtilsParserManager();
/**
* Checks explicitly configured value.
*/
@Test
public void processValueStatement() throws IOException, ParserException {
YangNode node = manager.getDataModel("src/test/resources/ValueStatement.yang");
// Check whether the data model tree returned is of type module.
assertThat((node instanceof YangModule), is(true));
// Check whether the node type is set properly to module.
assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
// Check whether the module name is set correctly.
YangModule yangNode = (YangModule) node;
assertThat(yangNode.getName(), is("Test"));
ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
YangLeaf leafInfo = leafIterator.next();
assertThat(leafInfo.getLeafName(), is("speed"));
assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration"));
assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumerationName(),
is("speed"));
Set<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet();
for (YangEnum tmp : enumSet) {
if (tmp.getNamedValue().equals("10m")) {
assertThat(tmp.getValue(), is(10));
} else if (tmp.getNamedValue().equals("100m")) {
assertThat(tmp.getValue(), is(100));
} else if (tmp.getNamedValue().equals("auto")) {
assertThat(tmp.getValue(), is(1000));
}
}
}
/**
* Checks explicit value and auto generated value.
*/
@Test
public void processValueAndAutoStatement() throws IOException, ParserException {
YangNode node = manager.getDataModel("src/test/resources/ValueAndAutoStatement.yang");
// Check whether the data model tree returned is of type module.
assertThat((node instanceof YangModule), is(true));
// Check whether the node type is set properly to module.
assertThat(node.getNodeType(), is(YangNodeType.MODULE_NODE));
// Check whether the module name is set correctly.
YangModule yangNode = (YangModule) node;
assertThat(yangNode.getName(), is("Test"));
ListIterator<YangLeaf> leafIterator = yangNode.getListOfLeaf().listIterator();
YangLeaf leafInfo = leafIterator.next();
assertThat(leafInfo.getLeafName(), is("speed"));
assertThat(leafInfo.getDataType().getDataTypeName(), is("enumeration"));
assertThat(leafInfo.getDataType().getDataType(), is(YangDataTypes.ENUMERATION));
assertThat(((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumerationName(),
is("speed"));
Set<YangEnum> enumSet = ((YangEnumeration) leafInfo.getDataType().getDataTypeExtendedInfo()).getEnumSet();
for (YangEnum tmp : enumSet) {
if (tmp.getNamedValue().equals("10m")) {
assertThat(tmp.getValue(), is(10));
} else if (tmp.getNamedValue().equals("100m")) {
assertThat(tmp.getValue(), is(11));
} else if (tmp.getNamedValue().equals("auto")) {
assertThat(tmp.getValue(), is(1000));
}
}
}
/**
* Checks explicit value should not be repeated.
*/
@Test(expected = ParserException.class)
public void processValueDuplication() throws IOException, ParserException {
YangNode node = manager.getDataModel("src/test/resources/ValueDuplication.yang");
}
/**
* Checks explicit or auto generated value should not be repeated.
*/
@Test(expected = ParserException.class)
public void processValueExplicitAndAutoDuplication() throws IOException, ParserException {
YangNode node = manager.getDataModel("src/test/resources/ValueExplicitAndAutoDuplication.yang");
}
}
module Test {
yang-version 1;
namespace http://huawei.com;
prefix Ant;
leaf speed {
type enumeration {
enum 10m;
enum 100m;
enum auto;
}
}
}
module Test {
yang-version 1;
namespace http://huawei.com;
prefix Ant;
leaf speed {
type enumeration {
enum 10m {
value 10;
}
enum 100m;
enum auto {
value 1000;
}
}
}
}
module Test {
yang-version 1;
namespace http://huawei.com;
prefix Ant;
leaf speed {
type enumeration {
enum 10m {
value 10;
}
enum 100m {
value 100;
}
enum auto {
value 10;
}
}
}
}
module Test {
yang-version 1;
namespace http://huawei.com;
prefix Ant;
leaf speed {
type enumeration {
enum 10m {
value 10;
}
enum 100m;
enum auto {
value 11;
}
}
}
}
module Test {
yang-version 1;
namespace http://huawei.com;
prefix Ant;
leaf speed {
type enumeration {
enum 10m {
value 10;
}
enum 100m {
value 100;
}
enum auto {
value 1000;
}
}
}
}