*/
package org.opendaylight.yangtools.yang.validator;
-import java.text.DateFormat;
import java.text.ParseException;
-import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Set;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.ParseTree;
import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Yang_version_stmtContext;
+import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil;
import org.opendaylight.yangtools.yang.parser.util.YangValidationException;
import com.google.common.collect.Sets;
private BasicValidations() {
}
- static void checkNotPresentBoth(ParseTree parent, Class<? extends ParseTree> childType1,
- Class<? extends ParseTree> childType2) {
+ static void checkNotPresentBoth(final ParseTree parent, final Class<? extends ParseTree> childType1,
+ final Class<? extends ParseTree> childType2) {
if (BasicValidations.checkPresentChildOfTypeSafe(parent, childType1, true)
&& BasicValidations.checkPresentChildOfTypeSafe(parent, childType2, false)) {
ValidationUtil.ex(ValidationUtil.f("(In (sub)module:%s) Both %s and %s statement present in %s:%s",
}
}
- static void checkOnlyPermittedValues(ParseTree ctx, Set<String> permittedValues) {
+ static void checkOnlyPermittedValues(final ParseTree ctx, final Set<String> permittedValues) {
String mandatory = ValidationUtil.getName(ctx);
String rootParentName = ValidationUtil.getRootParentName(ctx);
}
}
- static void checkUniquenessInNamespace(ParseTree stmt, Set<String> uniques) {
+ static void checkUniquenessInNamespace(final ParseTree stmt, final Set<String> uniques) {
String name = ValidationUtil.getName(stmt);
String rootParentName = ValidationUtil.getRootParentName(stmt);
* Check if only one module or submodule is present in session(one yang
* file)
*/
- static void checkOnlyOneModulePresent(String moduleName, String globalId) {
+ static void checkOnlyOneModulePresent(final String moduleName, final String globalId) {
if (globalId != null) {
ValidationUtil.ex(ValidationUtil.f("Multiple (sub)modules per file"));
}
}
- static void checkPresentYangVersion(ParseTree ctx, String moduleName) {
+ static void checkPresentYangVersion(final ParseTree ctx, final String moduleName) {
if (!checkPresentChildOfTypeSafe(ctx, Yang_version_stmtContext.class, true)) {
ValidationUtil.ex(ValidationUtil.f(
"Yang version statement not present in module:%s, Validating as yang version:%s", moduleName,
}
}
- static void checkDateFormat(ParseTree stmt, DateFormat format) {
+ static void checkDateFormat(final ParseTree stmt) {
try {
- format.parse(ValidationUtil.getName(stmt));
+ SimpleDateFormatUtil.getRevisionFormat().parse(ValidationUtil.getName(stmt));
} catch (ParseException e) {
String exceptionMessage = ValidationUtil.f(
"(In (sub)module:%s) %s:%s, invalid date format expected date format is:%s",
ValidationUtil.getRootParentName(stmt), ValidationUtil.getSimpleStatementName(stmt.getClass()),
- ValidationUtil.getName(stmt), new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
+ ValidationUtil.getName(stmt), SimpleDateFormatUtil.getRevisionFormat().format(new Date()));
ValidationUtil.ex(exceptionMessage);
}
}
private static Pattern identifierPattern = Pattern.compile("[a-zA-Z_][a-zA-Z0-9_.-]*");
- static void checkIdentifier(ParseTree statement) {
+ static void checkIdentifier(final ParseTree statement) {
checkIdentifierInternal(statement, ValidationUtil.getName(statement));
}
- static void checkIdentifierInternal(ParseTree statement, String name) {
+ static void checkIdentifierInternal(final ParseTree statement, final String name) {
if (!identifierPattern.matcher(name).matches()) {
String message = ValidationUtil.f("%s statement identifier:%s is not in required format:%s",
private static Pattern prefixedIdentifierPattern = Pattern.compile("(.+):(.+)");
- static void checkPrefixedIdentifier(ParseTree statement) {
+ static void checkPrefixedIdentifier(final ParseTree statement) {
checkPrefixedIdentifierInternal(statement, ValidationUtil.getName(statement));
}
- private static void checkPrefixedIdentifierInternal(ParseTree statement, String id) {
+ private static void checkPrefixedIdentifierInternal(final ParseTree statement, final String id) {
Matcher matcher = prefixedIdentifierPattern.matcher(id);
if (matcher.matches()) {
}
}
- static void checkSchemaNodeIdentifier(ParseTree statement) {
+ static void checkSchemaNodeIdentifier(final ParseTree statement) {
String id = ValidationUtil.getName(statement);
try {
String getMessage();
}
- static void checkPresentChildOfTypeInternal(ParseTree parent, Set<Class<? extends ParseTree>> expectedChildType,
- MessageProvider message, boolean atMostOne) {
+ static void checkPresentChildOfTypeInternal(final ParseTree parent, final Set<Class<? extends ParseTree>> expectedChildType,
+ final MessageProvider message, final boolean atMostOne) {
if (!checkPresentChildOfTypeSafe(parent, expectedChildType, atMostOne)) {
String str = atMostOne ? "(Expected exactly one statement) " + message.getMessage() : message.getMessage();
ValidationUtil.ex(str);
}
static void checkPresentChildOfType(final ParseTree parent, final Class<? extends ParseTree> expectedChildType,
- boolean atMostOne) {
+ final boolean atMostOne) {
// Construct message in checkPresentChildOfTypeInternal only if
// validaiton fails, not in advance
*/
private static class MessageProviderForSetOfChildTypes implements MessageProvider {
- private Set<Class<? extends ParseTree>> expectedChildTypes;
- private ParseTree parent;
+ private final Set<Class<? extends ParseTree>> expectedChildTypes;
+ private final ParseTree parent;
- public MessageProviderForSetOfChildTypes(Set<Class<? extends ParseTree>> expectedChildTypes, ParseTree parent) {
+ public MessageProviderForSetOfChildTypes(final Set<Class<? extends ParseTree>> expectedChildTypes, final ParseTree parent) {
this.expectedChildTypes = expectedChildTypes;
this.parent = parent;
}
};
static void checkPresentChildOfTypes(final ParseTree parent,
- final Set<Class<? extends ParseTree>> expectedChildTypes, boolean atMostOne) {
+ final Set<Class<? extends ParseTree>> expectedChildTypes, final boolean atMostOne) {
// Construct message in checkPresentChildOfTypeInternal only if
// validaiton fails, not in advance
checkPresentChildOfTypeInternal(parent, expectedChildTypes, message, atMostOne);
}
- static boolean checkPresentChildOfTypeSafe(ParseTree parent, Set<Class<? extends ParseTree>> expectedChildType,
- boolean atMostOne) {
+ static boolean checkPresentChildOfTypeSafe(final ParseTree parent, final Set<Class<? extends ParseTree>> expectedChildType,
+ final boolean atMostOne) {
int foundChildrenOfType = ValidationUtil.countPresentChildrenOfType(parent, expectedChildType);
return atMostOne ? foundChildrenOfType == 1 ? true : false : foundChildrenOfType != 0 ? true : false;
}
- static boolean checkPresentChildOfTypeSafe(ParseTree parent, Class<? extends ParseTree> expectedChildType,
- boolean atMostOne) {
+ static boolean checkPresentChildOfTypeSafe(final ParseTree parent, final Class<? extends ParseTree> expectedChildType,
+ final boolean atMostOne) {
int foundChildrenOfType = ValidationUtil.countPresentChildrenOfType(parent, expectedChildType);
return atMostOne ? foundChildrenOfType == 1 ? true : false : foundChildrenOfType != 0 ? true : false;
}
- static List<String> getAndCheckUniqueKeys(ParseTree ctx) {
+ static List<String> getAndCheckUniqueKeys(final ParseTree ctx) {
String key = ValidationUtil.getName(ctx);
ParseTree parent = ctx.getParent();
String rootParentName = ValidationUtil.getRootParentName(ctx);
import java.net.URI;
import java.net.URISyntaxException;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
+import java.util.HashSet;
import java.util.Set;
import org.antlr.v4.runtime.tree.ParseTree;
-import org.opendaylight.yangtools.antlrv4.code.gen.*;
+import org.opendaylight.yangtools.antlrv4.code.gen.YangParser;
import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Anyxml_stmtContext;
import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Argument_stmtContext;
import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Augment_stmtContext;
import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Unique_stmtContext;
import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Uses_stmtContext;
import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Yin_element_argContext;
+import org.opendaylight.yangtools.antlrv4.code.gen.YangParserBaseListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
*/
final class YangModelBasicValidationListener extends YangParserBaseListener {
private static final Logger LOGGER = LoggerFactory.getLogger(YangModelBasicValidationListener.class);
- private final DateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
-
- private final Set<String> uniquePrefixes;
- private final Set<String> uniqueImports;
- private final Set<String> uniqueIncludes;
+ private final Set<String> uniquePrefixes = new HashSet<>();
+ private final Set<String> uniqueImports = new HashSet<>();
+ private final Set<String> uniqueIncludes = new HashSet<>();
private String globalModuleId;
- YangModelBasicValidationListener() {
- super();
- uniquePrefixes = Sets.newHashSet();
- uniqueImports = Sets.newHashSet();
- uniqueIncludes = Sets.newHashSet();
- }
-
/**
* Constraints:
* <ol>
* </ol>
*/
@Override
- public void enterModule_stmt(Module_stmtContext ctx) {
+ public void enterModule_stmt(final Module_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
* </ol>
*/
@Override
- public void enterSubmodule_stmt(Submodule_stmtContext ctx) {
+ public void enterSubmodule_stmt(final Submodule_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
* </ol>
*/
@Override
- public void enterSubmodule_header_stmts(Submodule_header_stmtsContext ctx) {
+ public void enterSubmodule_header_stmts(final Submodule_header_stmtsContext ctx) {
BasicValidations.checkPresentChildOfType(ctx, Belongs_to_stmtContext.class, true);
// check Yang version present, if not log
* </ol>
*/
@Override
- public void enterModule_header_stmts(Module_header_stmtsContext ctx) {
+ public void enterModule_header_stmts(final Module_header_stmtsContext ctx) {
String moduleName = ValidationUtil.getRootParentName(ctx);
BasicValidations.checkPresentChildOfType(ctx, Namespace_stmtContext.class, true);
* </ol>
*/
@Override
- public void enterRevision_stmt(Revision_stmtContext ctx) {
- BasicValidations.checkDateFormat(ctx, SIMPLE_DATE_FORMAT);
+ public void enterRevision_stmt(final Revision_stmtContext ctx) {
+ BasicValidations.checkDateFormat(ctx);
}
* </ol>
*/
@Override
- public void enterBelongs_to_stmt(Belongs_to_stmtContext ctx) {
+ public void enterBelongs_to_stmt(final Belongs_to_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
BasicValidations.checkPresentChildOfType(ctx, Prefix_stmtContext.class, true);
* </ol>
*/
@Override
- public void enterNamespace_stmt(Namespace_stmtContext ctx) {
+ public void enterNamespace_stmt(final Namespace_stmtContext ctx) {
String namespaceName = ValidationUtil.getName(ctx);
String rootParentName = ValidationUtil.getRootParentName(ctx);
* </ol>
*/
@Override
- public void enterImport_stmt(Import_stmtContext ctx) {
+ public void enterImport_stmt(final Import_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
* </ol>
*/
@Override
- public void enterRevision_date_stmt(Revision_date_stmtContext ctx) {
- BasicValidations.checkDateFormat(ctx, SIMPLE_DATE_FORMAT);
+ public void enterRevision_date_stmt(final Revision_date_stmtContext ctx) {
+ BasicValidations.checkDateFormat(ctx);
}
/**
* </ol>
*/
@Override
- public void enterInclude_stmt(Include_stmtContext ctx) {
+ public void enterInclude_stmt(final Include_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
* </ol>
*/
@Override
- public void enterYang_version_stmt(YangParser.Yang_version_stmtContext ctx) {
+ public void enterYang_version_stmt(final YangParser.Yang_version_stmtContext ctx) {
String version = ValidationUtil.getName(ctx);
String rootParentName = ValidationUtil.getRootParentName(ctx);
if (!version.equals(BasicValidations.SUPPORTED_YANG_VERSION)) {
* </ol>
*/
@Override
- public void enterPrefix_stmt(Prefix_stmtContext ctx) {
+ public void enterPrefix_stmt(final Prefix_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
* </ol>
*/
@Override
- public void enterTypedef_stmt(Typedef_stmtContext ctx) {
+ public void enterTypedef_stmt(final Typedef_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
* </ol>
*/
@Override
- public void enterType_stmt(Type_stmtContext ctx) {
+ public void enterType_stmt(final Type_stmtContext ctx) {
BasicValidations.checkPrefixedIdentifier(ctx);
}
* </ol>
*/
@Override
- public void enterContainer_stmt(Container_stmtContext ctx) {
+ public void enterContainer_stmt(final Container_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
}
* </ol>
*/
@Override
- public void enterLeaf_stmt(Leaf_stmtContext ctx) {
+ public void enterLeaf_stmt(final Leaf_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
BasicValidations.checkPresentChildOfType(ctx, Type_stmtContext.class, true);
* </ol>
*/
@Override
- public void enterLeaf_list_stmt(Leaf_list_stmtContext ctx) {
+ public void enterLeaf_list_stmt(final Leaf_list_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
* </ol>
*/
@Override
- public void enterOrdered_by_arg(Ordered_by_argContext ctx) {
+ public void enterOrdered_by_arg(final Ordered_by_argContext ctx) {
BasicValidations.checkOnlyPermittedValues(ctx, PERMITTED_ORDER_BY_ARGS);
}
* </ol>
*/
@Override
- public void enterList_stmt(List_stmtContext ctx) {
+ public void enterList_stmt(final List_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
// TODO check: "if config==true then key must be present" could be
// performed
* </ol>
*/
@Override
- public void enterKey_stmt(Key_stmtContext ctx) {
+ public void enterKey_stmt(final Key_stmtContext ctx) {
BasicValidations.getAndCheckUniqueKeys(ctx);
}
* </ol>
*/
@Override
- public void enterUnique_stmt(Unique_stmtContext ctx) {
+ public void enterUnique_stmt(final Unique_stmtContext ctx) {
BasicValidations.getAndCheckUniqueKeys(ctx);
}
* </ol>
*/
@Override
- public void enterChoice_stmt(Choice_stmtContext ctx) {
+ public void enterChoice_stmt(final Choice_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
BasicValidations.checkNotPresentBoth(ctx, Mandatory_stmtContext.class, Default_stmtContext.class);
* </ol>
*/
@Override
- public void enterCase_stmt(Case_stmtContext ctx) {
+ public void enterCase_stmt(final Case_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
}
* </ol>
*/
@Override
- public void enterMandatory_arg(Mandatory_argContext ctx) {
+ public void enterMandatory_arg(final Mandatory_argContext ctx) {
BasicValidations.checkOnlyPermittedValues(ctx, PERMITTED_BOOLEAN_ARGS);
}
* </ol>
*/
@Override
- public void enterAnyxml_stmt(Anyxml_stmtContext ctx) {
+ public void enterAnyxml_stmt(final Anyxml_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
}
* </ol>
*/
@Override
- public void enterGrouping_stmt(Grouping_stmtContext ctx) {
+ public void enterGrouping_stmt(final Grouping_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
}
* </ol>
*/
@Override
- public void enterUses_stmt(Uses_stmtContext ctx) {
+ public void enterUses_stmt(final Uses_stmtContext ctx) {
BasicValidations.checkPrefixedIdentifier(ctx);
}
* </ol>
*/
@Override
- public void enterRefine_stmt(Refine_stmtContext ctx) {
+ public void enterRefine_stmt(final Refine_stmtContext ctx) {
BasicValidations.checkSchemaNodeIdentifier(ctx);
}
* </ol>
*/
@Override
- public void enterRpc_stmt(Rpc_stmtContext ctx) {
+ public void enterRpc_stmt(final Rpc_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
}
* </ol>
*/
@Override
- public void enterNotification_stmt(Notification_stmtContext ctx) {
+ public void enterNotification_stmt(final Notification_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
}
* </ol>
*/
@Override
- public void enterAugment_stmt(Augment_stmtContext ctx) {
+ public void enterAugment_stmt(final Augment_stmtContext ctx) {
BasicValidations.checkSchemaNodeIdentifier(ctx);
}
* </ol>
*/
@Override
- public void enterIdentity_stmt(Identity_stmtContext ctx) {
+ public void enterIdentity_stmt(final Identity_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
}
* </ol>
*/
@Override
- public void enterBase_stmt(Base_stmtContext ctx) {
+ public void enterBase_stmt(final Base_stmtContext ctx) {
BasicValidations.checkPrefixedIdentifier(ctx);
}
* </ol>
*/
@Override
- public void enterYin_element_arg(Yin_element_argContext ctx) {
+ public void enterYin_element_arg(final Yin_element_argContext ctx) {
BasicValidations.checkOnlyPermittedValues(ctx, PERMITTED_BOOLEAN_ARGS);
}
* </ol>
*/
@Override
- public void enterExtension_stmt(Extension_stmtContext ctx) {
+ public void enterExtension_stmt(final Extension_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
}
* </ol>
*/
@Override
- public void enterArgument_stmt(Argument_stmtContext ctx) {
+ public void enterArgument_stmt(final Argument_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
}
* </ol>
*/
@Override
- public void enterFeature_stmt(Feature_stmtContext ctx) {
+ public void enterFeature_stmt(final Feature_stmtContext ctx) {
BasicValidations.checkIdentifier(ctx);
}
* </ol>
*/
@Override
- public void enterIf_feature_stmt(If_feature_stmtContext ctx) {
+ public void enterIf_feature_stmt(final If_feature_stmtContext ctx) {
BasicValidations.checkPrefixedIdentifier(ctx);
}
* </ol>
*/
@Override
- public void enterDeviation_stmt(Deviation_stmtContext ctx) {
+ public void enterDeviation_stmt(final Deviation_stmtContext ctx) {
BasicValidations.checkSchemaNodeIdentifier(ctx);
Set<Class<? extends ParseTree>> types = Sets.newHashSet();
* </ol>
*/
@Override
- public void enterConfig_arg(Config_argContext ctx) {
+ public void enterConfig_arg(final Config_argContext ctx) {
BasicValidations.checkOnlyPermittedValues(ctx, PERMITTED_BOOLEAN_ARGS);
}
* </ol>
*/
@Override
- public void enterStatus_arg(Status_argContext ctx) {
+ public void enterStatus_arg(final Status_argContext ctx) {
BasicValidations.checkOnlyPermittedValues(ctx, PERMITTED_STATUS_ARGS);
}