Refine search
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 protected Collection<ValidationResult> customValidate(ValidationContext validationContext) { final String columns = validationContext.getProperty(COLUMNS).getValue(); final String filter = validationContext.getProperty(FILTER_EXPRESSION).getValue(); final List<ValidationResult> problems = new ArrayList<>(); if (!StringUtils.isBlank(columns) && !StringUtils.isBlank(filter)) { problems.add(new ValidationResult.Builder() .subject(FILTER_EXPRESSION.getDisplayName()) .input(filter).valid(false) .explanation("a filter expression can not be used in conjunction with the Columns property") .build()); } return problems; }
@Override protected Collection<ValidationResult> customValidate(final ValidationContext validationContext) { final List<ValidationResult> results = new ArrayList<>(); final String clientAuth = validationContext.getProperty(CLIENT_AUTH).getValue(); final SSLContextService sslContextService = validationContext.getProperty(SSL_CONTEXT_SERVICE).asControllerService(SSLContextService.class); if (sslContextService != null && StringUtils.isBlank(clientAuth)) { results.add(new ValidationResult.Builder() .explanation("Client Auth must be provided when using TLS/SSL") .valid(false).subject("Client Auth").build()); } return results; }
validationResults.add(new ValidationResult.Builder().subject(ENCRYPTION_ALGORITHM.getName()) .explanation(encryptionMethod.name() + " (" + encryptionMethod.getAlgorithm() + ") is not supported by this JVM due to lacking JCE Unlimited " + "Strength Jurisdiction Policy files. See Admin Guide.").build()); if (StringUtils.isEmpty(keyHex)) { validationResults.add(new ValidationResult.Builder().subject(RAW_KEY_HEX.getName()) .explanation(RAW_KEY_HEX.getDisplayName() + " is required when using algorithm " + encryptionMethod.getAlgorithm() + ". See Admin Guide.").build()); } else { byte[] keyBytes = new byte[0]; keyBytes = Hex.decodeHex(keyHex.toCharArray()); } catch (DecoderException e) { validationResults.add(new ValidationResult.Builder().subject(RAW_KEY_HEX.getName()) .explanation("Key must be valid hexadecimal string. See Admin Guide.").build()); validationResults.add(new ValidationResult.Builder().subject(RAW_KEY_HEX.getName()) .explanation("Key length greater than " + allowedKeyLength + " bits is not supported by this JVM" + " due to lacking JCE Unlimited Strength Jurisdiction Policy files. See Admin Guide.").build()); validationResults.add(new ValidationResult.Builder().subject(RAW_KEY_HEX.getName()) .explanation("Key must be valid length [" + StringUtils.join(validKeyLengths, ", ") + "]. See Admin Guide.").build()); validationResults.add(new ValidationResult.Builder().subject(KEY_DERIVATION_FUNCTION.getName()) .explanation(KEY_DERIVATION_FUNCTION.getDisplayName() + " is required to be " + StringUtils.join(kdfsForKeyedCipher, ", ") + " when using algorithm " + encryptionMethod.getAlgorithm()).build());
@Override protected Collection<ValidationResult> customValidate(final ValidationContext validationContext) { final List<ValidationResult> results = new ArrayList<>(); if (validationContext.getProperty(MAX_BATCH_SIZE).asInteger() > 1 && validationContext.getProperty(PARSE_MESSAGES).asBoolean()) { results.add(new ValidationResult.Builder().subject("Parse Messages").input("true").valid(false) .explanation("Cannot set Parse Messages to 'true' if Batch Size is greater than 1").build()); } final String protocol = validationContext.getProperty(PROTOCOL).getValue(); final SSLContextService sslContextService = validationContext.getProperty(SSL_CONTEXT_SERVICE).asControllerService(SSLContextService.class); if (UDP_VALUE.getValue().equals(protocol) && sslContextService != null) { results.add(new ValidationResult.Builder() .explanation("SSL can not be used with UDP") .valid(false).subject("SSL Context").build()); } // Validate CLIENT_AUTH final String clientAuth = validationContext.getProperty(CLIENT_AUTH).getValue(); if (sslContextService != null && StringUtils.isBlank(clientAuth)) { results.add(new ValidationResult.Builder() .explanation("Client Auth must be provided when using TLS/SSL") .valid(false).subject("Client Auth").build()); } return results; }
scriptingComponentHelper.setScriptEngineName(context.getProperty(scriptingComponentHelper.SCRIPT_ENGINE).getValue()); scriptingComponentHelper.setScriptPath(context.getProperty(ScriptingComponentUtils.SCRIPT_FILE).evaluateAttributeExpressions().getValue()); scriptingComponentHelper.setScriptBody(context.getProperty(ScriptingComponentUtils.SCRIPT_BODY).getValue()); String modulePath = context.getProperty(ScriptingComponentUtils.MODULES).evaluateAttributeExpressions().getValue(); if (!StringUtils.isEmpty(modulePath)) { scriptingComponentHelper.setModules(modulePath.split(",")); } else { results.add(new ValidationResult.Builder() .subject("Validation") .valid(false) .explanation("An error occurred calling validate in the configured script Processor.") .input(context.getProperty(ScriptingComponentUtils.SCRIPT_FILE).getValue()) .build()); return results;
if (SOLR_TYPE_CLOUD.equals(context.getProperty(SOLR_TYPE).getValue())) { final String collection = context.getProperty(COLLECTION).getValue(); if (collection == null || collection.trim().isEmpty()) { problems.add(new ValidationResult.Builder() .subject(COLLECTION.getName()) .input(collection).valid(false) .explanation("A collection must specified for Solr Type of Cloud") .build()); problems.add(new ValidationResult.Builder() .subject(SSL_CONTEXT_SERVICE.getDisplayName()) .valid(false) .explanation("an SSLContextService must be provided when using https") .build()); } else if (solrLocation.startsWith("http:") && sslContextService != null) { problems.add(new ValidationResult.Builder() .subject(SSL_CONTEXT_SERVICE.getDisplayName()) .valid(false) .explanation("an SSLContextService can not be provided when using http") .build()); problems.add(new ValidationResult.Builder() .subject(BASIC_PASSWORD.getDisplayName()) .valid(false) .explanation("a password must be provided for the given username") .build()); problems.add(new ValidationResult.Builder() .subject(BASIC_USERNAME.getDisplayName())
@Override protected Collection<ValidationResult> customValidate(ValidationContext validationContext) { Set<ValidationResult> results = new HashSet<>(); // Ensure that if username or password is set, then the other is too String userName = validationContext.getProperty(USERNAME).evaluateAttributeExpressions().getValue(); String password = validationContext.getProperty(PASSWORD).evaluateAttributeExpressions().getValue(); if (StringUtils.isEmpty(userName) != StringUtils.isEmpty(password)) { results.add(new ValidationResult.Builder().subject("Username / Password configuration").valid(false).explanation( "If username or password is specified, then the other must be specified as well").build()); } // Ensure that both Connection provider service and the processor specific configurations are not provided boolean connectionProviderIsSet = validationContext.getProperty(CONNECTION_PROVIDER_SERVICE).isSet(); boolean contactPointsIsSet = validationContext.getProperty(CONTACT_POINTS).isSet(); if (connectionProviderIsSet && contactPointsIsSet) { results.add(new ValidationResult.Builder().subject("Cassandra configuration").valid(false).explanation("both " + CONNECTION_PROVIDER_SERVICE.getDisplayName() + " and processor level Cassandra configuration cannot be provided at the same time.").build()); } if (!connectionProviderIsSet && !contactPointsIsSet) { results.add(new ValidationResult.Builder().subject("Cassandra configuration").valid(false).explanation("either " + CONNECTION_PROVIDER_SERVICE.getDisplayName() + " or processor level Cassandra configuration has to be provided.").build()); } return results; }
Collection<ValidationResult> results = new ArrayList<>(); if (doCustomValidate.getAndSet(false)) { String distStrat = validationContext.getProperty(DISTRIBUTION_STRATEGY).getValue(); if (distStrat.equals(STRATEGY_LOAD_DISTRIBUTION_SERVICE)) { if (null == propDesc || null == propDesc.getValue() || propDesc.getValue().isEmpty()) { results.add(new ValidationResult.Builder().subject(HOSTNAMES.getName()) .explanation("Must specify Hostnames when using 'Load Distribution Strategy'").valid(false).build()); if (null == propDesc || null == propDesc.getValue() || propDesc.getValue().isEmpty()) { results.add(new ValidationResult.Builder() .subject(LOAD_DISTRIBUTION_SERVICE_TEMPLATE.getName()) .explanation("Must specify 'Load Distribution Service ID' when using 'Load Distribution Strategy'") .valid(false).build()); int numHosts = 0; for (String hostName : hostNames) { if (StringUtils.isNotBlank(hostName)) { hostNames[numHosts++] = hostName; results.add(new ValidationResult.Builder() .subject("Number of Relationships and Hostnames") .explanation("Number of Relationships must be equal to, or greater than, the number of host names") .valid(false).build()); } else {
@Override public ValidationResult validate(String subject, String input, ValidationContext context) { String configPath = context.getProperty(CTX_CONFIG_PATH).getValue(); String libDirPath = context.getProperty(CTX_LIB_PATH).getValue(); + "in the provided classpath."); } else if (StringUtils.isEmpty(configPath)) { invalidationMessageBuilder.append("'Application Context config path' must not be empty."); } else { if (StringUtils.isEmpty(libDirPath)) { invalidationMessageBuilder.append("'Application Context class path' must not be empty."); } else { ? new ValidationResult.Builder().subject(subject).input(input) .explanation("Spring configuration '" + configPath + "' is resolvable " + "against provided classpath '" + libDirPath + "'.").valid(true).build() : new ValidationResult.Builder().subject(subject).input(input) .explanation("Spring configuration '" + configPath + "' is NOT resolvable " + "against provided classpath '" + libDirPath + "'. Validation message: " + invalidationMessage).valid(false).build();
@Override public ValidationResult validate(final String subject, final String input, final ValidationContext context) { if ((StringUtils.isBlank(input))) { return new ValidationResult.Builder().subject(subject).input(input).valid(true).explanation("No Language Input Present").build(); } if (context.isExpressionLanguagePresent(input)) { return new ValidationResult.Builder().subject(subject).input(input).valid(true).explanation("Expression Language Present").build(); } if (Languages.getLanguageMap().keySet().contains(input.toLowerCase())) { return new ValidationResult.Builder().subject(subject).input(input).valid(true).build(); } return new ValidationResult.Builder().subject(subject).input(input).valid(false).explanation(input + " is not a language that is supported by Yandex").build(); }
@Override public ValidationResult validate(String subject, String input, ValidationContext context) { ValidationResult result = new ValidationResult.Builder().subject(subject).valid(true).input(input).explanation("Good FQDNs").build(); if (null == input) { result = new ValidationResult.Builder().subject(subject).input(input).valid(false) .explanation("Need to specify delimited list of FQDNs").build(); return result; } String[] hostNames = input.split("(?:,+|;+|\\s+)"); for (String hostName : hostNames) { if (StringUtils.isNotBlank(hostName) && !hostName.contains(".")) { result = new ValidationResult.Builder().subject(subject).input(input).valid(false) .explanation("Need a FQDN rather than a simple host name.").build(); return result; } } return result; } }).build();
final List<ValidationResult> results = new ArrayList<>(3); results.addAll(super.customValidate(validationContext)); final boolean querySet = validationContext.getProperty(PROP_QUERY_PARAMS).isSet(); String input = validationContext.getProperty(PROP_QUERY_PARAMS).getValue(); .evaluateAttributeExpressions() .getValue(); final String url = String.format("http://www.foo.com?%s", encodedInput); new URL(url); results.add(new ValidationResult.Builder().subject(PROP_QUERY_PARAMS.getName()) .input(input) .explanation("Valid URL params") .valid(true).build()); } catch (final Exception e) { results.add(new ValidationResult.Builder().subject(PROP_QUERY_PARAMS.getName()) .input(input).explanation( "Not a valid set of URL params").valid(false).build()); String method = trimToEmpty(validationContext.getProperty(PROP_METHOD).getValue()) .toUpperCase(); HttpMethodName methodName = HttpMethodName.fromValue(method); } catch (IllegalArgumentException e) { results.add(new ValidationResult.Builder().subject(PROP_METHOD.getName()).input(method) .explanation("Unsupported METHOD") .valid(false).build());
@Override protected Collection<ValidationResult> customValidate(ValidationContext validationContext) { Set<ValidationResult> results = new HashSet<>(); // Ensure that if username or password is set, then the other is too String userName = validationContext.getProperty(USERNAME).evaluateAttributeExpressions().getValue(); String password = validationContext.getProperty(PASSWORD).evaluateAttributeExpressions().getValue(); if (StringUtils.isEmpty(userName) != StringUtils.isEmpty(password)) { results.add(new ValidationResult.Builder().valid(false).explanation( "If username or password is specified, then the other must be specified as well").build()); } return results; }
@Override protected Collection<ValidationResult> customValidate(final ValidationContext context) { final List<ValidationResult> errors = new ArrayList<>(super.customValidate(context)); final String regexValue = context.getProperty(REGEX).evaluateAttributeExpressions().getValue(); final int numCapturingGroups = Pattern.compile(regexValue).matcher("").groupCount(); final int groupToMatch = context.getProperty(MATCHING_GROUP_FOR_LOOKUP_KEY).evaluateAttributeExpressions().asInteger(); if (groupToMatch > numCapturingGroups) { errors.add( new ValidationResult.Builder() .subject("Insufficient Matching Groups") .valid(false) .explanation("The specified matching group does not exist for the regular expression provided") .build()); } return errors; }
@Override protected final Collection<ValidationResult> additionalCustomValidation(ValidationContext context) { final Collection<ValidationResult> problems = new ArrayList<>(); if (context.getProperty(RETURN_TYPE).evaluateAttributeExpressions().getValue().equals(MODE_REC.getValue()) && !context.getProperty(RECORD_WRITER).isSet()) { problems.add(new ValidationResult.Builder() .explanation("for writing records a record writer has to be configured") .valid(false) .subject("Record writer check") .build()); } return problems; }
@Override protected Collection<ValidationResult> customValidate(ValidationContext validationContext) { final List<ValidationResult> results = new ArrayList<>(1); final boolean isUnique = validationContext.getProperty(UNIQUE_FLOWFILES).asBoolean(); final boolean isText = validationContext.getProperty(DATA_FORMAT).getValue().equals(DATA_FORMAT_TEXT); final boolean isCustom = validationContext.getProperty(CUSTOM_TEXT).isSet(); if(isCustom && (isUnique || !isText)) { results.add(new ValidationResult.Builder().subject("Custom Text").valid(false).explanation("If Custom Text is set, then Data Format must be " + "text and Unique FlowFiles must be false.").build()); } return results; }
@Override protected Collection<ValidationResult> customValidate(ValidationContext validationContext) { Set<ValidationResult> results = new HashSet<>(); final String segmentGranularity = validationContext.getProperty(SEGMENT_GRANULARITY).getValue(); final String queryGranularity = validationContext.getProperty(QUERY_GRANULARITY).getValue(); // Verify that segment granularity is as least as large as query granularity if (TIME_ORDINALS.indexOf(segmentGranularity) < TIME_ORDINALS.indexOf(queryGranularity)) { results.add(new ValidationResult.Builder().valid(false).explanation( "Segment Granularity must be at least as large as Query Granularity").build()); } return results; }
@Override protected Collection<ValidationResult> customValidate(final ValidationContext context) { final Collection<ValidationResult> results = new ArrayList<>(); final String protocol = context.getProperty(PROTOCOL).getValue(); final SSLContextService sslContextService = context.getProperty(SSL_CONTEXT_SERVICE).asControllerService(SSLContextService.class); if (UDP_VALUE.getValue().equals(protocol) && sslContextService != null) { results.add(new ValidationResult.Builder() .explanation("SSL can not be used with UDP") .valid(false).subject("SSL Context").build()); } return results; }
@Override protected Collection<ValidationResult> customValidate(ValidationContext validationContext) { List<ValidationResult> results = new ArrayList<>(super.customValidate(validationContext)); final PropertyValue columnForPartitioning = validationContext.getProperty(COLUMN_FOR_VALUE_PARTITIONING); // If no EL is present, ensure it's a single column (i.e. no commas in the property value) if (columnForPartitioning.isSet() && !columnForPartitioning.isExpressionLanguagePresent() && columnForPartitioning.getValue().contains(",")) { results.add(new ValidationResult.Builder().valid(false).explanation( COLUMN_FOR_VALUE_PARTITIONING.getDisplayName() + " requires a single column name, but a comma was detected").build()); } return results; }