YANG sub module linking + unsupported yang construct + defect fix
Change-Id: I224c8c14ee2111f6844278cb540c48651544f59b
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/TreeWalkListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/TreeWalkListener.java
index 5c03e54..370b56c 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/TreeWalkListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/TreeWalkListener.java
@@ -75,6 +75,11 @@
import org.onosproject.yangutils.parser.impl.listeners.UsesListener;
import org.onosproject.yangutils.parser.impl.listeners.ValueListener;
import org.onosproject.yangutils.parser.impl.listeners.VersionListener;
+import org.onosproject.yangutils.utils.YangConstructType;
+
+import static org.onosproject.yangutils.utils.UtilConstants.UNSUPPORTED_YANG_CONSTRUCT;
+import static org.onosproject.yangutils.utils.UtilConstants.CURRENTLY_UNSUPPORTED;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.handleUnsupportedYangConstruct;
/**
* Represents ANTLR generates parse-tree. ANTLR generates a parse-tree listener interface that responds to events
@@ -148,62 +153,62 @@
@Override
public void enterModuleBody(GeneratedYangParser.ModuleBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitModuleBody(GeneratedYangParser.ModuleBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterModuleHeaderStatement(GeneratedYangParser.ModuleHeaderStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitModuleHeaderStatement(GeneratedYangParser.ModuleHeaderStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterLinkageStatements(GeneratedYangParser.LinkageStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitLinkageStatements(GeneratedYangParser.LinkageStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterMetaStatements(GeneratedYangParser.MetaStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitMetaStatements(GeneratedYangParser.MetaStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterRevisionStatements(GeneratedYangParser.RevisionStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitRevisionStatements(GeneratedYangParser.RevisionStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterBodyStatements(GeneratedYangParser.BodyStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitBodyStatements(GeneratedYangParser.BodyStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -213,7 +218,7 @@
@Override
public void exitYangVersionStatement(GeneratedYangParser.YangVersionStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -223,7 +228,7 @@
@Override
public void exitNamespaceStatement(GeneratedYangParser.NamespaceStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -233,7 +238,7 @@
@Override
public void exitPrefixStatement(GeneratedYangParser.PrefixStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -248,12 +253,12 @@
@Override
public void enterImportStatementBody(GeneratedYangParser.ImportStatementBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitImportStatementBody(GeneratedYangParser.ImportStatementBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -263,7 +268,7 @@
@Override
public void exitRevisionDateStatement(GeneratedYangParser.RevisionDateStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -283,7 +288,7 @@
@Override
public void exitOrganizationStatement(GeneratedYangParser.OrganizationStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -293,7 +298,7 @@
@Override
public void exitContactStatement(GeneratedYangParser.ContactStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -303,7 +308,7 @@
@Override
public void exitDescriptionStatement(GeneratedYangParser.DescriptionStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -313,7 +318,7 @@
@Override
public void exitReferenceStatement(GeneratedYangParser.ReferenceStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -328,12 +333,12 @@
@Override
public void enterRevisionStatementBody(GeneratedYangParser.RevisionStatementBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitRevisionStatementBody(GeneratedYangParser.RevisionStatementBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -348,22 +353,22 @@
@Override
public void enterSubmoduleBody(GeneratedYangParser.SubmoduleBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitSubmoduleBody(GeneratedYangParser.SubmoduleBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterSubmoduleHeaderStatement(GeneratedYangParser.SubmoduleHeaderStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitSubmoduleHeaderStatement(GeneratedYangParser.SubmoduleHeaderStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -378,132 +383,132 @@
@Override
public void enterBelongstoStatementBody(GeneratedYangParser.BelongstoStatementBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitBelongstoStatementBody(GeneratedYangParser.BelongstoStatementBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterExtensionStatement(GeneratedYangParser.ExtensionStatementContext ctx) {
- // TODO: implement the method.
+ handleUnsupportedYangConstruct(YangConstructType.EXTENSION_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT);
}
@Override
public void exitExtensionStatement(GeneratedYangParser.ExtensionStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing
}
@Override
public void enterExtensionBody(GeneratedYangParser.ExtensionBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitExtensionBody(GeneratedYangParser.ExtensionBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterArgumentStatement(GeneratedYangParser.ArgumentStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitArgumentStatement(GeneratedYangParser.ArgumentStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterArgumentBody(GeneratedYangParser.ArgumentBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitArgumentBody(GeneratedYangParser.ArgumentBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterYinElementStatement(GeneratedYangParser.YinElementStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitYinElementStatement(GeneratedYangParser.YinElementStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterIdentityStatement(GeneratedYangParser.IdentityStatementContext ctx) {
- // TODO: implement the method.
+ handleUnsupportedYangConstruct(YangConstructType.IDENTITY_DATA, ctx, CURRENTLY_UNSUPPORTED);
}
@Override
public void exitIdentityStatement(GeneratedYangParser.IdentityStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterIdentityBody(GeneratedYangParser.IdentityBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitIdentityBody(GeneratedYangParser.IdentityBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterBaseStatement(GeneratedYangParser.BaseStatementContext ctx) {
- // TODO: implement the method.
+ handleUnsupportedYangConstruct(YangConstructType.BASE_DATA, ctx, CURRENTLY_UNSUPPORTED);
}
@Override
public void exitBaseStatement(GeneratedYangParser.BaseStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterFeatureStatement(GeneratedYangParser.FeatureStatementContext ctx) {
- // TODO: implement the method.
+ handleUnsupportedYangConstruct(YangConstructType.FEATURE_DATA, ctx, CURRENTLY_UNSUPPORTED);
}
@Override
public void exitFeatureStatement(GeneratedYangParser.FeatureStatementContext ctx) {
- // TODO: implement the method.
+ //TODO: to be implemented
}
@Override
public void enterFeatureBody(GeneratedYangParser.FeatureBodyContext ctx) {
- // TODO: implement the method.
+ //TODO : to be implemented
}
@Override
public void exitFeatureBody(GeneratedYangParser.FeatureBodyContext ctx) {
- // TODO: implement the method.
+ //TODO : to be implemented
}
@Override
public void enterDataDefStatement(GeneratedYangParser.DataDefStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitDataDefStatement(GeneratedYangParser.DataDefStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterIfFeatureStatement(GeneratedYangParser.IfFeatureStatementContext ctx) {
- // TODO: implement the method.
+ // TODO: to be implemented
}
@Override
public void exitIfFeatureStatement(GeneratedYangParser.IfFeatureStatementContext ctx) {
- // TODO: implement the method.
+ // TODO: to be implemented
}
@Override
@@ -513,7 +518,7 @@
@Override
public void exitUnitsStatement(GeneratedYangParser.UnitsStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -538,22 +543,32 @@
@Override
public void enterTypeBodyStatements(GeneratedYangParser.TypeBodyStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitTypeBodyStatements(GeneratedYangParser.TypeBodyStatementsContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterDecimal64Specification(GeneratedYangParser.Decimal64SpecificationContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void exitDecimal64Specification(GeneratedYangParser.Decimal64SpecificationContext ctx) {
// TODO: implement the method.
}
@Override
public void enterNumericalRestrictions(GeneratedYangParser.NumericalRestrictionsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitNumericalRestrictions(GeneratedYangParser.NumericalRestrictionsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -563,27 +578,27 @@
@Override
public void exitRangeStatement(GeneratedYangParser.RangeStatementContext ctx) {
- // TODO: implement the method.
+ RangeRestrictionListener.processRangeRestrictionExit(this, ctx);
}
@Override
public void enterCommonStatements(GeneratedYangParser.CommonStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitCommonStatements(GeneratedYangParser.CommonStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterStringRestrictions(GeneratedYangParser.StringRestrictionsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitStringRestrictions(GeneratedYangParser.StringRestrictionsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -593,7 +608,7 @@
@Override
public void exitLengthStatement(GeneratedYangParser.LengthStatementContext ctx) {
- // TODO: implement the method.
+ LengthRestrictionListener.processLengthRestrictionExit(this, ctx);
}
@Override
@@ -603,7 +618,7 @@
@Override
public void exitPatternStatement(GeneratedYangParser.PatternStatementContext ctx) {
- // TODO: implement the method.
+ PatternRestrictionListener.processPatternRestrictionExit(this, ctx);
}
@Override
@@ -613,7 +628,7 @@
@Override
public void exitDefaultStatement(GeneratedYangParser.DefaultStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -638,62 +653,62 @@
@Override
public void enterEnumStatementBody(GeneratedYangParser.EnumStatementBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitEnumStatementBody(GeneratedYangParser.EnumStatementBodyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitLeafrefSpecification(GeneratedYangParser.LeafrefSpecificationContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterPathStatement(GeneratedYangParser.PathStatementContext ctx) {
- // TODO: implement the method.
+ handleUnsupportedYangConstruct(YangConstructType.PATH_DATA, ctx, CURRENTLY_UNSUPPORTED);
}
@Override
public void exitPathStatement(GeneratedYangParser.PathStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext ctx) {
- // TODO: implement the method.
+ handleUnsupportedYangConstruct(YangConstructType.REQUIRE_INSTANCE_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT);
}
@Override
public void exitRequireInstanceStatement(GeneratedYangParser.RequireInstanceStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterInstanceIdentifierSpecification(GeneratedYangParser.InstanceIdentifierSpecificationContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitInstanceIdentifierSpecification(GeneratedYangParser.InstanceIdentifierSpecificationContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterIdentityrefSpecification(GeneratedYangParser.IdentityrefSpecificationContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitIdentityrefSpecification(GeneratedYangParser.IdentityrefSpecificationContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -728,12 +743,12 @@
@Override
public void enterBitBodyStatement(GeneratedYangParser.BitBodyStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitBitBodyStatement(GeneratedYangParser.BitBodyStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -743,7 +758,7 @@
@Override
public void exitPositionStatement(GeneratedYangParser.PositionStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -753,7 +768,7 @@
@Override
public void exitStatusStatement(GeneratedYangParser.StatusStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -763,7 +778,7 @@
@Override
public void exitConfigStatement(GeneratedYangParser.ConfigStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -773,7 +788,7 @@
@Override
public void exitMandatoryStatement(GeneratedYangParser.MandatoryStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -783,47 +798,47 @@
@Override
public void exitPresenceStatement(GeneratedYangParser.PresenceStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterOrderedByStatement(GeneratedYangParser.OrderedByStatementContext ctx) {
- // TODO: implement the method.
+ handleUnsupportedYangConstruct(YangConstructType.ORDERED_BY_DATA, ctx, CURRENTLY_UNSUPPORTED);
}
@Override
public void exitOrderedByStatement(GeneratedYangParser.OrderedByStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterMustStatement(GeneratedYangParser.MustStatementContext ctx) {
- // TODO: implement the method.
+ // TODO: to be implemented
}
@Override
public void exitMustStatement(GeneratedYangParser.MustStatementContext ctx) {
- // TODO: implement the method.
+ // TODO: to be implemented
}
@Override
public void enterErrorMessageStatement(GeneratedYangParser.ErrorMessageStatementContext ctx) {
- // TODO: implement the method.
+ handleUnsupportedYangConstruct(YangConstructType.ERROR_MESSAGE_DATA, ctx, CURRENTLY_UNSUPPORTED);
}
@Override
public void exitErrorMessageStatement(GeneratedYangParser.ErrorMessageStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterErrorAppTagStatement(GeneratedYangParser.ErrorAppTagStatementContext ctx) {
- // TODO: implement the method.
+ handleUnsupportedYangConstruct(YangConstructType.ERROR_APP_TAG_DATA, ctx, CURRENTLY_UNSUPPORTED);
}
@Override
public void exitErrorAppTagStatement(GeneratedYangParser.ErrorAppTagStatementContext ctx) {
- // TODO: implement the method.
+ //do nothing
}
@Override
@@ -833,7 +848,7 @@
@Override
public void exitMinElementsStatement(GeneratedYangParser.MinElementsStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -843,7 +858,7 @@
@Override
public void exitMaxElementsStatement(GeneratedYangParser.MaxElementsStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -853,7 +868,7 @@
@Override
public void exitValueStatement(GeneratedYangParser.ValueStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -913,17 +928,17 @@
@Override
public void exitKeyStatement(GeneratedYangParser.KeyStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterUniqueStatement(GeneratedYangParser.UniqueStatementContext ctx) {
- // TODO: implement the method.
+ handleUnsupportedYangConstruct(YangConstructType.UNIQUE_DATA, ctx, CURRENTLY_UNSUPPORTED);
}
@Override
public void exitUniqueStatement(GeneratedYangParser.UniqueStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
@@ -957,6 +972,16 @@
}
@Override
+ public void enterAnyxmlStatement(GeneratedYangParser.AnyxmlStatementContext ctx) {
+ handleUnsupportedYangConstruct(YangConstructType.ANYXML_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT);
+ }
+
+ @Override
+ public void exitAnyxmlStatement(GeneratedYangParser.AnyxmlStatementContext ctx) {
+ // do nothing.
+ }
+
+ @Override
public void enterUsesStatement(GeneratedYangParser.UsesStatementContext ctx) {
UsesListener.processUsesEntry(this, ctx);
}
@@ -968,82 +993,82 @@
@Override
public void enterRefineStatement(GeneratedYangParser.RefineStatementContext ctx) {
- // TODO: implement the method.
+ handleUnsupportedYangConstruct(YangConstructType.REFINE_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT);
}
@Override
public void exitRefineStatement(GeneratedYangParser.RefineStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterRefineContainerStatements(GeneratedYangParser.RefineContainerStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitRefineContainerStatements(GeneratedYangParser.RefineContainerStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterRefineLeafStatements(GeneratedYangParser.RefineLeafStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitRefineLeafStatements(GeneratedYangParser.RefineLeafStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterRefineLeafListStatements(GeneratedYangParser.RefineLeafListStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitRefineLeafListStatements(GeneratedYangParser.RefineLeafListStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterRefineListStatements(GeneratedYangParser.RefineListStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitRefineListStatements(GeneratedYangParser.RefineListStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterRefineChoiceStatements(GeneratedYangParser.RefineChoiceStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitRefineChoiceStatements(GeneratedYangParser.RefineChoiceStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterRefineCaseStatements(GeneratedYangParser.RefineCaseStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitRefineCaseStatements(GeneratedYangParser.RefineCaseStatementsContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
- public void enterUsesAugmentStatement(GeneratedYangParser.UsesAugmentStatementContext ctx) {
- // TODO: implement the method.
+ public void enterRefineAnyxmlStatements(GeneratedYangParser.RefineAnyxmlStatementsContext ctx) {
+ // do nothing.
}
@Override
- public void exitUsesAugmentStatement(GeneratedYangParser.UsesAugmentStatementContext ctx) {
- // TODO: implement the method.
+ public void exitRefineAnyxmlStatements(GeneratedYangParser.RefineAnyxmlStatementsContext ctx) {
+ // do nothing.
}
@Override
@@ -1058,12 +1083,12 @@
@Override
public void enterWhenStatement(GeneratedYangParser.WhenStatementContext ctx) {
- // TODO: implement the method.
+ // TODO: to be implemented
}
@Override
public void exitWhenStatement(GeneratedYangParser.WhenStatementContext ctx) {
- // TODO: implement the method.
+ // TODO: to be implemented
}
@Override
@@ -1108,271 +1133,291 @@
@Override
public void enterDeviationStatement(GeneratedYangParser.DeviationStatementContext ctx) {
- // TODO: implement the method.
+ handleUnsupportedYangConstruct(YangConstructType.DEVIATION_DATA, ctx, UNSUPPORTED_YANG_CONSTRUCT);
}
@Override
public void exitDeviationStatement(GeneratedYangParser.DeviationStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterDeviateNotSupportedStatement(GeneratedYangParser.DeviateNotSupportedStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitDeviateNotSupportedStatement(GeneratedYangParser.DeviateNotSupportedStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterDeviateAddStatement(GeneratedYangParser.DeviateAddStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitDeviateAddStatement(GeneratedYangParser.DeviateAddStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterDeviateDeleteStatement(GeneratedYangParser.DeviateDeleteStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitDeviateDeleteStatement(GeneratedYangParser.DeviateDeleteStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterDeviateReplaceStatement(GeneratedYangParser.DeviateReplaceStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitDeviateReplaceStatement(GeneratedYangParser.DeviateReplaceStatementContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterString(GeneratedYangParser.StringContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitString(GeneratedYangParser.StringContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterIdentifier(GeneratedYangParser.IdentifierContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitIdentifier(GeneratedYangParser.IdentifierContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterDateArgumentString(GeneratedYangParser.DateArgumentStringContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitDateArgumentString(GeneratedYangParser.DateArgumentStringContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterRange(GeneratedYangParser.RangeContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitRange(GeneratedYangParser.RangeContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterLength(GeneratedYangParser.LengthContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitLength(GeneratedYangParser.LengthContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterPath(GeneratedYangParser.PathContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitPath(GeneratedYangParser.PathContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterPosition(GeneratedYangParser.PositionContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitPosition(GeneratedYangParser.PositionContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterStatus(GeneratedYangParser.StatusContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitStatus(GeneratedYangParser.StatusContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterConfig(GeneratedYangParser.ConfigContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitConfig(GeneratedYangParser.ConfigContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterMandatory(GeneratedYangParser.MandatoryContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitMandatory(GeneratedYangParser.MandatoryContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterOrderedBy(GeneratedYangParser.OrderedByContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitOrderedBy(GeneratedYangParser.OrderedByContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterMinValue(GeneratedYangParser.MinValueContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitMinValue(GeneratedYangParser.MinValueContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterMaxValue(GeneratedYangParser.MaxValueContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitMaxValue(GeneratedYangParser.MaxValueContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterKey(GeneratedYangParser.KeyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitKey(GeneratedYangParser.KeyContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterUnique(GeneratedYangParser.UniqueContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitUnique(GeneratedYangParser.UniqueContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterRefine(GeneratedYangParser.RefineContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitRefine(GeneratedYangParser.RefineContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterAugment(GeneratedYangParser.AugmentContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitAugment(GeneratedYangParser.AugmentContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterDeviation(GeneratedYangParser.DeviationContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitDeviation(GeneratedYangParser.DeviationContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterYangConstruct(GeneratedYangParser.YangConstructContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitYangConstruct(GeneratedYangParser.YangConstructContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterVersion(GeneratedYangParser.VersionContext ctx) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitVersion(GeneratedYangParser.VersionContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterValue(GeneratedYangParser.ValueContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void exitValue(GeneratedYangParser.ValueContext ctx) {
+ // do nothing.
+ }
+
+ @Override
+ public void enterFraction(GeneratedYangParser.FractionContext ctx) {
+ // TODO: implement the method.
+ }
+
+ @Override
+ public void exitFraction(GeneratedYangParser.FractionContext ctx) {
// TODO: implement the method.
}
@Override
public void visitTerminal(TerminalNode terminalNode) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void visitErrorNode(ErrorNode errorNode) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void enterEveryRule(ParserRuleContext parserRuleContext) {
- // TODO: implement the method.
+ // do nothing.
}
@Override
public void exitEveryRule(ParserRuleContext parserRuleContext) {
- // TODO: implement the method.
+ // do nothing.
}
}
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListener.java
index 643499f..72bd97a 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ContainerListener.java
@@ -26,6 +26,7 @@
import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.YangNotification;
import org.onosproject.yangutils.datamodel.YangOutput;
+import org.onosproject.yangutils.datamodel.YangSubModule;
import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
import org.onosproject.yangutils.parser.Parsable;
import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
@@ -133,12 +134,11 @@
}
Parsable curData = listener.getParsedDataStack().peek();
- if (curData instanceof YangModule || curData instanceof YangContainer
- || curData instanceof YangList || curData instanceof YangCase
- || curData instanceof YangNotification
+ if (curData instanceof YangModule || curData instanceof YangSubModule
+ || curData instanceof YangContainer || curData instanceof YangList
+ || curData instanceof YangCase || curData instanceof YangNotification
|| curData instanceof YangInput || curData instanceof YangOutput
- || curData instanceof YangAugment
- || curData instanceof YangGrouping) {
+ || curData instanceof YangAugment || curData instanceof YangGrouping) {
YangNode curNode = (YangNode) curData;
try {
curNode.addChild(container);
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListener.java
index fc9b84a..a4511bc 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/DefaultListener.java
@@ -39,6 +39,8 @@
* defaultStatement : DEFAULT_KEYWORD string STMTEND;
*/
+import org.onosproject.yangutils.datamodel.YangChoice;
+import org.onosproject.yangutils.datamodel.YangLeaf;
import org.onosproject.yangutils.datamodel.YangTypeDef;
import org.onosproject.yangutils.parser.Parsable;
import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
@@ -83,6 +85,16 @@
typeDef.setDefaultValueInString(ctx.string().getText());
break;
}
+ case LEAF_DATA: {
+ YangLeaf leaf = (YangLeaf) tmpNode;
+ leaf.setDefaultValueInString(ctx.string().getText());
+ break;
+ }
+ case CHOICE_DATA: {
+ YangChoice choice = (YangChoice) tmpNode;
+ choice.setDefaultValueInString(ctx.string().getText());
+ break;
+ }
default:
throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER,
DEFAULT_DATA, ctx.string().getText(), ENTRY));
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumListener.java
index 08edab1..e0a51df 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/EnumListener.java
@@ -146,7 +146,14 @@
boolean isValuePresent = false;
for (YangEnum curEnum : yangEnumeration.getEnumSet()) {
- if (maxValue <= curEnum.getValue()) {
+ if (curEnum.getValue() == Integer.MAX_VALUE) {
+ ParserException parserException = new ParserException("YANG file error : "
+ + "An enum value MUST be specified for enum substatements following the one"
+ + "with the current highest value");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ } else if (maxValue <= curEnum.getValue()) {
maxValue = curEnum.getValue();
isValuePresent = true;
}
@@ -161,8 +168,8 @@
} 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());
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
throw parserException;
}
break;
@@ -173,8 +180,7 @@
}
} else {
throw new ParserException(
- constructListenerErrorMessage(MISSING_CURRENT_HOLDER, ENUM_DATA, ctx.string().getText(),
- EXIT));
+ constructListenerErrorMessage(MISSING_CURRENT_HOLDER, ENUM_DATA, ctx.string().getText(), EXIT));
}
}
}
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListener.java
index 03fc737..2f1d7fe 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/LengthRestrictionListener.java
@@ -29,8 +29,10 @@
import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED;
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;
import static org.onosproject.yangutils.utils.RestrictionResolver.processLengthRestriction;
@@ -86,7 +88,7 @@
Parsable tmpData = listener.getParsedDataStack().peek();
if (tmpData.getYangConstructType() == TYPE_DATA) {
YangType type = (YangType) tmpData;
- setLengthRestriction(type, ctx);
+ setLengthRestriction(listener, type, ctx);
} else {
throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, LENGTH_DATA,
ctx.length().getText(), ENTRY));
@@ -96,10 +98,11 @@
/**
* Sets the length restriction to type.
*
+ * @param listener listener's object
* @param type Yang type for which length restriction to be set
* @param ctx context object of the grammar rule
*/
- private static void setLengthRestriction(YangType type,
+ private static void setLengthRestriction(TreeWalkListener listener, YangType type,
GeneratedYangParser.LengthStatementContext ctx) {
if (type.getDataType() == DERIVED) {
@@ -132,5 +135,31 @@
}
stringRestriction.setLengthRestriction(lengthRestriction);
+ listener.getParsedDataStack().push(lengthRestriction);
+ }
+
+ /**
+ * Performs validation and updates the data model tree.
+ * It is called when parser exits from grammar rule (length).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processLengthRestrictionExit(TreeWalkListener listener,
+ GeneratedYangParser.LengthStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, LENGTH_DATA, ctx.length().getText(), EXIT);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (tmpData instanceof YangRangeRestriction) {
+ listener.getParsedDataStack().pop();
+ } else if (tmpData instanceof YangType
+ && ((YangType) tmpData).getDataType() == DERIVED) {
+ // TODO : need to handle in linker
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, LENGTH_DATA,
+ ctx.length().getText(), EXIT));
+ }
}
}
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ListListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ListListener.java
index 42326b7..1f4ab50 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ListListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ListListener.java
@@ -26,6 +26,7 @@
import org.onosproject.yangutils.datamodel.YangNode;
import org.onosproject.yangutils.datamodel.YangNotification;
import org.onosproject.yangutils.datamodel.YangOutput;
+import org.onosproject.yangutils.datamodel.YangSubModule;
import org.onosproject.yangutils.datamodel.exceptions.DataModelException;
import org.onosproject.yangutils.parser.Parsable;
import org.onosproject.yangutils.parser.antlrgencode.GeneratedYangParser;
@@ -141,7 +142,8 @@
if (curData instanceof YangModule || curData instanceof YangContainer
|| curData instanceof YangList || curData instanceof YangCase
|| curData instanceof YangNotification || curData instanceof YangInput
- || curData instanceof YangOutput || curData instanceof YangAugment || curData instanceof YangGrouping) {
+ || curData instanceof YangOutput || curData instanceof YangAugment
+ || curData instanceof YangGrouping || curData instanceof YangSubModule) {
curNode = (YangNode) curData;
try {
curNode.addChild(yangList);
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListener.java
index 3c1fd5a..ca36525 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/PatternRestrictionListener.java
@@ -27,9 +27,12 @@
import org.onosproject.yangutils.parser.impl.TreeWalkListener;
import org.onosproject.yangutils.utils.YangConstructType;
+import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED;
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;
import static org.onosproject.yangutils.utils.YangConstructType.PATTERN_DATA;
@@ -84,7 +87,7 @@
Parsable tmpData = listener.getParsedDataStack().peek();
if (tmpData.getYangConstructType() == TYPE_DATA) {
YangType type = (YangType) tmpData;
- setPatternRestriction(type, ctx);
+ setPatternRestriction(listener, type, ctx);
} else {
throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, PATTERN_DATA,
ctx.string().getText(), ENTRY));
@@ -94,10 +97,11 @@
/**
* Sets the pattern restriction to type.
*
+ * @param listener listener's object
* @param type Yang type for which pattern restriction to be set
* @param ctx context object of the grammar rule
*/
- private static void setPatternRestriction(YangType type,
+ private static void setPatternRestriction(TreeWalkListener listener, YangType type,
GeneratedYangParser.PatternStatementContext ctx) {
if (type.getDataType() != YangDataTypes.STRING && type.getDataType() != YangDataTypes.DERIVED) {
@@ -121,6 +125,7 @@
} else {
stringRestriction.addPattern(patternArgument);
}
+ listener.getParsedDataStack().push(stringRestriction);
} else {
YangPatternRestriction patternRestriction = (YangPatternRestriction) ((YangDerivedInfo<?>) type
.getDataTypeExtendedInfo()).getPatternRestriction();
@@ -134,4 +139,29 @@
}
}
}
+
+ /**
+ * Performs validation and updates the data model tree.
+ * It is called when parser exits from grammar rule (pattern).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processPatternRestrictionExit(TreeWalkListener listener,
+ GeneratedYangParser.PatternStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, PATTERN_DATA, ctx.string().getText(), EXIT);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (tmpData instanceof YangStringRestriction) {
+ listener.getParsedDataStack().pop();
+ } else if (tmpData instanceof YangType
+ && ((YangType) tmpData).getDataType() == DERIVED) {
+ // TODO : need to handle in linker
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, PATTERN_DATA,
+ ctx.string().getText(), EXIT));
+ }
+ }
}
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListener.java
index b6e0cf6..b0387ae 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/RangeRestrictionListener.java
@@ -26,8 +26,10 @@
import static org.onosproject.yangutils.datamodel.YangDataTypes.DERIVED;
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;
import static org.onosproject.yangutils.utils.RestrictionResolver.isOfRangeRestrictedType;
@@ -82,7 +84,7 @@
Parsable tmpData = listener.getParsedDataStack().peek();
if (tmpData.getYangConstructType() == TYPE_DATA) {
YangType type = (YangType) tmpData;
- setRangeRestriction(type, ctx);
+ setRangeRestriction(listener, type, ctx);
} else {
throw new ParserException(constructListenerErrorMessage(INVALID_HOLDER, RANGE_DATA,
ctx.range().getText(), ENTRY));
@@ -92,10 +94,11 @@
/**
* Sets the range restriction to type.
*
+ * @param listener listener's object
* @param type YANG type for which range restriction to be added
* @param ctx context object of the grammar rule
*/
- private static void setRangeRestriction(YangType type,
+ private static void setRangeRestriction(TreeWalkListener listener, YangType type,
GeneratedYangParser.RangeStatementContext ctx) {
if (type.getDataType() == DERIVED) {
@@ -122,5 +125,31 @@
if (rangeRestriction != null) {
type.setDataTypeExtendedInfo(rangeRestriction);
}
+ listener.getParsedDataStack().push(rangeRestriction);
+ }
+
+ /**
+ * Performs validation and updates the data model tree.
+ * It is called when parser exits from grammar rule (range).
+ *
+ * @param listener listener's object
+ * @param ctx context object of the grammar rule
+ */
+ public static void processRangeRestrictionExit(TreeWalkListener listener,
+ GeneratedYangParser.RangeStatementContext ctx) {
+
+ // Check for stack to be non empty.
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, RANGE_DATA, ctx.range().getText(), EXIT);
+
+ Parsable tmpData = listener.getParsedDataStack().peek();
+ if (tmpData instanceof YangRangeRestriction) {
+ listener.getParsedDataStack().pop();
+ } else if (tmpData instanceof YangType
+ && ((YangType) tmpData).getDataType() == DERIVED) {
+ // TODO : need to handle in linker
+ } else {
+ throw new ParserException(constructListenerErrorMessage(MISSING_CURRENT_HOLDER, RANGE_DATA,
+ ctx.range().getText(), EXIT));
+ }
}
}
\ No newline at end of file
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ValueListener.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ValueListener.java
index 92a0d42..cd54436 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ValueListener.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/listeners/ValueListener.java
@@ -38,6 +38,7 @@
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;
+import static org.onosproject.yangutils.parser.impl.parserutils.ListenerUtil.getValidIntegerValue;
import static org.onosproject.yangutils.utils.YangConstructType.VALUE_DATA;
/**
@@ -62,25 +63,28 @@
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);
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY);
+
+ // Validate value
+ int value = getValidIntegerValue(ctx.value().getText(), VALUE_DATA, ctx);
// Obtain the node of the stack.
Parsable tmpNode = listener.getParsedDataStack().peek();
switch (tmpNode.getYangConstructType()) {
case ENUM_DATA: {
YangEnum enumNode = (YangEnum) tmpNode;
- if (!isEnumValueValid(listener, ctx)) {
+ if (!isEnumValueValid(listener, ctx, value)) {
ParserException parserException = new ParserException("Duplicate Value Entry");
- parserException.setLine(ctx.INTEGER().getSymbol().getLine());
- parserException.setCharPosition(ctx.INTEGER().getSymbol().getCharPositionInLine());
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
throw parserException;
}
- enumNode.setValue(Integer.valueOf(ctx.INTEGER().getText()));
+ enumNode.setValue(value);
break;
}
default:
throw new ParserException(
- constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.INTEGER().getText(), ENTRY));
+ constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY));
}
}
@@ -89,20 +93,22 @@
*
* @param listener Listener's object
* @param ctx context object of the grammar rule
+ * @param value enum value
* @return validation result
*/
- private static boolean isEnumValueValid(TreeWalkListener listener, GeneratedYangParser.ValueStatementContext ctx) {
+ private static boolean isEnumValueValid(TreeWalkListener listener, GeneratedYangParser.ValueStatementContext ctx,
+ int value) {
Parsable enumNode = listener.getParsedDataStack().pop();
// Check for stack to be non empty.
- checkStackIsNotEmpty(listener, MISSING_HOLDER, VALUE_DATA, ctx.INTEGER().getText(), ENTRY);
+ checkStackIsNotEmpty(listener, MISSING_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY);
Parsable tmpNode = listener.getParsedDataStack().peek();
switch (tmpNode.getYangConstructType()) {
case ENUMERATION_DATA: {
YangEnumeration yangEnumeration = (YangEnumeration) tmpNode;
for (YangEnum curEnum : yangEnumeration.getEnumSet()) {
- if (Integer.valueOf(ctx.INTEGER().getText()) == curEnum.getValue()) {
+ if (value == curEnum.getValue()) {
listener.getParsedDataStack().push(enumNode);
return false;
}
@@ -113,7 +119,7 @@
default:
listener.getParsedDataStack().push(enumNode);
throw new ParserException(
- constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.INTEGER().getText(), ENTRY));
+ constructListenerErrorMessage(INVALID_HOLDER, VALUE_DATA, ctx.value().getText(), ENTRY));
}
}
}
diff --git a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java
index d5efe91..de11f05 100644
--- a/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java
+++ b/utils/yangutils/src/main/java/org/onosproject/yangutils/parser/impl/parserutils/ListenerUtil.java
@@ -29,6 +29,18 @@
import org.onosproject.yangutils.parser.exceptions.ParserException;
import org.onosproject.yangutils.utils.YangConstructType;
+import static org.onosproject.yangutils.utils.UtilConstants.ADD;
+import static org.onosproject.yangutils.utils.UtilConstants.SPACE;
+import static org.onosproject.yangutils.utils.UtilConstants.SLASH;
+import static org.onosproject.yangutils.utils.UtilConstants.COLON;
+import static org.onosproject.yangutils.utils.UtilConstants.CARET;
+import static org.onosproject.yangutils.utils.UtilConstants.QUOTES;
+import static org.onosproject.yangutils.utils.UtilConstants.HYPHEN;
+import static org.onosproject.yangutils.utils.UtilConstants.EMPTY_STRING;
+import static org.onosproject.yangutils.utils.UtilConstants.TRUE;
+import static org.onosproject.yangutils.utils.UtilConstants.FALSE;
+import static org.onosproject.yangutils.utils.UtilConstants.YANG_FILE_ERROR;
+
/**
* Represents an utility for listener.
*/
@@ -37,18 +49,10 @@
private static final Pattern IDENTIFIER_PATTERN = Pattern.compile("[a-zA-Z_][a-zA-Z0-9_.-]*");
private static final String DATE_PATTERN = "[0-9]{4}-([0-9]{2}|[0-9])-([0-9]{2}|[0-9])";
private static final String NON_NEGATIVE_INTEGER_PATTERN = "[0-9]+";
- private static final String PLUS = "+";
+ private static final Pattern INTEGER_PATTERN = Pattern.compile("[-][0-9]+|[0-9]+");
private static final String ONE = "1";
- private static final String TRUE_KEYWORD = "true";
- private static final String FALSE_KEYWORD = "false";
private static final int IDENTIFIER_LENGTH = 64;
private static final String DATE_FORMAT = "yyyy-MM-dd";
- private static final String EMPTY_STRING = "";
- private static final String HYPHEN = "-";
- private static final String SLASH = "/";
- private static final String SPACE = " ";
- private static final String COLON = ":";
- private static final String CARET = "^";
/**
* Creates a new listener util.
@@ -65,7 +69,7 @@
public static String removeQuotesAndHandleConcat(String yangStringData) {
yangStringData = yangStringData.replace("\"", EMPTY_STRING);
- String[] tmpData = yangStringData.split(Pattern.quote(PLUS));
+ String[] tmpData = yangStringData.split(Pattern.quote(ADD));
StringBuilder builder = new StringBuilder();
for (String yangString : tmpData) {
builder.append(yangString);
@@ -171,6 +175,41 @@
}
/**
+ * Validates integer value.
+ *
+ * @param integerValue integer to be validated
+ * @param yangConstruct yang construct for creating error message
+ * @param ctx context object of the grammar rule
+ * @return valid integer value
+ */
+ public static int getValidIntegerValue(String integerValue, YangConstructType yangConstruct,
+ ParserRuleContext ctx) {
+
+ String value = removeQuotesAndHandleConcat(integerValue);
+ if (!INTEGER_PATTERN.matcher(value).matches()) {
+ ParserException parserException = new ParserException("YANG file error : " +
+ YangConstructType.getYangConstructType(yangConstruct) + " value " + value + " is not " +
+ "valid.");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+
+ int valueInInteger;
+ try {
+ valueInInteger = Integer.parseInt(value);
+ } catch (NumberFormatException e) {
+ ParserException parserException = new ParserException("YANG file error : " +
+ YangConstructType.getYangConstructType(yangConstruct) + " value " + value + " is not " +
+ "valid.");
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
+ return valueInInteger;
+ }
+
+ /**
* Validates boolean value.
*
* @param booleanValue value to be validated
@@ -182,9 +221,9 @@
ParserRuleContext ctx) {
String value = removeQuotesAndHandleConcat(booleanValue);
- if (value.equals(TRUE_KEYWORD)) {
+ if (value.equals(TRUE)) {
return true;
- } else if (value.equals(FALSE_KEYWORD)) {
+ } else if (value.equals(FALSE)) {
return false;
} else {
ParserException parserException = new ParserException("YANG file error : " +
@@ -272,4 +311,21 @@
}
return targetNodes;
}
+
+ /**
+ * Throws parser exception for unsupported YANG constructs.
+ *
+ * @param yangConstructType yang construct for creating error message
+ * @param ctx yang construct's context to get the line number and character position
+ * @param errorInfo error information
+ */
+ public static void handleUnsupportedYangConstruct(YangConstructType yangConstructType,
+ ParserRuleContext ctx, String errorInfo) {
+ ParserException parserException = new ParserException(YANG_FILE_ERROR
+ + QUOTES + YangConstructType.getYangConstructType(yangConstructType) + QUOTES
+ + errorInfo);
+ parserException.setLine(ctx.getStart().getLine());
+ parserException.setCharPosition(ctx.getStart().getCharPositionInLine());
+ throw parserException;
+ }
}
\ No newline at end of file