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 8865 2014-01-10 17:13:42Z 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 (Date) ( this.startDate == null ? null : this.startDate.clone() );
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 = (Date) ( value == null ? null : value.clone() );
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 (Date) ( this.endDate == null ? null : this.endDate.clone() );
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 = (Date) ( value == null ? null : value.clone() );
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};
164 * {@code false} if not.
165 *
166 * @throws NullPointerException if {@code date} is {@code null}.
167 */
168 public boolean isValidAt( final Date date )
169 {
170 if ( date == null )
171 {
172 throw new NullPointerException( "date" );
173 }
174
175 return ( date.equals( this.startDate )
176 || date.after( this.startDate ) )
177 && ( this.endDate == null
178 || date.equals( this.endDate )
179 || date.before( this.endDate ) );
180
181 }
182
183 /**
184 * Creates and returns a copy of this object.
185 *
186 * @return A clone of this instance.
187 */
188 public Object clone()
189 {
190 try
191 {
192 final JaxpCurrency ret = (JaxpCurrency) super.clone();
193 if ( this.startDate != null )
194 {
195 ret.startDate = (Date) this.startDate.clone();
196 }
197 if ( this.endDate != null )
198 {
199 ret.endDate = (Date) this.endDate.clone();
200 }
201
202 return ret;
203 }
204 catch ( final CloneNotSupportedException e )
205 {
206 throw new AssertionError( e );
207 }
208 }
209
210 /**
211 * Indicates whether some other object is equal to this one by comparing the values of all properties.
212 *
213 * @param o The reference object with which to compare.
214 *
215 * @return {@code true} if this object is the same as {@code o}; {@code false} otherwise.
216 */
217 public boolean equals( final Object o )
218 {
219 boolean ret = o == this;
220
221 if ( !ret && o instanceof JaxpCurrency )
222 {
223 final JaxpCurrency that = (JaxpCurrency) o;
224
225 ret = ( this.isoCode == null
226 ? that.isoCode == null
227 : this.isoCode.equals( that.isoCode ) )
228 && ( this.dtausCode == null
229 ? that.dtausCode == null
230 : this.dtausCode.equals( that.dtausCode ) )
231 && ( this.startDate == null
232 ? that.startDate == null
233 : this.startDate.equals( that.startDate ) )
234 && ( this.endDate == null
235 ? that.endDate == null
236 : this.endDate.equals( that.endDate ) );
237
238 }
239
240 return ret;
241 }
242
243 /**
244 * Returns a hash code value for this object.
245 *
246 * @return A hash code value for this object.
247 */
248 public int hashCode()
249 {
250 if ( this.hashCode == NO_HASHCODE )
251 {
252 int hc = 23;
253 hc = 37 * hc + ( this.dtausCode == null
254 ? 0
255 : (int) this.dtausCode.charValue() );
256 hc = 37 * hc + ( this.isoCode == null
257 ? 0
258 : this.isoCode.hashCode() );
259 hc = 37 * hc + ( this.startDate == null
260 ? 0
261 : this.startDate.hashCode() );
262 hc = 37 * hc + ( this.endDate == null
263 ? 0
264 : this.endDate.hashCode() );
265
266 this.hashCode = hc;
267 }
268
269 return this.hashCode;
270 }
271
272 /**
273 * Returns a string representation of the object.
274 *
275 * @return A string representation of the object.
276 */
277 public String toString()
278 {
279 return super.toString() + this.internalString();
280 }
281
282 /**
283 * Creates a string representing the properties of the instance.
284 *
285 * @return A string representing the properties of the instance.
286 */
287 private String internalString()
288 {
289 return new StringBuffer( 200 ).append( '{' ).
290 append( "isoCode=" ).append( this.isoCode ).
291 append( ", dtausCode=" ).append( this.dtausCode ).
292 append( ", startDate=" ).append( this.startDate ).
293 append( ", endDate=" ).append( this.endDate ).
294 append( '}' ).toString();
295
296 }
297
298 }