@Override protected Collection<ValidationResult> customValidate(final ValidationContext validationContext) { final boolean containsDynamic = validationContext.getProperties().keySet().stream() .anyMatch(property -> property.isDynamic()); if (containsDynamic) { return Collections.emptyList(); } return Collections.singleton(new ValidationResult.Builder() .subject("User-defined Properties") .valid(false) .explanation("At least one RecordPath must be specified") .build()); }
@Override protected Collection<ValidationResult> customValidate(final ValidationContext validationContext) { final boolean hasDynamic = validationContext.getProperties().keySet().stream() .anyMatch(prop -> prop.isDynamic()); if (hasDynamic) { return Collections.emptyList(); } return Collections.singleton(new ValidationResult.Builder() .subject("User-defined Properties") .valid(false) .explanation("At least one RecordPath must be added to this processor by adding a user-defined property") .build()); }
public static Collection<ValidationResult> validateCredentialProperties(ValidationContext validationContext) { final List<ValidationResult> results = new ArrayList<>(); String sasToken = validationContext.getProperty(PROP_SAS_TOKEN).getValue(); String acctName = validationContext.getProperty(ACCOUNT_KEY).getValue(); if ((StringUtils.isBlank(sasToken) && StringUtils.isBlank(acctName)) || (StringUtils.isNotBlank(sasToken) && StringUtils.isNotBlank(acctName))) { results.add(new ValidationResult.Builder().subject("AzureStorageUtils Credentials") .valid(false) .explanation("either Azure Account Key or Shared Access Signature required, but not both") .build()); } return results; }
@Override public ValidationResult validate(final String subject, final String input, final ValidationContext context) { try { JsonPath.compile(input); } catch (final Exception e) { return new ValidationResult.Builder() .subject(subject) .input(input) .valid(false) .explanation("Invalid JSON Path Expression: " + e.getMessage()) .build(); } return new ValidationResult.Builder() .subject(subject) .input(input) .valid(true) .build(); }
@Override public ValidationResult validate(final String subject, final String value, final ValidationContext context) { if (value.length() < minimum || value.length() > maximum) { return new ValidationResult.Builder() .subject(subject) .valid(false) .input(value) .explanation(String.format("String length invalid [min: %d, max: %d]", minimum, maximum)) .build(); } else { return new ValidationResult.Builder() .valid(true) .input(value) .subject(subject) .build(); } } }
@Override public ValidationResult validate(final String subject, final String input, final ValidationContext context) { final String syntaxError = context.newExpressionLanguageCompiler().validateExpression(input, allowExtraCharacters); if (syntaxError != null) { return new ValidationResult.Builder().subject(subject).input(input).valid(false).explanation(syntaxError).build(); } final ResultType resultType = allowExtraCharacters ? ResultType.STRING : context.newExpressionLanguageCompiler().getResultType(input); if (!resultType.equals(expectedResultType)) { return new ValidationResult.Builder() .subject(subject) .input(input) .valid(false) .explanation("Expected Attribute Query to return type " + expectedResultType + " but query returns type " + resultType) .build(); } return new ValidationResult.Builder().subject(subject).input(input).valid(true).build(); } };
@Override public ValidationResult validate(String subject, String input, ValidationContext context) { if (null == input || input.isEmpty()) { return new ValidationResult.Builder().subject(subject).input(input).valid(false) .explanation(subject + " cannot be empty").build(); } final Locale testLocale = Locale.forLanguageTag(input); final Locale[] availableLocales = Locale.getAvailableLocales(); // Check if the provided Locale is valid by checking against the first value of the array (i.e. "null" locale) if (availableLocales[0].equals(testLocale)) { // Locale matches the "null" locale so it is treated as invalid return new ValidationResult.Builder().subject(subject).input(input).valid(false) .explanation(input + " is not a valid locale format.").build(); } else { return new ValidationResult.Builder().subject(subject).input(input).valid(true).build(); } } }
@Override public ValidationResult validate(final String subject, final String input, final ValidationContext context) { if (input == null) { return new ValidationResult.Builder() .input(input) .subject(subject) .valid(false) .explanation("Input is null for this property") .build(); } String unescapeString = unescapeString(input); return new ValidationResult.Builder() .subject(subject) .input(unescapeString) .explanation("Only non-null single characters are supported") .valid((unescapeString.length() == 1 && unescapeString.charAt(0) != 0) || context.isExpressionLanguagePresent(input)) .build(); }
@Override public ValidationResult validate(final String subject, final String input, final ValidationContext context) { final ValidationResult.Builder resultBuilder = new ValidationResult.Builder() .subject(subject) .input(input); try { final Class<?> exceptionClass = Class.forName(input); if (RuntimeException.class.isAssignableFrom(exceptionClass)) { resultBuilder.valid(true); } else { resultBuilder.valid(false).explanation("Class " + input + " is a Checked Exception, not a RuntimeException"); } } catch (ClassNotFoundException e) { resultBuilder.valid(false).explanation("Class " + input + " cannot be found"); } return resultBuilder.build(); } }
@Override public ValidationResult validate(final String subject, final String input, final ValidationContext validationContext) { try { final Processor proc = new Processor(false); final XQueryCompiler comp = proc.newXQueryCompiler(); String error = null; try { comp.compile(input); } catch (final Exception e) { error = e.toString(); } return new ValidationResult.Builder().input(input).subject(subject).valid(error == null).explanation(error).build(); } catch (final Exception e) { return new ValidationResult.Builder().input(input).subject(subject).valid(false) .explanation("Unable to initialize XQuery engine due to " + e.toString()).build(); } } }
@Override public ValidationResult validate(final String subject, final String input, final ValidationContext context) { try { RecordPath.compile(subject); return new ValidationResult.Builder() .input(input) .subject(subject) .valid(true) .explanation("Valid RecordPath") .build(); } catch (final RecordPathException e) { return new ValidationResult.Builder() .input(input) .subject(subject) .valid(false) .explanation("Property Name is not a valid RecordPath value: " + e.getMessage()) .build(); } }
/** * Let's do validation by script compile at this point. * * @param context provides a mechanism for obtaining externally managed values, such as property values and supplies convenience methods for operating on those values * @return Collection of ValidationResult objects that will be added to any other validation findings - may be null */ protected Collection<ValidationResult> customValidate(final ValidationContext context) { this.scriptFile = asFile(context.getProperty(SCRIPT_FILE).evaluateAttributeExpressions().getValue()); //SCRIPT_FILE this.scriptBody = context.getProperty(SCRIPT_BODY).getValue(); //SCRIPT_BODY this.addClasspath = context.getProperty(ADD_CLASSPATH).evaluateAttributeExpressions().getValue(); //ADD_CLASSPATH this.groovyClasspath = context.newPropertyValue(GROOVY_CLASSPATH).evaluateAttributeExpressions().getValue(); //evaluated from ${groovy.classes.path} global property final Collection<ValidationResult> results = new HashSet<>(); try { getGroovyScript(); } catch (Throwable t) { results.add(new ValidationResult.Builder().subject("GroovyScript").input(this.scriptFile != null ? this.scriptFile.toString() : null).valid(false).explanation(t.toString()).build()); } return results; }
@Override public ValidationResult validate(String subject, String input, ValidationContext context) { ValidationResult result = new ValidationResult.Builder() .subject(subject).valid(true).input(input).build(); List<String> args = ArgumentUtils.splitArgs(input, context.getProperty(ARG_DELIMITER).getValue().charAt(0)); for (String arg : args) { ValidationResult valResult = ATTRIBUTE_EXPRESSION_LANGUAGE_VALIDATOR.validate(subject, arg, context); if (!valResult.isValid()) { result = valResult; break; } } return result; } }).build();
@Override public ValidationResult validate(String subject, String input, ValidationContext context) { ObjectMapper mapper = new ObjectMapper(); if (context.isExpressionLanguageSupported(subject) && context.isExpressionLanguagePresent(input)) { return new ValidationResult.Builder().subject(subject).input(input).explanation("Expression Language Present").valid(true).build(); } try { Class clz = input.startsWith("[") ? List.class : Map.class; mapper.readValue(input, clz); } catch (Exception e) { return new ValidationResult.Builder().subject(subject).input(input).valid(false) .explanation(subject + " is not a valid JSON representation due to " + e.getLocalizedMessage()) .build(); } return new ValidationResult.Builder().subject(subject).input(input).valid(true).build(); } }
@Override protected Collection<ValidationResult> customValidate(final ValidationContext validationContext) { final boolean cache = validationContext.getProperty(CACHE_SCHEMA).asBoolean(); if (cache) { for (final PropertyDescriptor descriptor : validationContext.getProperties().keySet()) { if (descriptor.isDynamic() && validationContext.isExpressionLanguagePresent(validationContext.getProperty(descriptor).getValue())) { return Collections.singleton(new ValidationResult.Builder() .subject("Cache Schema") .input("true") .valid(false) .explanation("Cannot have 'Cache Schema' property set to true if any SQL statement makes use of the Expression Language") .build()); } } } return Collections.emptyList(); }
@Override public ValidationResult validate(final String subject, final String value, final ValidationContext context) { if (context.isExpressionLanguageSupported(subject) && context.isExpressionLanguagePresent(value)) { return new ValidationResult.Builder().subject(subject).input(value).explanation("Expression Language Present").valid(true).build(); } String reason = null; try { final int intVal = Integer.parseInt(value); if (intVal < 0) { reason = "value is negative"; } } catch (final NumberFormatException e) { reason = "value is not a valid integer"; } return new ValidationResult.Builder().subject(subject).input(value).explanation(reason).valid(reason == null).build(); } };
@Override public ValidationResult validate(final String subject, final String value, final ValidationContext context) { if (context.isExpressionLanguageSupported(subject) && context.isExpressionLanguagePresent(value)) { return new ValidationResult.Builder().subject(subject).input(value).explanation("Expression Language Present").valid(true).build(); } String reason = null; try { final long longVal = Long.parseLong(value); if (longVal <= 0) { reason = "not a positive value"; } } catch (final NumberFormatException e) { reason = "not a valid 64-bit integer"; } return new ValidationResult.Builder().subject(subject).input(value).explanation(reason).valid(reason == null).build(); } };
@Override public ValidationResult validate(final String subject, final String value, final ValidationContext context) { if (context.isExpressionLanguageSupported(subject) && context.isExpressionLanguagePresent(value)) { return new ValidationResult.Builder().subject(subject).input(value).explanation("Expression Language Present").valid(true).build(); } String reason = null; try { final int intVal = Integer.parseInt(value); if (intVal <= 0) { reason = "not a positive value"; } } catch (final NumberFormatException e) { reason = "not a valid integer"; } return new ValidationResult.Builder().subject(subject).input(value).explanation(reason).valid(reason == null).build(); } };
@Override protected Collection<ValidationResult> customValidate(final ValidationContext validationContext) { final List<ValidationResult> results = new ArrayList<>(); if (validationContext.getProperty(TRANSLATE_CONTENT).asBoolean().equals(Boolean.FALSE)) { boolean foundDynamic = false; for (final PropertyDescriptor descriptor : validationContext.getProperties().keySet()) { if (descriptor.isDynamic()) { foundDynamic = true; break; } } if (!foundDynamic) { results.add(new ValidationResult.Builder().subject("Text to translate").input("<none>").valid(false) .explanation("Must either set 'Translate Content' to true or add at least one user-defined property").build()); } } return results; }
@Override public ValidationResult validate(final String subject, final String value, final ValidationContext context) { String reason = null; if (!value.equals(DEFAULT_LOCALE_VALUE)) { try { final Locale locale = LocaleUtils.toLocale(value); if (locale == null) { reason = "null locale returned"; } else if (!LocaleUtils.isAvailableLocale(locale)) { reason = "locale not available"; } } catch (final IllegalArgumentException e) { reason = "invalid format for locale"; } } return new ValidationResult.Builder().subject(subject).input(value).explanation(reason).valid(reason == null).build(); } };