View Javadoc
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  
46  package org.melati.poem;
47  
48  import java.sql.PreparedStatement;
49  import java.sql.ResultSet;
50  import java.sql.SQLException;
51  import java.sql.Types;
52  
53  import org.melati.poem.dbms.Dbms;
54  import org.melati.poem.util.StringUtils;
55  
56  /**
57   * Base of all character sequence types.
58   */
59  public class StringPoemType extends SizedAtomPoemType<String> {
60  
61    /** The nullable instance. */
62    public static final StringPoemType nullableInstance = new StringPoemType(true, -1);
63  
64    /**
65     * Constructor.
66     * @param nullable whether nullable
67     * @param size how big
68     */
69    public StringPoemType(boolean nullable, int size) {
70      super(Types.VARCHAR, "VARCHAR", nullable, size);
71    }
72  
73    protected void _assertValidRaw(Object raw)
74        throws ValidationPoemException {
75      if (raw != null) {
76        if (!(raw instanceof String))
77          throw new TypeMismatchPoemException(raw, this);
78        if (!sizeGreaterEqual(getSize(), ((String)raw).length()))
79          throw new StringLengthValidationPoemException(this, (String)raw);
80      }
81    }
82  
83    protected String _getRaw(ResultSet rs, int col) throws SQLException {
84      return rs.getString(col);
85    }
86  
87    protected void _setRaw(PreparedStatement ps, int col, Object string)
88        throws SQLException {
89      ps.setString(col, (String)string);
90    }
91  
92    protected String _rawOfString(String rawString) {
93      return rawString;
94    }
95  
96    protected String _sqlDefinition(Dbms dbms) {
97      try {
98        return dbms.getStringSqlDefinition(getSize());
99      } catch (SQLException e) {
100       throw new SQLSeriousPoemException(e);
101     }
102   }
103 
104   /**
105    * {@inheritDoc}
106    * @see org.melati.poem.BasePoemType#_canRepresent(org.melati.poem.SQLPoemType)
107    */
108   protected boolean _canRepresent(SQLPoemType<?> other) {
109     return
110         other instanceof StringPoemType &&
111         sizeGreaterEqual(getSize(), ((StringPoemType)other).getSize());
112   }
113 
114   /**
115    * {@inheritDoc}
116    * @see org.melati.poem.BasePoemType#toString()
117    */
118   public String toString() {
119     return (getNullable() ? "nullable " : "") + "String(" + getSize() + ")";
120   }
121 
122   /**
123    * The field type used in the Data Structure Definition language.
124    * @return a dsd type
125    */
126   public String toDsdType() {
127     return "String";
128   }
129 
130   protected void _saveColumnInfo(ColumnInfo columnInfo)
131       throws AccessPoemException {
132     columnInfo.setTypefactory(PoemTypeFactory.STRING);
133     columnInfo.setSize(getSize());
134   }
135 
136   protected String _quotedRaw(Object raw) {
137     return StringUtils.quoted((String)raw, '\'');
138   }
139 
140 }