FieldSet.java

  1. /*
  2.  * $Source$
  3.  * $Revision$
  4.  *
  5.  * Copyright (C) 2000 William Chesters
  6.  *
  7.  * Part of Melati (http://melati.org), a framework for the rapid
  8.  * development of clean, maintainable web applications.
  9.  *
  10.  * Melati is free software; Permission is granted to copy, distribute
  11.  * and/or modify this software under the terms either:
  12.  *
  13.  * a) the GNU General Public License as published by the Free Software
  14.  *    Foundation; either version 2 of the License, or (at your option)
  15.  *    any later version,
  16.  *
  17.  *    or
  18.  *
  19.  * b) any version of the Melati Software License, as published
  20.  *    at http://melati.org
  21.  *
  22.  * You should have received a copy of the GNU General Public License and
  23.  * the Melati Software License along with this program;
  24.  * if not, write to the Free Software Foundation, Inc.,
  25.  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA to obtain the
  26.  * GNU General Public License and visit http://melati.org to obtain the
  27.  * Melati Software License.
  28.  *
  29.  * Feel free to contact the Developers of Melati (http://melati.org),
  30.  * if you would like to work out a different arrangement than the options
  31.  * outlined here.  It is our intention to allow Melati to be used by as
  32.  * wide an audience as possible.
  33.  *
  34.  * This program is distributed in the hope that it will be useful,
  35.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  36.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  37.  * GNU General Public License for more details.
  38.  *
  39.  * Contact details for copyright holder:
  40.  *
  41.  *     William Chesters <williamc At paneris.org>
  42.  *     http://paneris.org/~williamc
  43.  *     Obrechtstraat 114, 2517VX Den Haag, The Netherlands
  44.  */

  45. package org.melati.poem;

  46. import java.util.Hashtable;
  47. import java.util.Enumeration;
  48. import org.melati.poem.util.ArrayEnumeration;

  49. /**
  50.  * A set of {@link Field}s accessible in sequence or looked up
  51.  * using an encoding of the table name and column name.
  52.  */
  53. public class FieldSet {

  54.   private Hashtable<String, Integer> table_columnMap;
  55.   private Field<?>[] fields;

  56.   /**
  57.    * Constructor.
  58.    * @param table_columnMap a Hashtable keyed on tablename underscore fieldname containing indices to fields
  59.    * @param fields an array of fields
  60.    */
  61.   public FieldSet(Hashtable<String, Integer> table_columnMap, Field<?>[] fields) {
  62.     this.table_columnMap = table_columnMap;
  63.     this.fields = fields;
  64.   }

  65.   /**
  66.    * @return an Enumeration of the fields
  67.    */
  68.   public Enumeration<Field<?>> elements() {
  69.     return new ArrayEnumeration<Field<?>>(fields);
  70.   }

  71.   /**
  72.    * Return a specified field.
  73.    *
  74.    * @param name The table name and column name separated by "_".
  75.    * @return a Field with given name or null
  76.    * @see TailoredResultSetEnumeration#mapped(java.sql.ResultSet)
  77.    */
  78.   public Field<?> get(String name) {
  79.     Integer f = (Integer)table_columnMap.get(name);
  80.     return f == null ? null : fields[f.intValue()];
  81.   }
  82.  
  83.   /**
  84.    * Used to debug tests.
  85.    * {@inheritDoc}
  86.    * @see java.lang.Object#toString()
  87.    */
  88.   public String toString() {
  89.     if (fields != null) {
  90.       String result = "";
  91.         for (int i = 0; i< fields.length; i++) {
  92.           result += fields[i].getName();
  93.           result += "=\"";
  94.           result += fields[i].getCooked();
  95.           result += "\"";
  96.           result += "\n";
  97.         }
  98.       return result;
  99.     } else {
  100.       return null;
  101.     }
  102.    
  103.   }
  104. }