Frames | No Frames |
1: /* Format.java -- Abstract superclass for formatting/parsing strings. 2: Copyright (C) 1998, 1999, 2000, 2001, 2003, 2005 Free Software Foundation, Inc. 3: 4: This file is part of GNU Classpath. 5: 6: GNU Classpath is free software; you can redistribute it and/or modify 7: it under the terms of the GNU General Public License as published by 8: the Free Software Foundation; either version 2, or (at your option) 9: any later version. 10: 11: GNU Classpath is distributed in the hope that it will be useful, but 12: WITHOUT ANY WARRANTY; without even the implied warranty of 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14: General Public License for more details. 15: 16: You should have received a copy of the GNU General Public License 17: along with GNU Classpath; see the file COPYING. If not, write to the 18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19: 02110-1301 USA. 20: 21: Linking this library statically or dynamically with other modules is 22: making a combined work based on this library. Thus, the terms and 23: conditions of the GNU General Public License cover the whole 24: combination. 25: 26: As a special exception, the copyright holders of this library give you 27: permission to link this library with independent modules to produce an 28: executable, regardless of the license terms of these independent 29: modules, and to copy and distribute the resulting executable under 30: terms of your choice, provided that you also meet, for each linked 31: independent module, the terms and conditions of the license of that 32: module. An independent module is a module which is not derived from 33: or based on this library. If you modify this library, you may extend 34: this exception to your version of the library, but you are not 35: obligated to do so. If you do not wish to do so, delete this 36: exception statement from your version. */ 37: 38: 39: package java.text; 40: 41: import gnu.java.text.FormatCharacterIterator; 42: 43: import java.io.Serializable; 44: 45: /** 46: * This class is the abstract superclass of classes that format and parse 47: * data to/from <code>Strings</code>. It is guaranteed that any 48: * <code>String</code> produced by a concrete subclass of <code>Format</code> 49: * will be parseable by that same subclass. 50: * <p> 51: * In addition to implementing the abstract methods in this class, subclasses 52: * should provide static factory methods of the form 53: * <code>getInstance()</code> and <code>getInstance(Locale)</code> if the 54: * subclass loads different formatting/parsing schemes based on locale. 55: * These subclasses should also implement a static method called 56: * <code>getAvailableLocales()</code> which returns an array of 57: * available locales in the current runtime environment. 58: * 59: * @author Aaron M. Renn (arenn@urbanophile.com) 60: * @author Per Bothner (bothner@cygnus.com) 61: */ 62: public abstract class Format implements Serializable, Cloneable 63: { 64: /** 65: * For compatability with Sun's JDK 1.4.2 rev. 5 66: */ 67: static final long serialVersionUID = -299282585814624189L; 68: 69: public static class Field extends AttributedCharacterIterator.Attribute 70: { 71: static final long serialVersionUID = 276966692217360283L; 72: 73: protected Field(String name) 74: { 75: super(name); 76: } 77: } 78: 79: /** 80: * This method initializes a new instance of <code>Format</code>. 81: * It performs no actions, but acts as a default constructor for 82: * subclasses. 83: */ 84: protected Format () 85: { 86: } 87: 88: /** 89: * This method formats an <code>Object</code> into a <code>String</code>. 90: * 91: * @param obj The <code>Object</code> to format. 92: * 93: * @return The formatted <code>String</code>. 94: * 95: * @exception IllegalArgumentException If the <code>Object</code> 96: * cannot be formatted. 97: */ 98: public final String format(Object obj) throws IllegalArgumentException 99: { 100: StringBuffer sb = new StringBuffer (); 101: format (obj, sb, new FieldPosition (0)); 102: return sb.toString (); 103: } 104: 105: /** 106: * This method formats an <code>Object</code> into a <code>String</code> and 107: * appends the <code>String</code> to a <code>StringBuffer</code>. 108: * 109: * @param obj The <code>Object</code> to format. 110: * @param sb The <code>StringBuffer</code> to append to. 111: * @param pos The desired <code>FieldPosition</code>, which is also 112: * updated by this call. 113: * 114: * @return The updated <code>StringBuffer</code>. 115: * 116: * @exception IllegalArgumentException If the <code>Object</code> 117: * cannot be formatted. 118: */ 119: public abstract StringBuffer format (Object obj, StringBuffer sb, 120: FieldPosition pos) 121: throws IllegalArgumentException; 122: 123: /** 124: * This method parses a <code>String</code> and converts the parsed 125: * contents into an <code>Object</code>. 126: * 127: * @param str The <code>String</code> to parse. 128: * 129: * @return The resulting <code>Object</code>. 130: * 131: * @exception ParseException If the <code>String</code> cannot be parsed. 132: */ 133: public Object parseObject (String str) throws ParseException 134: { 135: ParsePosition pos = new ParsePosition(0); 136: Object result = parseObject (str, pos); 137: if (result == null) 138: { 139: int index = pos.getErrorIndex(); 140: if (index < 0) 141: index = pos.getIndex(); 142: throw new ParseException("parseObject failed", index); 143: } 144: return result; 145: } 146: 147: /** 148: * This method parses a <code>String</code> and converts the parsed 149: * contents into an <code>Object</code>. 150: * 151: * @param str The <code>String</code> to parse. 152: * @param pos The starting parse index on input, the ending parse 153: * index on output. 154: * 155: * @return The parsed <code>Object</code>, or <code>null</code> in 156: * case of error. 157: */ 158: public abstract Object parseObject (String str, ParsePosition pos); 159: 160: public AttributedCharacterIterator formatToCharacterIterator(Object obj) 161: { 162: return new FormatCharacterIterator(format(obj), null, null); 163: } 164: 165: /** 166: * Creates a copy of this object. 167: * 168: * @return The copied <code>Object</code>. 169: */ 170: public Object clone () 171: { 172: try 173: { 174: return super.clone (); 175: } 176: catch (CloneNotSupportedException e) 177: { 178: return null; 179: } 180: } 181: }