def getValidSinkTypes: Seq[SinkType] = SinkType.validSinkTypes()

in measure/src/main/scala/org/apache/griffin/measure/configuration/dqdefinition/DQConfig.scala [72:112]


  def getValidSinkTypes: Seq[SinkType] = SinkType.validSinkTypes(sinks)

  def validate(): Unit = {
    assert(StringUtils.isNotBlank(name), "dq config name should not be blank")
    assert(StringUtils.isNotBlank(procType), "process.type should not be blank")
    assert(dataSources != null, "data.sources should not be null")
    getDataSources.foreach(_.validate())

    if (measures != null && measures.nonEmpty) {
      measures.foreach(_.validate())

      val repeatedMeasures = measures
        .map(_.getName)
        .groupBy(x => x)
        .mapValues(_.size)
        .filter(_._2 > 1)
        .keys

      assert(
        repeatedMeasures.isEmpty,
        "Measure names must be unique. " +
          s"Duplicate Measures names ['${repeatedMeasures.mkString("', '")}'] were found.")

      val invalidMeasureSources = measures
        .map(_.getDataSource)
        .map(dataSource => (dataSource, getDataSources.exists(_.getName.matches(dataSource))))
        .filterNot(_._2)
        .map(_._1)

      assert(
        invalidMeasureSources.isEmpty,
        "Measure source(s) undefined." +
          s" Unknown source(s) ['${invalidMeasureSources.mkString("', '")}'] were found.")
    } else if (evaluateRule != null) {
      evaluateRule.validate()
    } else {
      assert(
        assertion = false,
        "Either 'measure' or 'evaluate.rule' must be defined in the Application Config.")
    }
  }