View Javadoc

1   /*
2    *  jDTAUS Banking RI CurrencyDirectory
3    *  Copyright (C) 2005 Christian Schulte
4    *  <cs@schulte.it>
5    *
6    *  This library is free software; you can redistribute it and/or
7    *  modify it under the terms of the GNU Lesser General Public
8    *  License as published by the Free Software Foundation; either
9    *  version 2.1 of the License, or any later version.
10   *
11   *  This library is distributed in the hope that it will be useful,
12   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14   *  Lesser General Public License for more details.
15   *
16   *  You should have received a copy of the GNU Lesser General Public
17   *  License along with this library; if not, write to the Free Software
18   *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19   *
20   */
21  package org.jdtaus.banking.ri.currencydir;
22  
23  import java.io.Serializable;
24  import java.util.Date;
25  
26  /**
27   * Currency.
28   *
29   * @author <a href="mailto:cs@schulte.it">Christian Schulte</a>
30   * @version $JDTAUS: JaxpCurrency.java 8661 2012-09-27 11:29:58Z schulte $
31   */
32  public class JaxpCurrency implements Serializable, Cloneable
33  {
34  
35      /** Serial version UID for backwards compatibility with 1.0.x classes. */
36      private static final long serialVersionUID = 3499875740280116856L;
37  
38      /**
39       * ISO currency code.
40       * @serial
41       */
42      private String isoCode;
43  
44      /**
45       * DTAUS currency code.
46       * @serial
47       */
48      private Character dtausCode;
49  
50      /**
51       * Start date.
52       * @serial
53       */
54      private Date startDate;
55  
56      /**
57       * End date.
58       * @serial
59       */
60      private Date endDate;
61  
62      /** Cached hash-code. */
63      private transient int hashCode = NO_HASHCODE;
64  
65      /** Constant for field {@code hashCode} forcing hash code computation. */
66      private static final int NO_HASHCODE = Integer.MIN_VALUE;
67  
68      /** Creates a new {@code JaxpCurrency} instance. */
69      public JaxpCurrency()
70      {
71          super();
72      }
73  
74      /**
75       * Gets the ISO currency code.
76       *
77       * @return The ISO currency code.
78       */
79      public String getIsoCode()
80      {
81          return this.isoCode;
82      }
83  
84      /**
85       * Sets the ISO currency code.
86       *
87       * @param value The ISO currency code.
88       */
89      public void setIsoCode( final String value )
90      {
91          this.isoCode = value;
92          this.hashCode = NO_HASHCODE;
93      }
94  
95      /**
96       * Gets the DTAUS currency code.
97       *
98       * @return The DTAUS currency code or {@code null}.
99       */
100     public Character getDtausCode()
101     {
102         return this.dtausCode;
103     }
104 
105     /**
106      * Sets the DTAUS currency code.
107      *
108      * @param value The DTAUS currency code or {@code null}.
109      */
110     public void setDtausCode( final Character value )
111     {
112         this.dtausCode = value;
113         this.hashCode = NO_HASHCODE;
114     }
115 
116     /**
117      * Gets the start date.
118      *
119      * @return The start date..
120      */
121     public Date getStartDate()
122     {
123         return this.startDate;
124     }
125 
126     /**
127      * Sets the start date.
128      *
129      * @param value The start date.
130      */
131     public void setStartDate( final Date value )
132     {
133         this.startDate = value;
134         this.hashCode = NO_HASHCODE;
135     }
136 
137     /**
138      * Gets the end date.
139      *
140      * @return The end date.
141      */
142     public Date getEndDate()
143     {
144         return this.endDate;
145     }
146 
147     /**
148      * Sets the end date.
149      *
150      * @param value The end date.
151      */
152     public void setEndDate( final Date value )
153     {
154         this.endDate = value;
155         this.hashCode = NO_HASHCODE;
156     }
157 
158     /**
159      * Checks that the currency is valid at a given date.
160      *
161      * @param date The date with which to check.
162      *
163      * @return {@code true}, if the currency is valid at {@code date}; {@code false} if not.
164      *
165      * @throws NullPointerException if {@code date} is {@code null}.
166      */
167     public boolean isValidAt( final Date date )
168     {
169         if ( date == null )
170         {
171             throw new NullPointerException( "date" );
172         }
173 
174         return ( date.equals( this.getStartDate() ) || date.after( this.getStartDate() ) ) &&
175                ( this.getEndDate() == null || date.equals( this.getEndDate() ) || date.before( this.getEndDate() ) );
176 
177     }
178 
179     /**
180      * Creates and returns a copy of this object.
181      *
182      * @return A clone of this instance.
183      */
184     public Object clone()
185     {
186         try
187         {
188             final JaxpCurrency ret = (JaxpCurrency) super.clone();
189             if ( this.startDate != null )
190             {
191                 ret.startDate = (Date) this.startDate.clone();
192             }
193             if ( this.endDate != null )
194             {
195                 ret.endDate = (Date) this.endDate.clone();
196             }
197 
198             return ret;
199         }
200         catch ( final CloneNotSupportedException e )
201         {
202             throw new AssertionError( e );
203         }
204     }
205 
206     /**
207      * Indicates whether some other object is equal to this one by comparing the values of all properties.
208      *
209      * @param o The reference object with which to compare.
210      *
211      * @return {@code true} if this object is the same as {@code o}; {@code false} otherwise.
212      */
213     public boolean equals( final Object o )
214     {
215         boolean ret = o == this;
216 
217         if ( !ret && o instanceof JaxpCurrency )
218         {
219             final JaxpCurrency that = (JaxpCurrency) o;
220             ret = ( this.getIsoCode() == null
221                     ? that.getIsoCode() == null : this.getIsoCode().equals( that.getIsoCode() ) ) &&
222                   ( this.getDtausCode() == that.getDtausCode() ) &&
223                   ( this.getStartDate() == null
224                     ? that.getStartDate() == null : this.getStartDate().equals( that.getStartDate() ) ) &&
225                   ( this.getEndDate() == null
226                     ? that.getEndDate() == null : this.getEndDate().equals( that.getEndDate() ) );
227 
228         }
229 
230         return ret;
231     }
232 
233     /**
234      * Returns a hash code value for this object.
235      *
236      * @return A hash code value for this object.
237      */
238     public int hashCode()
239     {
240         if ( this.hashCode == NO_HASHCODE )
241         {
242             int hc = 23;
243             hc = 37 * hc + ( this.dtausCode == null ? 0 : (int) this.dtausCode.charValue() );
244             hc = 37 * hc + ( this.isoCode == null ? 0 : this.isoCode.hashCode() );
245             hc = 37 * hc + ( this.startDate == null ? 0 : this.startDate.hashCode() );
246             hc = 37 * hc + ( this.endDate == null ? 0 : this.endDate.hashCode() );
247             this.hashCode = hc;
248         }
249 
250         return this.hashCode;
251     }
252 
253     /**
254      * Returns a string representation of the object.
255      *
256      * @return A string representation of the object.
257      */
258     public String toString()
259     {
260         return super.toString() + this.internalString();
261     }
262 
263     /**
264      * Creates a string representing the properties of the instance.
265      *
266      * @return A string representing the properties of the instance.
267      */
268     private String internalString()
269     {
270         return new StringBuffer( 200 ).append( '{' ).
271             append( "isoCode=" ).append( this.isoCode ).
272             append( ", dtausCode=" ).append( this.dtausCode ).
273             append( ", startDate=" ).append( this.startDate ).
274             append( ", endDate=" ).append( this.endDate ).
275             append( '}' ).toString();
276 
277     }
278 
279 }