in daffodil-runtime1/src/main/scala/org/apache/daffodil/runtime1/processors/RuntimeData.scala [332:414]
def executeFacetCheck(currentElement: DISimple): OKOrError = {
Assert.usage(!noFacetChecks)
Assert.invariant(!currentElement.isNilled)
val e = this
lazy val (patternMatchers, optEnumMatcher) = this.matchers
if (e.patternValues.nonEmpty) {
val check = checkPatterns(currentElement, patternMatchers)
if (!check) {
// The escaping is important here as error messages were impossible to figure out when control chars were involved.
val patternStrings = e.patternValues
.map { case (_, r: Regex) => XMLUtils.escape(r.pattern.pattern()) }
.mkString(",")
return Error("facet pattern(s): %s".format(patternStrings))
}
}
if (e.enumerationValues.isDefined) {
val check = checkEnumerations(currentElement, optEnumMatcher.get)
if (!check) {
return Error("facet enumeration(s): %s".format(e.enumerationValues.mkString(",")))
}
}
// Check length
e.length.foreach { length =>
if (!checkLength(currentElement, length, e, primType))
return Error("facet length (%s)".format(length))
}
// Check minLength
e.minLength.foreach { minLength =>
if (!checkMinLength(currentElement, minLength, e, primType))
return Error("facet minLength (%s)".format(minLength))
}
// Check maxLength
e.maxLength.foreach { maxLength =>
if (!checkMaxLength(currentElement, maxLength, e, primType))
return Error("facet maxLength (%s)".format(maxLength))
}
// Check minInclusive
e.minInclusive.foreach { minInclusive =>
if (!checkMinInc(currentElement, minInclusive, primType, e))
return Error("facet minInclusive (%s)".format(minInclusive))
}
// Check maxInclusive
e.maxInclusive.foreach { maxInclusive =>
if (!checkMaxInc(currentElement, maxInclusive, primType, e))
return Error("facet maxInclusive (%s)".format(maxInclusive))
}
// Check minExclusive
e.minExclusive.foreach { minExclusive =>
if (!checkMinExc(currentElement, minExclusive, primType, e))
return Error("facet minExclusive (%s)".format(minExclusive))
}
// Check maxExclusive
e.maxExclusive.foreach { maxExclusive =>
if (!checkMaxExc(currentElement, maxExclusive, primType, e))
return Error("facet maxExclusive (%s)".format(maxExclusive))
}
// Check totalDigits
e.totalDigits.foreach { totalDigits =>
val tdLong = totalDigits.longValue()
val isTotalDigitsGreaterThanEqToZero = tdLong.compareTo(0L) >= 0
if (isTotalDigitsGreaterThanEqToZero) {
if (!checkTotalDigits(currentElement, tdLong))
return Error("facet totalDigits (%s)".format(totalDigits))
}
}
// Check fractionDigits
e.fractionDigits.foreach { fractionDigits =>
val fdLong = fractionDigits.longValue()
val isFractionDigitsGreaterThanEqToZero = fdLong.compareTo(0L) >= 0
if (isFractionDigitsGreaterThanEqToZero) {
if (!checkFractionDigits(currentElement, fdLong))
return Error("facet fractionDigits (%s)".format(fractionDigits))
}
}
// Note: dont check occurs counts // if(!checkMinMaxOccurs(e, pstate.arrayIterationPos)) { return java.lang.Boolean.FALSE }
OK
}