KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > thaiopensource > relaxng > impl > OneOrMorePattern


1 package com.thaiopensource.relaxng.impl;
2
3 import org.xml.sax.SAXException JavaDoc;
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 JavaDoc {
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 JavaDoc apply(PatternFunction f) {
56     return f.caseOneOrMore(this);
57   }
58
59   Pattern getOperand() {
60     return p;
61   }
62 }
63
Popular Tags