001/* 002 * jDTAUS Banking API 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.dtaus; 022 023import java.io.Serializable; 024import java.util.Calendar; 025import java.util.Currency; 026import java.util.Date; 027import org.jdtaus.banking.AlphaNumericText27; 028import org.jdtaus.banking.Bankleitzahl; 029import org.jdtaus.banking.Kontonummer; 030import org.jdtaus.banking.Referenznummer10; 031 032/** 033 * "A" record. 034 * 035 * @author <a href="mailto:cs@schulte.it">Christian Schulte</a> 036 * @version $JDTAUS: Header.java 8661 2012-09-27 11:29:58Z schulte $ 037 */ 038public class Header implements Cloneable, Serializable 039{ 040 041 /** Constant for the name of property {@code customer}. */ 042 public static final String PROP_CUSTOMER = "org.jdtaus.banking.dtaus.Header.PROP_CUSTOMER"; 043 044 /** Constant for the name of property {@code account}. */ 045 public static final String PROP_ACCOUNT = "org.jdtaus.banking.dtaus.Header.PROP_ACCOUNT"; 046 047 /** Constant for the name of property {@code bank}. */ 048 public static final String PROP_BANK = "org.jdtaus.banking.dtaus.Header.PROP_BANK"; 049 050 /** Constant for the name of property {@code type}. */ 051 public static final String PROP_TYPE = "org.jdtaus.banking.dtaus.Header.PROP_TYPE"; 052 053 /** Constant for the name of property {@code currency}. */ 054 public static final String PROP_CURRENCY = "org.jdtaus.banking.dtaus.Header.PROP_CURRENCY"; 055 056 /** Constant for the name of property {@code reference}. */ 057 public static final String PROP_REFERENCE = "org.jdtaus.banking.dtaus.Header.PROP_REFERENCE"; 058 059 /** Constant for the name of property {@code bankData}. */ 060 public static final String PROP_BANKDATA = "org.jdtaus.banking.dtaus.Header.PROP_BANKDATA"; 061 062 /** Constant for the name of property {@code createDate}. */ 063 public static final String PROP_CREATEDATE = "org.jdtaus.banking.dtaus.Header.PROP_CREATEDATE"; 064 065 /** Constant for the name of property {@code executionDate}. */ 066 public static final String PROP_EXECUTIONDATE = "org.jdtaus.banking.dtaus.Header.PROP_EXECUTIONDATE"; 067 068 /** Serial version UID for backwards compatibility with 1.0.x classes. */ 069 private static final long serialVersionUID = -5704199858711059732L; 070 071 /** 072 * Name of the customer a logical file belongs to. 073 * @serial 074 */ 075 private AlphaNumericText27 customer; 076 077 /** 078 * Code of the account a logical file belongs to. 079 * @serial 080 */ 081 private Kontonummer account; 082 083 /** 084 * Code of the bank a logical file belongs to. 085 * @serial 086 */ 087 private Bankleitzahl bank; 088 089 /** 090 * Type of a logical file. 091 * @serial 092 */ 093 private LogicalFileType type; 094 095 /** 096 * Currency of a logical file. 097 * @serial 098 */ 099 private Currency currency; 100 101 /** 102 * Reference code of a logical file. 103 * @serial 104 */ 105 private Referenznummer10 reference; 106 107 /** 108 * Create date of a logical file. 109 * @serial 110 */ 111 private Date createDate; 112 113 /** 114 * Execution date of a logical file. 115 * @serial 116 */ 117 private Date executionDate; 118 119 /** 120 * Bank internal data. 121 * @serial 122 */ 123 private Bankleitzahl bankData; 124 125 /** Cached hash code. */ 126 private transient int hashCode = NO_HASHCODE; 127 private static final int NO_HASHCODE = Integer.MIN_VALUE; 128 129 /** Creates a new {@code Header} instance. */ 130 public Header() 131 { 132 super(); 133 } 134 135 /** 136 * Getter for property {@code customer}. 137 * 138 * @return Name of the customer a logical file belongs to. 139 */ 140 public AlphaNumericText27 getCustomer() 141 { 142 return this.customer; 143 } 144 145 /** 146 * Setter for property {@code customer}. 147 * 148 * @param value Name of the customer a logical file belongs to. 149 */ 150 public void setCustomer( final AlphaNumericText27 value ) 151 { 152 this.customer = value; 153 this.hashCode = NO_HASHCODE; 154 } 155 156 /** 157 * Getter for property {@code account}. 158 * 159 * @return Code of the account a logical file belongs to. 160 */ 161 public Kontonummer getAccount() 162 { 163 return this.account; 164 } 165 166 /** 167 * Setter for property {@code account}. 168 * 169 * @param value Code of the account a logical file belongs to. 170 */ 171 public void setAccount( final Kontonummer value ) 172 { 173 this.account = value; 174 this.hashCode = NO_HASHCODE; 175 } 176 177 /** 178 * Getter for property {@code bank}. 179 * 180 * @return Code of the bank a logical file belongs to. 181 */ 182 public Bankleitzahl getBank() 183 { 184 return this.bank; 185 } 186 187 /** 188 * Setter for property {@code bank}. 189 * 190 * @param value Code of the bank a logical file belongs to. 191 */ 192 public void setBank( final Bankleitzahl value ) 193 { 194 this.bank = value; 195 this.hashCode = NO_HASHCODE; 196 } 197 198 /** 199 * Getter for property {@code type}. 200 * 201 * @return The type of a logical file. 202 */ 203 public LogicalFileType getType() 204 { 205 return this.type; 206 } 207 208 /** 209 * Setter for property {@code type}. 210 * 211 * @param value The type of a logical file. 212 */ 213 public void setType( final LogicalFileType value ) 214 { 215 this.type = value; 216 this.hashCode = NO_HASHCODE; 217 } 218 219 /** 220 * Getter for property {@code currency}. 221 * 222 * @return Currency of a logical file. 223 */ 224 public Currency getCurrency() 225 { 226 return this.currency; 227 } 228 229 /** 230 * Setter for property {@code currency}. 231 * 232 * @param value Currency for a logical file. 233 */ 234 public void setCurrency( final Currency value ) 235 { 236 this.currency = value; 237 this.hashCode = NO_HASHCODE; 238 } 239 240 /** 241 * Getter for property {@code reference}. 242 * 243 * @return Reference code of a logical file or {@code null}. 244 */ 245 public Referenznummer10 getReference() 246 { 247 return this.reference; 248 } 249 250 /** 251 * Setter for property {@code reference}. 252 * 253 * @param value Reference code of a logical file or {@code null}. 254 */ 255 public void setReference( final Referenznummer10 value ) 256 { 257 this.reference = value; 258 this.hashCode = NO_HASHCODE; 259 } 260 261 /** 262 * Getter for property {@code createDate}. 263 * 264 * @return Create date of a logical file. 265 */ 266 public Date getCreateDate() 267 { 268 return this.createDate != null ? (Date) this.createDate.clone() : null; 269 } 270 271 /** 272 * Setter for property {@code createDate}. 273 * 274 * @param value Create date of a logical file. 275 */ 276 public void setCreateDate( final Date value ) 277 { 278 this.createDate = null; 279 this.hashCode = NO_HASHCODE; 280 281 if ( value != null ) 282 { 283 final Calendar cal = Calendar.getInstance(); 284 cal.setTime( value ); 285 cal.clear( Calendar.HOUR_OF_DAY ); 286 cal.clear( Calendar.MINUTE ); 287 cal.clear( Calendar.SECOND ); 288 cal.clear( Calendar.MILLISECOND ); 289 this.createDate = cal.getTime(); 290 } 291 } 292 293 /** 294 * Getter for property {@code executionDate}. 295 * 296 * @return Execution date of a logical file or {@code null}. 297 */ 298 public Date getExecutionDate() 299 { 300 return this.executionDate != null ? (Date) this.executionDate.clone() : null; 301 } 302 303 /** 304 * Setter for property {@code executionDate}. 305 * 306 * @param value Execution date of a logical file or {@code null}. 307 */ 308 public void setExecutionDate( final Date value ) 309 { 310 this.executionDate = null; 311 this.hashCode = NO_HASHCODE; 312 313 if ( value != null ) 314 { 315 final Calendar cal = Calendar.getInstance(); 316 cal.setTime( value ); 317 cal.clear( Calendar.HOUR_OF_DAY ); 318 cal.clear( Calendar.MINUTE ); 319 cal.clear( Calendar.SECOND ); 320 cal.clear( Calendar.MILLISECOND ); 321 this.executionDate = cal.getTime(); 322 } 323 } 324 325 /** 326 * Getter for property {@code bankData}. 327 * 328 * @return Bank internal data. 329 */ 330 public Bankleitzahl getBankData() 331 { 332 return this.bankData; 333 } 334 335 /** 336 * Setter for property {@code bankData}. 337 * 338 * @param value Bank internal data. 339 */ 340 public void setBankData( final Bankleitzahl value ) 341 { 342 this.bankData = value; 343 this.hashCode = NO_HASHCODE; 344 } 345 346 /** 347 * Indicates whether some other object is equal to this one by comparing the values of all properties. 348 * 349 * @param o The reference object with which to compare. 350 * 351 * @return {@code true} if this object is the same as {@code o}; {@code false} otherwise. 352 */ 353 public boolean equals( final Object o ) 354 { 355 boolean ret = o == this; 356 357 if ( !ret && o instanceof Header ) 358 { 359 final Header that = (Header) o; 360 ret = ( this.getAccount() == null 361 ? that.getAccount() == null : this.getAccount().equals( that.getAccount() ) ) && 362 ( this.getBank() == null 363 ? that.getBank() == null : this.getBank().equals( that.getBank() ) ) && 364 ( this.getBankData() == null 365 ? that.getBankData() == null : this.getBankData().equals( that.getBankData() ) ) && 366 ( this.getCurrency() == null 367 ? that.getCurrency() == null : this.getCurrency().equals( that.getCurrency() ) ) && 368 ( this.getCustomer() == null 369 ? that.getCustomer() == null : this.getCustomer().equals( that.getCustomer() ) ) && 370 ( this.getType() == null 371 ? that.getType() == null : this.getType().equals( that.getType() ) ) && 372 ( this.getReference() == null 373 ? that.getReference() == null : this.getReference().equals( that.getReference() ) ) && 374 ( this.getCreateDate() == null 375 ? that.getCreateDate() == null : this.getCreateDate().equals( that.getCreateDate() ) ) && 376 ( this.getExecutionDate() == null 377 ? that.getExecutionDate() == null : this.getExecutionDate().equals( that.getExecutionDate() ) ); 378 379 } 380 381 return ret; 382 } 383 384 /** 385 * Returns a hash code value for this object. 386 * 387 * @return A hash code value for this object. 388 */ 389 public int hashCode() 390 { 391 if ( this.hashCode == NO_HASHCODE ) 392 { 393 int hc = 23; 394 hc = 37 * hc + ( this.account == null ? 0 : this.account.hashCode() ); 395 hc = 37 * hc + ( this.bank == null ? 0 : this.bank.hashCode() ); 396 hc = 37 * hc + ( this.bankData == null ? 0 : this.bankData.hashCode() ); 397 hc = 37 * hc + ( this.currency == null ? 0 : this.currency.hashCode() ); 398 hc = 37 * hc + ( this.customer == null ? 0 : this.customer.hashCode() ); 399 hc = 37 * hc + ( this.type == null ? 0 : this.type.hashCode() ); 400 hc = 37 * hc + ( this.reference == null ? 0 : this.reference.hashCode() ); 401 hc = 37 * hc + ( this.createDate == null ? 0 : this.createDate.hashCode() ); 402 hc = 37 * hc + ( this.executionDate == null ? 0 : this.executionDate.hashCode() ); 403 this.hashCode = hc; 404 } 405 406 return this.hashCode; 407 } 408 409 /** 410 * Creates and returns a copy of this object. 411 * 412 * @return A clone of this instance. 413 */ 414 public Object clone() 415 { 416 try 417 { 418 final Object o = super.clone(); 419 if ( this.createDate != null ) 420 { 421 ( (Header) o ).createDate = (Date) this.createDate.clone(); 422 } 423 if ( this.executionDate != null ) 424 { 425 ( (Header) o ).executionDate = (Date) this.executionDate.clone(); 426 } 427 428 return o; 429 } 430 catch ( final CloneNotSupportedException e ) 431 { 432 throw new AssertionError( e ); 433 } 434 } 435 436 /** 437 * Returns a string representation of the object. 438 * 439 * @return A string representation of the object. 440 */ 441 public String toString() 442 { 443 return super.toString() + this.internalString(); 444 } 445 446 /** 447 * Creates a string representing the properties of the instance. 448 * 449 * @return A string representing the properties of the instance. 450 */ 451 private String internalString() 452 { 453 return new StringBuffer( 150 ).append( '{' ). 454 append( "account=" ).append( this.account ). 455 append( ", bank=" ).append( this.bank ). 456 append( ", bankData=" ).append( this.bankData ). 457 append( ", currency=" ).append( this.currency ). 458 append( ", customer=" ).append( (Object) this.customer ). 459 append( ", createDate=" ).append( this.createDate ). 460 append( ", executionDate=" ).append( this.executionDate ). 461 append( ", type=" ).append( this.type ). 462 append( ", reference=" ).append( this.reference ). 463 append( '}' ).toString(); 464 465 } 466 467}