001 /*
002 // $Id: //open/util/resgen/src/org/eigenbase/xom/XMLAttrVector.java#3 $
003 // Package org.eigenbase.xom is an XML Object Mapper.
004 // Copyright (C) 2005-2005 The Eigenbase Project
005 // Copyright (C) 2005-2005 Disruptive Tech
006 // Copyright (C) 2005-2005 LucidEra, Inc.
007 // Portions Copyright (C) 2000-2005 Kana Software, Inc. and others.
008 //
009 // This library is free software; you can redistribute it and/or modify it
010 // under the terms of the GNU Lesser General Public License as published by the
011 // Free Software Foundation; either version 2 of the License, or (at your
012 // option) any later version approved by The Eigenbase Project.
013 //
014 // This library is distributed in the hope that it will be useful,
015 // but WITHOUT ANY WARRANTY; without even the implied warranty of
016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
017 // GNU Lesser General Public License for more details.
018 //
019 // You should have received a copy of the GNU Lesser General Public License
020 // along with this library; if not, write to the Free Software
021 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
022 //
023 // dsommerfield, 12 December, 2000
024 */
025
026 package org.eigenbase.xom;
027 import java.io.PrintWriter;
028 import java.util.Vector;
029
030 /**
031 * XMLAttrVector is an class which assists in writing XML attributes to a
032 * stream.
033 */
034 public class XMLAttrVector {
035
036 // Vector to hold all attributes and their values.
037 private Vector attrs;
038
039 /**
040 * This private helper class holds an attribute-value pair. It is used
041 * as the element of the vector attrs.
042 */
043 private static class AttrVal
044 {
045 public AttrVal(String attr, String val)
046 {
047 this.attr = attr;
048 this.val = val;
049 }
050
051 public String attr;
052 public String val;
053 }
054
055 /**
056 * Construct an empty XMLAttrVector. Attribute/value pairs may be added
057 * with the add() functions below.
058 */
059 public XMLAttrVector()
060 {
061 attrs = new Vector();
062 }
063
064 /**
065 * Returns the number of attributes.
066 **/
067 public int size()
068 {
069 return attrs.size();
070 }
071
072 /**
073 * Add a new attribute/value pair based on a String value. Note that
074 * attrVal may be null, in which case no attribute/value pair is added.
075 * @param attrName the name of the attribute.
076 * @param attrVal the String value of the attribute.
077 * @return this (to allow chaining)
078 */
079 public XMLAttrVector add(String attrName, Object attrVal)
080 {
081 if(attrVal != null)
082 attrs.addElement(new AttrVal(attrName, attrVal.toString()));
083 return this;
084 }
085
086 /**
087 * Add a new attribute/value pair based on an int value.
088 * @param attrName the name of the attribute.
089 * @param attrVal the int value of the attribute.
090 * @return this (to allow chaining)
091 */
092 public XMLAttrVector add(String attrName, int attrVal)
093 {
094 attrs.addElement(new AttrVal(attrName, ""+attrVal));
095 return this;
096 }
097
098 /**
099 * Add a new attribute/value pair based on a double value.
100 * @param attrName the name of the attribute.
101 * @param attrVal the double value of the attribute.
102 * @return this (to allow chaining)
103 */
104 public XMLAttrVector add(String attrName, double attrVal)
105 {
106 attrs.addElement(new AttrVal(attrName, ""+attrVal));
107 return this;
108 }
109
110 /**
111 * Add a new attribute/value pair based on a boolean value.
112 * True is represented as "true", and false as "false".
113 * @param attrName the name of the attribute.
114 * @param attrVal the boolean value of the attribute.
115 * @return this (to allow chaining)
116 */
117 public XMLAttrVector add(String attrName, boolean attrVal)
118 {
119 if(attrVal)
120 attrs.addElement(new AttrVal(attrName, "true"));
121 else
122 attrs.addElement(new AttrVal(attrName, "false"));
123 return this;
124 }
125
126 /**
127 * Displays the entire attribute/value pair list, given a PrintWriter
128 * to which to display and an indentation level.
129 * This function is typically called from XMLOutput.
130 * @param out PrintWriter to which to write output.
131 * @param indent indentation level.
132 */
133 public void display(PrintWriter out, int indent)
134 {
135 // The indentation level is not used; all attribute/value pairs
136 // are rendered on the same line.
137 for(int i=0; i<attrs.size(); i++) {
138 AttrVal av = (AttrVal)(attrs.elementAt(i));
139 if (av.val != null) {
140 out.print(" ");
141 out.print(av.attr);
142 out.print("=\"");
143 out.print(StringEscaper.xmlNumericEscaper.escapeString(av.val));
144 out.print("\"");
145 }
146 }
147 }
148 }
149
150
151 // End XMLAttrVector.java