1 package com.thaiopensource.relaxng.impl; 2 3 import org.xml.sax.SAXException ; 4 5 class OneOrMorePattern extends Pattern { 6 private final Pattern p; 7 8 OneOrMorePattern(Pattern p) { 9 super(p.isNullable(), 10 p.getContentType(), 11 combineHashCode(ONE_OR_MORE_HASH_CODE, p.hashCode())); 12 this.p = p; 13 } 14 15 Pattern expand(SchemaPatternBuilder b) { 16 Pattern ep = p.expand(b); 17 if (ep != p) 18 return b.makeOneOrMore(ep); 19 else 20 return this; 21 } 22 23 void checkRecursion(int depth) throws SAXException { 24 p.checkRecursion(depth); 25 } 26 27 void checkRestrictions(int context, DuplicateAttributeDetector dad, Alphabet alpha) 28 throws RestrictionViolationException { 29 switch (context) { 30 case START_CONTEXT: 31 throw new RestrictionViolationException("start_contains_one_or_more"); 32 case DATA_EXCEPT_CONTEXT: 33 throw new RestrictionViolationException("data_except_contains_one_or_more"); 34 } 35 36 p.checkRestrictions(context == ELEMENT_CONTEXT 37 ? ELEMENT_REPEAT_CONTEXT 38 : context, 39 dad, 40 alpha); 41 if (context != LIST_CONTEXT 42 && !contentTypeGroupable(p.getContentType(), p.getContentType())) 43 throw new RestrictionViolationException("one_or_more_string"); 44 } 45 46 boolean samePattern(Pattern other) { 47 return (other instanceof OneOrMorePattern 48 && p == ((OneOrMorePattern)other).p); 49 } 50 51 void accept(PatternVisitor visitor) { 52 visitor.visitOneOrMore(p); 53 } 54 55 Object apply(PatternFunction f) { 56 return f.caseOneOrMore(this); 57 } 58 59 Pattern getOperand() { 60 return p; 61 } 62 } 63 | Popular Tags |