private List validateFields()

in plugins/transforms/validator/src/main/java/org/apache/hop/pipeline/transforms/validator/Validator.java [256:626]


  private List<HopValidatorException> validateFields(IRowMeta inputRowMeta, Object[] r)
      throws HopValueException {
    List<HopValidatorException> exceptions = new ArrayList<>();

    for (int i = 0; i < meta.getValidations().size(); i++) {
      Validation field = meta.getValidations().get(i);

      int valueIndex = data.fieldIndexes[i];
      IValueMeta validatorMeta = data.constantsMeta[i];

      IValueMeta valueMeta = inputRowMeta.getValueMeta(valueIndex);
      Object valueData = r[valueIndex];

      // Check for null
      //
      boolean isNull = valueMeta.isNull(valueData);
      if (!field.isNullAllowed() && isNull) {
        HopValidatorException exception =
            new HopValidatorException(
                this,
                field,
                HopValidatorException.ERROR_NULL_VALUE_NOT_ALLOWED,
                BaseMessages.getString(
                    PKG,
                    "Validator.Exception.NullNotAllowed",
                    field.getFieldName(),
                    inputRowMeta.getString(r)),
                field.getFieldName());
        exceptions.add(exception);
        if (!meta.isValidatingAll()) {
          return exceptions;
        }
      }

      if (field.isOnlyNullAllowed() && !isNull) {
        HopValidatorException exception =
            new HopValidatorException(
                this,
                field,
                HopValidatorException.ERROR_ONLY_NULL_VALUE_ALLOWED,
                BaseMessages.getString(
                    PKG,
                    "Validator.Exception.OnlyNullAllowed",
                    field.getFieldName(),
                    inputRowMeta.getString(r)),
                field.getFieldName());
        exceptions.add(exception);
        if (!meta.isValidatingAll()) {
          return exceptions;
        }
      }

      int dataType = ValueMetaFactory.getIdForValueMeta(field.getDataType());

      // Check the data type!
      // Same data type?
      //
      if (field.isDataTypeVerified()
          && dataType != IValueMeta.TYPE_NONE
          && dataType != valueMeta.getType()) {
        HopValidatorException exception =
            new HopValidatorException(
                this,
                field,
                HopValidatorException.ERROR_UNEXPECTED_DATA_TYPE,
                BaseMessages.getString(
                    PKG,
                    "Validator.Exception.UnexpectedDataType",
                    field.getFieldName(),
                    valueMeta.toStringMeta(),
                    validatorMeta.toStringMeta()),
                field.getFieldName());
        exceptions.add(exception);
        if (!meta.isValidatingAll()) {
          return exceptions;
        }
      }

      // Check various things if the value is not null.
      //
      if (isNull) {
        continue;
      }

      if (data.fieldsMinimumLengthAsInt[i] >= 0
          || data.fieldsMaximumLengthAsInt[i] >= 0
          || data.minimumValue[i] != null
          || data.maximumValue[i] != null
          || data.listValues[i].length > 0
          || field.isSourcingValues()
          || StringUtils.isNotEmpty(data.startString[i])
          || StringUtils.isNotEmpty(data.endString[i])
          || StringUtils.isNotEmpty(data.startStringNotAllowed[i])
          || StringUtils.isNotEmpty(data.endStringNotAllowed[i])
          || field.isOnlyNumericAllowed()
          || data.patternExpected[i] != null
          || data.patternDisallowed[i] != null) {

        String stringValue = valueMeta.getString(valueData);
        int stringLength = stringValue.length();

        // Minimum length
        //
        if (data.fieldsMinimumLengthAsInt[i] >= 0
            && stringLength < data.fieldsMinimumLengthAsInt[i]) {
          HopValidatorException exception =
              new HopValidatorException(
                  this,
                  field,
                  HopValidatorException.ERROR_SHORTER_THAN_MINIMUM_LENGTH,
                  BaseMessages.getString(
                      PKG,
                      "Validator.Exception.ShorterThanMininumLength",
                      field.getFieldName(),
                      valueMeta.getString(valueData),
                      Integer.toString(stringValue.length()),
                      field.getMinimumLength()),
                  field.getFieldName());
          exceptions.add(exception);
          if (!meta.isValidatingAll()) {
            return exceptions;
          }
        }

        // Maximum length
        //
        if (data.fieldsMaximumLengthAsInt[i] >= 0
            && stringLength > data.fieldsMaximumLengthAsInt[i]) {
          HopValidatorException exception =
              new HopValidatorException(
                  this,
                  field,
                  HopValidatorException.ERROR_LONGER_THAN_MAXIMUM_LENGTH,
                  BaseMessages.getString(
                      PKG,
                      "Validator.Exception.LongerThanMaximumLength",
                      field.getFieldName(),
                      valueMeta.getString(valueData),
                      Integer.toString(stringValue.length()),
                      field.getMaximumLength()),
                  field.getFieldName());
          exceptions.add(exception);
          if (!meta.isValidatingAll()) {
            return exceptions;
          }
        }

        // Minimal value
        //
        if (data.minimumValue[i] != null
            && valueMeta.compare(valueData, validatorMeta, data.minimumValue[i]) < 0) {
          HopValidatorException exception =
              new HopValidatorException(
                  this,
                  field,
                  HopValidatorException.ERROR_LOWER_THAN_ALLOWED_MINIMUM,
                  BaseMessages.getString(
                      PKG,
                      "Validator.Exception.LowerThanMinimumValue",
                      field.getFieldName(),
                      valueMeta.getString(valueData),
                      data.constantsMeta[i].getString(data.minimumValue[i])),
                  field.getFieldName());
          exceptions.add(exception);
          if (!meta.isValidatingAll()) {
            return exceptions;
          }
        }

        // Maximum value
        //
        if (data.maximumValue[i] != null
            && valueMeta.compare(valueData, validatorMeta, data.maximumValue[i]) > 0) {
          HopValidatorException exception =
              new HopValidatorException(
                  this,
                  field,
                  HopValidatorException.ERROR_HIGHER_THAN_ALLOWED_MAXIMUM,
                  BaseMessages.getString(
                      PKG,
                      "Validator.Exception.HigherThanMaximumValue",
                      field.getFieldName(),
                      valueMeta.getString(valueData),
                      data.constantsMeta[i].getString(data.maximumValue[i])),
                  field.getFieldName());
          exceptions.add(exception);
          if (!meta.isValidatingAll()) {
            return exceptions;
          }
        }

        // In list?
        //
        if (field.isSourcingValues() || data.listValues[i].length > 0) {
          boolean found = false;
          for (Object object : data.listValues[i]) {
            if (object != null
                && data.listValues[i] != null
                && valueMeta.compare(valueData, validatorMeta, object) == 0) {
              found = true;
            }
          }
          if (!found) {
            HopValidatorException exception =
                new HopValidatorException(
                    this,
                    field,
                    HopValidatorException.ERROR_VALUE_NOT_IN_LIST,
                    BaseMessages.getString(
                        PKG,
                        "Validator.Exception.NotInList",
                        field.getFieldName(),
                        valueMeta.getString(valueData)),
                    field.getFieldName());
            exceptions.add(exception);
            if (!meta.isValidatingAll()) {
              return exceptions;
            }
          }
        }

        // Numeric data or strings with only
        if (field.isOnlyNumericAllowed()) {
          HopValidatorException exception = assertNumeric(valueMeta, valueData, field);
          if (exception != null) {
            exceptions.add(exception);
            if (!meta.isValidatingAll()) {
              return exceptions;
            }
          }
        }

        // Does not start with string value
        //
        if (StringUtils.isNotEmpty(data.startString[i])
            && !stringValue.startsWith(data.startString[i])) {
          HopValidatorException exception =
              new HopValidatorException(
                  this,
                  field,
                  HopValidatorException.ERROR_DOES_NOT_START_WITH_STRING,
                  BaseMessages.getString(
                      PKG,
                      "Validator.Exception.DoesNotStartWithString",
                      field.getFieldName(),
                      valueMeta.getString(valueData),
                      field.getStartString()),
                  field.getFieldName());
          exceptions.add(exception);
          if (!meta.isValidatingAll()) {
            return exceptions;
          }
        }

        // Ends with string value
        //
        if (StringUtils.isNotEmpty(data.endString[i]) && !stringValue.endsWith(data.endString[i])) {
          HopValidatorException exception =
              new HopValidatorException(
                  this,
                  field,
                  HopValidatorException.ERROR_DOES_NOT_END_WITH_STRING,
                  BaseMessages.getString(
                      PKG,
                      "Validator.Exception.DoesNotEndWithString",
                      field.getFieldName(),
                      valueMeta.getString(valueData),
                      field.getEndString()),
                  field.getFieldName());
          exceptions.add(exception);
          if (!meta.isValidatingAll()) {
            return exceptions;
          }
        }

        // Starts with string value
        //
        if (StringUtils.isNotEmpty(data.startStringNotAllowed[i])
            && stringValue.startsWith(data.startStringNotAllowed[i])) {
          HopValidatorException exception =
              new HopValidatorException(
                  this,
                  field,
                  HopValidatorException.ERROR_STARTS_WITH_STRING,
                  BaseMessages.getString(
                      PKG,
                      "Validator.Exception.StartsWithString",
                      field.getFieldName(),
                      valueMeta.getString(valueData),
                      field.getStartStringNotAllowed()),
                  field.getFieldName());
          exceptions.add(exception);
          if (!meta.isValidatingAll()) {
            return exceptions;
          }
        }

        // Ends with string value
        //
        if (StringUtils.isNotEmpty(data.endStringNotAllowed[i])
            && stringValue.endsWith(data.endStringNotAllowed[i])) {
          HopValidatorException exception =
              new HopValidatorException(
                  this,
                  field,
                  HopValidatorException.ERROR_ENDS_WITH_STRING,
                  BaseMessages.getString(
                      PKG,
                      "Validator.Exception.EndsWithString",
                      field.getFieldName(),
                      valueMeta.getString(valueData),
                      field.getEndStringNotAllowed()),
                  field.getFieldName());
          exceptions.add(exception);
          if (!meta.isValidatingAll()) {
            return exceptions;
          }
        }

        // Matching regular expression allowed?
        //
        if (data.patternExpected[i] != null) {
          Matcher matcher = data.patternExpected[i].matcher(stringValue);
          if (!matcher.matches()) {
            HopValidatorException exception =
                new HopValidatorException(
                    this,
                    field,
                    HopValidatorException.ERROR_MATCHING_REGULAR_EXPRESSION_EXPECTED,
                    BaseMessages.getString(
                        PKG,
                        "Validator.Exception.MatchingRegExpExpected",
                        field.getFieldName(),
                        valueMeta.getString(valueData),
                        data.regularExpression[i]),
                    field.getFieldName());
            exceptions.add(exception);
            if (!meta.isValidatingAll()) {
              return exceptions;
            }
          }
        }

        // Matching regular expression NOT allowed?
        //
        if (data.patternDisallowed[i] != null) {
          Matcher matcher = data.patternDisallowed[i].matcher(stringValue);
          if (matcher.matches()) {
            HopValidatorException exception =
                new HopValidatorException(
                    this,
                    field,
                    HopValidatorException.ERROR_MATCHING_REGULAR_EXPRESSION_NOT_ALLOWED,
                    BaseMessages.getString(
                        PKG,
                        "Validator.Exception.MatchingRegExpNotAllowed",
                        field.getFieldName(),
                        valueMeta.getString(valueData),
                        data.regularExpressionNotAllowed[i]),
                    field.getFieldName());
            exceptions.add(exception);
            if (!meta.isValidatingAll()) {
              return exceptions;
            }
          }
        }
      }
    }

    return exceptions;
  }