001/* 002 * jDTAUS Banking RI CurrencyDirectory 003 * Copyright (C) 2005 Christian Schulte 004 * <cs@schulte.it> 005 * 006 * This library is free software; you can redistribute it and/or 007 * modify it under the terms of the GNU Lesser General Public 008 * License as published by the Free Software Foundation; either 009 * version 2.1 of the License, or any later version. 010 * 011 * This library is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 014 * Lesser General Public License for more details. 015 * 016 * You should have received a copy of the GNU Lesser General Public 017 * License along with this library; if not, write to the Free Software 018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 019 * 020 */ 021package org.jdtaus.banking.ri.currencydir; 022 023import java.io.Serializable; 024import java.util.Date; 025 026/** 027 * Currency. 028 * 029 * @author <a href="mailto:cs@schulte.it">Christian Schulte</a> 030 * @version $JDTAUS: JaxpCurrency.java 8865 2014-01-10 17:13:42Z schulte $ 031 */ 032public class JaxpCurrency implements Serializable, Cloneable 033{ 034 035 /** Serial version UID for backwards compatibility with 1.0.x classes. */ 036 private static final long serialVersionUID = 3499875740280116856L; 037 038 /** 039 * ISO currency code. 040 * @serial 041 */ 042 private String isoCode; 043 044 /** 045 * DTAUS currency code. 046 * @serial 047 */ 048 private Character dtausCode; 049 050 /** 051 * Start date. 052 * @serial 053 */ 054 private Date startDate; 055 056 /** 057 * End date. 058 * @serial 059 */ 060 private Date endDate; 061 062 /** Cached hash-code. */ 063 private transient int hashCode = NO_HASHCODE; 064 065 /** Constant for field {@code hashCode} forcing hash code computation. */ 066 private static final int NO_HASHCODE = Integer.MIN_VALUE; 067 068 /** Creates a new {@code JaxpCurrency} instance. */ 069 public JaxpCurrency() 070 { 071 super(); 072 } 073 074 /** 075 * Gets the ISO currency code. 076 * 077 * @return The ISO currency code. 078 */ 079 public String getIsoCode() 080 { 081 return this.isoCode; 082 } 083 084 /** 085 * Sets the ISO currency code. 086 * 087 * @param value The ISO currency code. 088 */ 089 public void setIsoCode( final String value ) 090 { 091 this.isoCode = value; 092 this.hashCode = NO_HASHCODE; 093 } 094 095 /** 096 * Gets the DTAUS currency code. 097 * 098 * @return The DTAUS currency code or {@code null}. 099 */ 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}