View Javadoc
1   /*
2    * $Source$
3    * $Revision$
4    *
5    * Copyright (C) 2003 Samuel Goldstein
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   *     Samuel Goldstein <samuel At 1969.ws>
42   *     http://www.1969.ws
43   *     13101 W. Washington Blvd Suite 248, Los Angeles, CA 90066 USA
44   */
45  
46  package org.melati.poem;
47  
48  import java.math.BigDecimal;
49  
50  /**
51   * An extension of {@link AtomPoemType} which adds <code>precision</code> 
52   * and <code>scale</code>.
53   */
54  public abstract class FixedPointAtomPoemType<T> extends AtomPoemType<BigDecimal> {
55  
56    private int precision;
57    private int scale;
58  
59    /**
60     * Constructor.
61     * @param sqlTypeCode from Types
62     * @param sqlTypeName name of sql type
63     * @param nullable whether nulls are allowable values
64     * @param precision how many places to the left of decimal point 
65     * @param scale howmany places to right of decimal point
66     */
67    public FixedPointAtomPoemType(int sqlTypeCode, String sqlTypeName, boolean nullable,
68        int precision, int scale) {
69      super(sqlTypeCode, sqlTypeName, nullable);
70      this.precision = precision;
71      this.scale = scale;
72    }
73  
74    /**
75     * @return precision plus scale
76     */
77    public int getTotalSize() {
78      return precision + scale;
79    }
80  
81    /**
82     * 
83     * @param newPrecision required precision
84     * @param newScale required scale
85     * @return this or a clone with new values
86     */
87    public FixedPointAtomPoemType<T> withPrecisionAndScale(
88      int newPrecision,
89      int newScale) {
90      if (newPrecision == getPrecision() && newScale == getScale())
91        return this;
92  
93      @SuppressWarnings("unchecked")
94      FixedPointAtomPoemType<T> it = (FixedPointAtomPoemType<T>) clone();
95      it.precision = newPrecision;
96      it.scale = newScale;
97      return it;
98    }
99  
100   /**
101    * @return the value of the precision property
102    */
103   public int getPrecision() {
104     return precision;
105   }
106 
107   /**
108    * @return the value of the scale property
109    */
110   public int getScale() {
111     return scale;
112   }
113   /**
114    * @param newPrecision precision to set
115    */
116   public void setPrecision(int newPrecision) {
117     precision = newPrecision;
118   }
119 
120   /**
121    * @param newScale scale to set
122    */
123   public void setScale(int newScale) {
124     scale = newScale;
125   }
126 
127 }