001: package org.ofbiz.rules.parse.chars;
002:
003: import org.ofbiz.rules.parse.*;
004:
005: /**
006: * <p><b>Title:</b> Character Assembly
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>A CharacterAssembly is an Assembly whose elements are
031: * characters.
032: *
033: * @author Steven J. Metsker
034: * @version 1.0
035: * @see Assembly
036: */
037:
038: public class CharacterAssembly extends Assembly {
039:
040: /**
041: * the string to consume
042: */
043: protected String string;
044:
045: /**
046: * Constructs a CharacterAssembly from the given String.
047: *
048: * @param String the String to consume
049: *
050: * @return a CharacterAssembly that will consume the
051: * supplied String
052: */
053: public CharacterAssembly(String string) {
054: this .string = string;
055: }
056:
057: /**
058: * Returns a textual representation of the amount of this
059: * characterAssembly that has been consumed.
060: *
061: * @param delimiter the mark to show between consumed
062: * elements
063: *
064: * @return a textual description of the amount of this
065: * assembly that has been consumed
066: */
067: public String consumed(String delimiter) {
068: if (delimiter.equals("")) {
069: return string.substring(0, elementsConsumed());
070: }
071: StringBuffer buf = new StringBuffer();
072:
073: for (int i = 0; i < elementsConsumed(); i++) {
074: if (i > 0) {
075: buf.append(delimiter);
076: }
077: buf.append(string.charAt(i));
078: }
079: return buf.toString();
080: }
081:
082: /**
083: * Returns the default string to show between elements
084: * consumed or remaining.
085: *
086: * @return the default string to show between elements
087: * consumed or remaining
088: */
089: public String defaultDelimiter() {
090: return "";
091: }
092:
093: /**
094: * Returns the number of elements in this assembly.
095: *
096: * @return the number of elements in this assembly
097: */
098: public int length() {
099: return string.length();
100: }
101:
102: /**
103: * Returns the next character.
104: *
105: * @return the next character from the associated token
106: * string
107: *
108: * @exception ArrayIndexOutOfBoundsException if there are
109: * no more characters in this assembly's string
110: */
111: public Object nextElement() {
112: return new Character(string.charAt(index++));
113: }
114:
115: /**
116: * Shows the next object in the assembly, without removing it
117: *
118: * @return the next object
119: */
120: public Object peek() {
121: if (index < length()) {
122: return new Character(string.charAt(index));
123: } else {
124: return null;
125: }
126: }
127:
128: /**
129: * Returns a textual representation of the amount of this
130: * characterAssembly that remains to be consumed.
131: *
132: * @param delimiter the mark to show between consumed
133: * elements
134: *
135: * @return a textual description of the amount of this
136: * assembly that remains to be consumed
137: */
138: public String remainder(String delimiter) {
139: if (delimiter.equals("")) {
140: return string.substring(elementsConsumed());
141: }
142: StringBuffer buf = new StringBuffer();
143:
144: for (int i = elementsConsumed(); i < string.length(); i++) {
145:
146: if (i > elementsConsumed()) {
147: buf.append(delimiter);
148: }
149: buf.append(string.charAt(i));
150: }
151: return buf.toString();
152: }
153: }
|