package com.thaiopensource.relaxng.pattern; import org.relaxng.datatype.ValidationContext; import java.util.List; class BlankDataDerivType extends DataDerivType { private PatternMemo blankMemo; private PatternMemo nonBlankMemo; BlankDataDerivType() { } PatternMemo dataDeriv(ValidatorPatternBuilder builder, Pattern p, String str, ValidationContext vc, List<DataDerivFailure> fail) { if (DataDerivFunction.isBlank(str)) { if (blankMemo == null || (fail != null && blankMemo.isNotAllowed())) blankMemo = super.dataDeriv(builder, p, str, vc, fail); return blankMemo; } else { if (nonBlankMemo == null || (fail != null && nonBlankMemo.isNotAllowed())) nonBlankMemo = super.dataDeriv(builder, p, str, vc, fail); return nonBlankMemo; } } DataDerivType copy() { return new BlankDataDerivType(); } DataDerivType combine(DataDerivType ddt) { if (ddt instanceof BlankDataDerivType || ddt instanceof SingleDataDerivType) return this; return InconsistentDataDerivType.getInstance(); } }