001 package com.thaiopensource.relaxng.impl;
002
003 import com.thaiopensource.datatype.Datatype2;
004 import org.relaxng.datatype.Datatype;
005
006 class DataPattern extends StringPattern {
007 private final Datatype dt;
008
009 DataPattern(Datatype dt) {
010 super(combineHashCode(DATA_HASH_CODE, dt.hashCode()));
011 this.dt = dt;
012 }
013
014 boolean samePattern(Pattern other) {
015 if (other.getClass() != this.getClass())
016 return false;
017 return dt.equals(((DataPattern)other).dt);
018 }
019
020 void accept(PatternVisitor visitor) {
021 visitor.visitData(dt);
022 }
023
024 Object apply(PatternFunction f) {
025 return f.caseData(this);
026 }
027
028 Datatype getDatatype() {
029 return dt;
030 }
031
032 boolean allowsAnyString() {
033 return dt instanceof Datatype2 && ((Datatype2)dt).alwaysValid();
034 }
035
036 void checkRestrictions(int context, DuplicateAttributeDetector dad, Alphabet alpha)
037 throws RestrictionViolationException {
038 switch (context) {
039 case START_CONTEXT:
040 throw new RestrictionViolationException("start_contains_data");
041 }
042 }
043 }