package com.thaiopensource.relaxng.pattern;
import com.thaiopensource.datatype.Datatype2;
import com.thaiopensource.xml.util.Name;
import org.relaxng.datatype.Datatype;
import java.util.Collections;
import java.util.List;
class DataPattern extends StringPattern {
private final Datatype dt;
private final Name dtName;
private final List<String> params;
DataPattern(Datatype dt, Name dtName, List<String> params) {
super(combineHashCode(DATA_HASH_CODE, dt.hashCode()));
this.dt = dt;
this.dtName = dtName;
this.params = params;
}
boolean samePattern(Pattern other) {
if (other.getClass() != this.getClass())
return false;
return dt.equals(((DataPattern)other).dt);
}
<T> T apply(PatternFunction<T> f) {
return f.caseData(this);
}
Datatype getDatatype() {
return dt;
}
Name getDatatypeName() {
return dtName;
}
List<String> getParams() {
return Collections.unmodifiableList(params);
}
boolean allowsAnyString() {
return dt instanceof Datatype2 && ((Datatype2)dt).alwaysValid();
}
void checkRestrictions(int context, DuplicateAttributeDetector dad, Alphabet alpha)
throws RestrictionViolationException {
switch (context) {
case START_CONTEXT:
throw new RestrictionViolationException("start_contains_data");
}
}
}