001: /**
002: * Redistribution and use of this software and associated documentation
003: * ("Software"), with or without modification, are permitted provided
004: * that the following conditions are met:
005: *
006: * 1. Redistributions of source code must retain copyright
007: * statements and notices. Redistributions must also contain a
008: * copy of this document.
009: *
010: * 2. Redistributions in binary form must reproduce the
011: * above copyright notice, this list of conditions and the
012: * following disclaimer in the documentation and/or other
013: * materials provided with the distribution.
014: *
015: * 3. The name "Exolab" must not be used to endorse or promote
016: * products derived from this Software without prior written
017: * permission of Intalio, Inc. For written permission,
018: * please contact info@exolab.org.
019: *
020: * 4. Products derived from this Software may not be called "Exolab"
021: * nor may "Exolab" appear in their names without prior written
022: * permission of Intalio, Inc. Exolab is a registered
023: * trademark of Intalio, Inc.
024: *
025: * 5. Due credit should be given to the Exolab Project
026: * (http://www.exolab.org/).
027: *
028: * THIS SOFTWARE IS PROVIDED BY INTALIO, INC. AND CONTRIBUTORS
029: * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
030: * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
031: * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
032: * INTALIO, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
033: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
034: * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
035: * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
036: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
037: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
038: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
039: * OF THE POSSIBILITY OF SUCH DAMAGE.
040: *
041: * Copyright 1999-2000 (C) Intalio, Inc. All Rights Reserved.
042: *
043: * $Id: BlockList.java 5951 2006-05-30 22:18:48Z bsnyder $
044: */package org.exolab.castor.xml.schema;
045:
046: import java.util.StringTokenizer;
047:
048: /**
049: * A class to represent the values of the XML Schema block property
050: *
051: * @author <a href="mailto:kvisco@intalio.com">Keith Visco</a>
052: * @version $Revision: 5951 $ $Date: 2006-04-25 15:08:23 -0600 (Tue, 25 Apr 2006) $
053: **/
054: public final class BlockList {
055:
056: /**
057: * The #all value
058: **/
059: public static final String ALL = "#all";
060:
061: /**
062: * The extension value
063: **/
064: public static final String EXTENSION = "extension";
065:
066: /**
067: * The restriction value
068: **/
069: public static final String RESTRICTION = "restriction";
070:
071: /**
072: * The substitution value
073: **/
074: public static final String SUBSTITUTION = "substitution";
075:
076: private boolean _all = false;
077:
078: /**
079: * Flag for blocking extensions
080: **/
081: private boolean _extension = false;
082:
083: /**
084: * Flag for blocking restrictions
085: **/
086: private boolean _restriction = false;
087:
088: /**
089: * Flag for blocking substitutions
090: **/
091: private boolean _substitution = false;
092:
093: /**
094: * Creates a new default BlockList. Nothing is flagged
095: * as being blocked.
096: **/
097: public BlockList() {
098: super ();
099: } //-- BlockList
100:
101: /**
102: * Creates a new BlockList using the given list of values.
103: *
104: * @param listOfValues the list of block values
105: * @exception IllegalArgumentException if the list of values contains
106: * something other than "extension", "restriction", or "substition".
107: **/
108: public BlockList(String listOfValues) {
109:
110: super ();
111:
112: if (listOfValues != null) {
113: parseValues(listOfValues);
114: }
115:
116: } //-- listOfValues.
117:
118: /**
119: * Returns true if the BlockList contains "#all".
120: *
121: * @return true if the BlockList contains "#all".
122: **/
123: public boolean hasAll() {
124: return _all;
125: } //-- hasAll
126:
127: /**
128: * Returns true if extension is contained within this BlockList.
129: *
130: * @return true if extension is contained within this BlockList.
131: **/
132: public boolean hasExtension() {
133: return _extension;
134: } //-- hasExtension
135:
136: /**
137: * Returns true if restriction is contained within this BlockList.
138: *
139: * @return true if restriction is contained within this BlockList
140: **/
141: public boolean hasRestriction() {
142: return _restriction;
143: } //-- hasRestriction
144:
145: /**
146: * Returns true if substitution is contained within this BlockList.
147: *
148: * @return true if substitution is contained within this BlockList.
149: **/
150: public boolean hasSubstitution() {
151: return _substitution;
152: } //-- hasSubstitution
153:
154: /**
155: * Returns the String representation of this BlockList
156: **/
157: public String toString() {
158: if (_all) {
159: return ALL;
160: }
161: StringBuffer value = new StringBuffer();
162: if (_extension) {
163: value.append(EXTENSION);
164: }
165: if (_restriction) {
166: if (value.length() > 0) {
167: value.append(' ');
168: }
169: value.append(RESTRICTION);
170: }
171: if (_substitution) {
172: if (value.length() > 0) {
173: value.append(' ');
174: }
175: value.append(RESTRICTION);
176: }
177: return value.toString();
178: } //-- toString
179:
180: //-------------------/
181: //- Private Methods -/
182: //-------------------/
183:
184: /**
185: * Parses the given values and sets the appropriate flags for this
186: * BlockList.
187: *
188: * @param values the list of Block values.
189: **/
190: private void parseValues(String values) {
191:
192: if (ALL.equals(values)) {
193: _all = true;
194: return;
195: }
196:
197: StringTokenizer tokenizer = new StringTokenizer(values);
198:
199: while (tokenizer.hasMoreTokens()) {
200: String value = tokenizer.nextToken();
201:
202: if (EXTENSION.equals(value)) {
203: _extension = true;
204: } else if (RESTRICTION.equals(value)) {
205: _restriction = true;
206: } else if (SUBSTITUTION.equals(value)) {
207: _substitution = true;
208: } else {
209: String err = "invalid block list: " + values;
210: throw new IllegalArgumentException(err);
211: }
212: }
213:
214: } //-- parseValues
215:
216: } //-- class: BlockList
|