001: package org.ofbiz.rules.parse;
002:
003: import java.util.*;
004:
005: /**
006: * <p><b>Title:</b> Collection Parser
007: * <p><b>Description:</b> None
008: * <p>Copyright (c) 1999 Steven J. Metsker.
009: * <p>Copyright (c) 2001 The Open For Business Project - www.ofbiz.org
010: *
011: * <p>Permission is hereby granted, free of charge, to any person obtaining a
012: * copy of this software and associated documentation files (the "Software"),
013: * to deal in the Software without restriction, including without limitation
014: * the rights to use, copy, modify, merge, publish, distribute, sublicense,
015: * and/or sell copies of the Software, and to permit persons to whom the
016: * Software is furnished to do so, subject to the following conditions:
017: *
018: * <p>The above copyright notice and this permission notice shall be included
019: * in all copies or substantial portions of the Software.
020: *
021: * <p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
022: * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
023: * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
024: * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
025: * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
026: * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
027: * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
028: *
029: * <br>
030: * <p>This class abstracts the behavior common to parsers
031: * that consist of a series of other parsers.
032: *
033: * @author Steven J. Metsker
034: * @version 1.0
035: */
036: public abstract class CollectionParser extends Parser {
037:
038: /**
039: * the parsers this parser is a collection of
040: */
041: protected List subparsers = new ArrayList();
042:
043: /**
044: * Supports subclass constructors with no arguments.
045: */
046: public CollectionParser() {
047: }
048:
049: /**
050: * Supports subclass constructors with a name argument
051: *
052: * @param string the name of this parser
053: */
054: public CollectionParser(String name) {
055: super (name);
056: }
057:
058: /**
059: * Adds a parser to the collection.
060: *
061: * @param Parser the parser to add
062: *
063: * @return this
064: */
065: public CollectionParser add(Parser e) {
066: subparsers.add(e);
067: return this ;
068: }
069:
070: /**
071: * Return this parser's subparsers.
072: *
073: * @return List this parser's subparsers
074: */
075: public List getSubparsers() {
076: return subparsers;
077: }
078:
079: /**
080: * Helps to textually describe this CollectionParser.
081: *
082: * @returns the string to place between parsers in
083: * the collection
084: */
085: protected abstract String toStringSeparator();
086:
087: /**
088: * Returns a textual description of this parser.
089: */
090: protected String unvisitedString(List visited) {
091: StringBuffer buf = new StringBuffer("<");
092: boolean needSeparator = false;
093: Enumeration e = Collections.enumeration(subparsers);
094:
095: while (e.hasMoreElements()) {
096: if (needSeparator) {
097: buf.append(toStringSeparator());
098: }
099: Parser next = (Parser) e.nextElement();
100:
101: buf.append(next.toString(visited));
102: needSeparator = true;
103: }
104: buf.append(">");
105: return buf.toString();
106: }
107: }
|