| 1 | /* | 
| 2 |  *  jDTAUS Banking API | 
| 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.dtaus; | 
| 22 |   | 
| 23 | import java.io.Serializable; | 
| 24 | import java.math.BigInteger; | 
| 25 | import java.util.Arrays; | 
| 26 | import java.util.Currency; | 
| 27 | import org.jdtaus.banking.AlphaNumericText27; | 
| 28 | import org.jdtaus.banking.Bankleitzahl; | 
| 29 | import org.jdtaus.banking.Kontonummer; | 
| 30 | import org.jdtaus.banking.Referenznummer11; | 
| 31 | import org.jdtaus.banking.Textschluessel; | 
| 32 |   | 
| 33 | /** | 
| 34 |  * "C" record. | 
| 35 |  * | 
| 36 |  * @author <a href="mailto:cs@schulte.it">Christian Schulte</a> | 
| 37 |  * @version $JDTAUS: Transaction.java 8799 2012-12-03 18:52:42Z schulte $ | 
| 38 |  */ | 
| 39 | public class Transaction implements Cloneable, Serializable | 
| 40 | { | 
| 41 |   | 
| 42 |     /** Constant for the name of property {@code type}. */ | 
| 43 |     public static final String PROP_TYPE = "org.jdtaus.banking.dtaus.Transaction.PROP_TYPE"; | 
| 44 |   | 
| 45 |     /** Constant for the name of property {@code amount}. */ | 
| 46 |     public static final String PROP_AMOUNT = "org.jdtaus.banking.dtaus.Transaction.PROP_AMOUNT"; | 
| 47 |   | 
| 48 |     /** Constant for the name of property {@code reference}. */ | 
| 49 |     public static final String PROP_REFERENCE = "org.jdtaus.banking.dtaus.Transaction.PROP_REFERENCE"; | 
| 50 |   | 
| 51 |     /** Constant for the name of property {@code descriptions}. */ | 
| 52 |     public static final String PROP_DESCRIPTIONS = "org.jdtaus.banking.dtaus.Transaction.PROP_DESCRIPTIONS"; | 
| 53 |   | 
| 54 |     /** Constant for the name of property {@code primaryBank}. */ | 
| 55 |     public static final String PROP_PRIMARYBANK = "org.jdtaus.banking.dtaus.Transaction.PROP_PRIMARYBANK"; | 
| 56 |   | 
| 57 |     /** Constant for the name of property {@code executiveAccount}. */ | 
| 58 |     public static final String PROP_EXECUTIVEACCOUNT = "org.jdtaus.banking.dtaus.Transaction.PROP_EXECUTIVEACCOUNT"; | 
| 59 |   | 
| 60 |     /** Constant for the name of property {@code executiveBank}. */ | 
| 61 |     public static final String PROP_EXECUTIVEBANK = "org.jdtaus.banking.dtaus.Transaction.PROP_EXECUTIVEBANK"; | 
| 62 |   | 
| 63 |     /** Constant for the name of property {@code executiveName}. */ | 
| 64 |     public static final String PROP_EXECUTIVENAME = "org.jdtaus.banking.dtaus.Transaction.PROP_EXECUTIVENAME"; | 
| 65 |   | 
| 66 |     /** Constant for the name of property {@code executiveExt}. */ | 
| 67 |     public static final String PROP_EXECUTIVEEXT = "org.jdtaus.banking.dtaus.Transaction.PROP_EXECUTIVEEXT"; | 
| 68 |   | 
| 69 |     /** Constant for the name of property {@code targetAccount}. */ | 
| 70 |     public static final String PROP_TARGETACCOUNT = "org.jdtaus.banking.dtaus.Transaction.PROP_TARGETACCOUNT"; | 
| 71 |   | 
| 72 |     /** Constant for the name of property {@code targetBank}. */ | 
| 73 |     public static final String PROP_TARGETBANK = "org.jdtaus.banking.dtaus.Transaction.PROP_TARGETBANK"; | 
| 74 |   | 
| 75 |     /** Constant for the name of property {@code targetName}. */ | 
| 76 |     public static final String PROP_TARGETNAME = "org.jdtaus.banking.dtaus.Transaction.PROP_TARGETNAME"; | 
| 77 |   | 
| 78 |     /** Constant for the name of property {@code targetExt}. */ | 
| 79 |     public static final String PROP_TARGETEXT = "org.jdtaus.banking.dtaus.Transaction.PROP_TARGETEXT"; | 
| 80 |   | 
| 81 |     /** Constant for the name of property {@code currency}. */ | 
| 82 |     public static final String PROP_CURRENCY = "org.jdtaus.banking.dtaus.Transaction.PROP_CURRENCY"; | 
| 83 |   | 
| 84 |     /** Serial version UID for backwards compatibility with 1.0.x classes. */ | 
| 85 |     private static final long serialVersionUID = 1450133285078489771L; | 
| 86 |   | 
| 87 |     /** | 
| 88 |      * Payment type. | 
| 89 |      * @serial | 
| 90 |      */ | 
| 91 |     private Textschluessel type; | 
| 92 |   | 
| 93 |     /** | 
| 94 |      * Amount of money to transfer. | 
| 95 |      * @serial | 
| 96 |      */ | 
| 97 |     private BigInteger amount; | 
| 98 |   | 
| 99 |     /** | 
| 100 |      * The currency of the transaction. | 
| 101 |      * @serial | 
| 102 |      */ | 
| 103 |     private Currency currency; | 
| 104 |   | 
| 105 |     /** | 
| 106 |      * Reference number of the transaction. | 
| 107 |      * @serial | 
| 108 |      */ | 
| 109 |     private Referenznummer11 reference; | 
| 110 |   | 
| 111 |     /** | 
| 112 |      * Descriptions of the transaction. | 
| 113 |      * @serial | 
| 114 |      */ | 
| 115 |     private AlphaNumericText27[] descriptions; | 
| 116 |   | 
| 117 |     /** | 
| 118 |      * Code of the primary participating bank. | 
| 119 |      * @serial | 
| 120 |      */ | 
| 121 |     private Bankleitzahl primaryBank; | 
| 122 |   | 
| 123 |     /** | 
| 124 |      * Ordering bank account. | 
| 125 |      * @serial | 
| 126 |      */ | 
| 127 |     private Kontonummer executiveAccount; | 
| 128 |   | 
| 129 |     /** | 
| 130 |      * Ordering bank. | 
| 131 |      * @serial | 
| 132 |      */ | 
| 133 |     private Bankleitzahl executiveBank; | 
| 134 |   | 
| 135 |     /** | 
| 136 |      * Ordering customer. | 
| 137 |      * @serial | 
| 138 |      */ | 
| 139 |     private AlphaNumericText27 executiveName; | 
| 140 |   | 
| 141 |     /** | 
| 142 |      * Extension to property {@code executiveName}. | 
| 143 |      * @serial | 
| 144 |      */ | 
| 145 |     private AlphaNumericText27 executiveExt; | 
| 146 |   | 
| 147 |     /** | 
| 148 |      * Bank account of the debitor/creditor depending on the transaction's type. | 
| 149 |      * @serial | 
| 150 |      */ | 
| 151 |     private Kontonummer targetAccount; | 
| 152 |   | 
| 153 |     /** | 
| 154 |      * Bank of the debitor/creditor depending on the transaction's type. | 
| 155 |      * @serial | 
| 156 |      */ | 
| 157 |     private Bankleitzahl targetBank; | 
| 158 |   | 
| 159 |     /** | 
| 160 |      * Debitor/creditor name depending on the transaction's type. | 
| 161 |      * @serial | 
| 162 |      */ | 
| 163 |     private AlphaNumericText27 targetName; | 
| 164 |   | 
| 165 |     /** | 
| 166 |      * Extension to property {@code targetName}. | 
| 167 |      * @serial | 
| 168 |      */ | 
| 169 |     private AlphaNumericText27 targetExt; | 
| 170 |   | 
| 171 |     /** Cached hash code. */ | 
| 172 |     private transient int hashCode = NO_HASHCODE; | 
| 173 |     private static final int NO_HASHCODE = Integer.MIN_VALUE; | 
| 174 |   | 
| 175 |     /** Creates a new {@code Transaction} instance. */ | 
| 176 |     public Transaction() | 
| 177 |     { | 
| 178 |         super(); | 
| 179 |     } | 
| 180 |   | 
| 181 |     /** | 
| 182 |      * Getter for property {@code type}. | 
| 183 |      * | 
| 184 |      * @return Payment type of the transaction. | 
| 185 |      */ | 
| 186 |     public Textschluessel getType() | 
| 187 |     { | 
| 188 |         return this.type; | 
| 189 |     } | 
| 190 |   | 
| 191 |     /** | 
| 192 |      * Setter for property {@code type}. | 
| 193 |      * | 
| 194 |      * @param value Payment type of the transaction. | 
| 195 |      */ | 
| 196 |     public void setType( final Textschluessel value ) | 
| 197 |     { | 
| 198 |         this.type = value; | 
| 199 |         this.hashCode = NO_HASHCODE; | 
| 200 |     } | 
| 201 |   | 
| 202 |     /** | 
| 203 |      * Getter for property {@code amount}. | 
| 204 |      * | 
| 205 |      * @return Amount of money to transfer in the smallest unit of the currency (€ = Cent). | 
| 206 |      */ | 
| 207 |     public BigInteger getAmount() | 
| 208 |     { | 
| 209 |         return this.amount; | 
| 210 |     } | 
| 211 |   | 
| 212 |     /** | 
| 213 |      * Setter for property {@code amount}. | 
| 214 |      * | 
| 215 |      * @param value The amount of money to transfer in the smallest unit of the currency (€ = Cent). | 
| 216 |      */ | 
| 217 |     public void setAmount( final BigInteger value ) | 
| 218 |     { | 
| 219 |         this.amount = value; | 
| 220 |         this.hashCode = NO_HASHCODE; | 
| 221 |     } | 
| 222 |   | 
| 223 |     /** | 
| 224 |      * Getter for property {@code currency}. | 
| 225 |      * | 
| 226 |      * @return Currency of the transaction. | 
| 227 |      */ | 
| 228 |     public Currency getCurrency() | 
| 229 |     { | 
| 230 |         return this.currency; | 
| 231 |     } | 
| 232 |   | 
| 233 |     /** | 
| 234 |      * Setter for property {@code currency}. | 
| 235 |      * | 
| 236 |      * @param value Currency of the transaction. | 
| 237 |      */ | 
| 238 |     public void setCurrency( final Currency value ) | 
| 239 |     { | 
| 240 |         this.currency = value; | 
| 241 |         this.hashCode = NO_HASHCODE; | 
| 242 |     } | 
| 243 |   | 
| 244 |     /** | 
| 245 |      * Getter for property {@code reference}. | 
| 246 |      * | 
| 247 |      * @return Reference number of the transaction or {@code null}. | 
| 248 |      */ | 
| 249 |     public Referenznummer11 getReference() | 
| 250 |     { | 
| 251 |         return this.reference; | 
| 252 |     } | 
| 253 |   | 
| 254 |     /** | 
| 255 |      * Setter for property {@code reference}. | 
| 256 |      * | 
| 257 |      * @param value Reference number of the transaction or {@code null}. | 
| 258 |      */ | 
| 259 |     public void setReference( final Referenznummer11 value ) | 
| 260 |     { | 
| 261 |         this.reference = value; | 
| 262 |         this.hashCode = NO_HASHCODE; | 
| 263 |     } | 
| 264 |   | 
| 265 |     /** | 
| 266 |      * Gets all descriptions of the transaction. | 
| 267 |      * | 
| 268 |      * @return All descriptions of the transaction or an empty array if the transaction does not hold any description. | 
| 269 |      */ | 
| 270 |     public AlphaNumericText27[] getDescriptions() | 
| 271 |     { | 
| 272 |         if ( this.descriptions == null ) | 
| 273 |         { | 
| 274 |             this.descriptions = new AlphaNumericText27[ 0 ]; | 
| 275 |             this.hashCode = NO_HASHCODE; | 
| 276 |         } | 
| 277 |   | 
| 278 |         return (AlphaNumericText27[]) this.descriptions.clone(); | 
| 279 |     } | 
| 280 |   | 
| 281 |     /** | 
| 282 |      * Sets all descriptions of the transaction. | 
| 283 |      * | 
| 284 |      * @param value All descriptions of the transaction or {@code null}. | 
| 285 |      */ | 
| 286 |     public void setDescriptions( final AlphaNumericText27[] value ) | 
| 287 |     { | 
| 288 |         this.descriptions = value != null ? (AlphaNumericText27[]) value.clone() : null; | 
| 289 |         this.hashCode = NO_HASHCODE; | 
| 290 |     } | 
| 291 |   | 
| 292 |     /** | 
| 293 |      * Getter for property {@code primaryBank}. | 
| 294 |      * | 
| 295 |      * @return Code of the primary participating bank or {@code null}. | 
| 296 |      */ | 
| 297 |     public Bankleitzahl getPrimaryBank() | 
| 298 |     { | 
| 299 |         return this.primaryBank; | 
| 300 |     } | 
| 301 |   | 
| 302 |     /** | 
| 303 |      * Setter for property {@code primaryBank}. | 
| 304 |      * | 
| 305 |      * @param value Code of the primary participating bank or {@code null}. | 
| 306 |      */ | 
| 307 |     public void setPrimaryBank( final Bankleitzahl value ) | 
| 308 |     { | 
| 309 |         this.primaryBank = value; | 
| 310 |         this.hashCode = NO_HASHCODE; | 
| 311 |     } | 
| 312 |   | 
| 313 |     /** | 
| 314 |      * Getter for property {@code executiveAccount}. | 
| 315 |      * | 
| 316 |      * @return Bank account of the orderer requesting the transaction. | 
| 317 |      */ | 
| 318 |     public Kontonummer getExecutiveAccount() | 
| 319 |     { | 
| 320 |         return this.executiveAccount; | 
| 321 |     } | 
| 322 |   | 
| 323 |     /** | 
| 324 |      * Setter for property {@code executiveAccount}. | 
| 325 |      * | 
| 326 |      * @param value Bank account of the orderer requesting the transaction. | 
| 327 |      */ | 
| 328 |     public void setExecutiveAccount( final Kontonummer value ) | 
| 329 |     { | 
| 330 |         this.executiveAccount = value; | 
| 331 |         this.hashCode = NO_HASHCODE; | 
| 332 |     } | 
| 333 |   | 
| 334 |     /** | 
| 335 |      * Getter for property {@code executiveBank}. | 
| 336 |      * | 
| 337 |      * @return Ordering bank requesting the transaction. | 
| 338 |      */ | 
| 339 |     public Bankleitzahl getExecutiveBank() | 
| 340 |     { | 
| 341 |         return this.executiveBank; | 
| 342 |     } | 
| 343 |   | 
| 344 |     /** | 
| 345 |      * Setter for property {@code executiveBank}. | 
| 346 |      * | 
| 347 |      * @param value Ordering bank requesting the transaction. | 
| 348 |      */ | 
| 349 |     public void setExecutiveBank( final Bankleitzahl value ) | 
| 350 |     { | 
| 351 |         this.executiveBank = value; | 
| 352 |         this.hashCode = NO_HASHCODE; | 
| 353 |     } | 
| 354 |   | 
| 355 |     /** | 
| 356 |      * Getter for property {@code executiveName}. | 
| 357 |      * | 
| 358 |      * @return Ordering customer requesting the transaction. | 
| 359 |      */ | 
| 360 |     public AlphaNumericText27 getExecutiveName() | 
| 361 |     { | 
| 362 |         return this.executiveName; | 
| 363 |     } | 
| 364 |   | 
| 365 |     /** | 
| 366 |      * Setter for property {@code executiveName}. | 
| 367 |      * | 
| 368 |      * @param value Ordering customer requesting the transaction. | 
| 369 |      */ | 
| 370 |     public void setExecutiveName( final AlphaNumericText27 value ) | 
| 371 |     { | 
| 372 |         this.executiveName = value; | 
| 373 |         this.hashCode = NO_HASHCODE; | 
| 374 |     } | 
| 375 |   | 
| 376 |     /** | 
| 377 |      * Getter for property {@code executiveExt}. | 
| 378 |      * | 
| 379 |      * @return Additional data extending the executive name or {@code null}. | 
| 380 |      */ | 
| 381 |     public AlphaNumericText27 getExecutiveExt() | 
| 382 |     { | 
| 383 |         return this.executiveExt; | 
| 384 |     } | 
| 385 |   | 
| 386 |     /** | 
| 387 |      * Setter for property {@code executiveExt}. | 
| 388 |      * | 
| 389 |      * @param value Additional data extending the executive name or {@code null}. | 
| 390 |      */ | 
| 391 |     public void setExecutiveExt( final AlphaNumericText27 value ) | 
| 392 |     { | 
| 393 |         this.executiveExt = value; | 
| 394 |         this.hashCode = NO_HASHCODE; | 
| 395 |     } | 
| 396 |   | 
| 397 |     /** | 
| 398 |      * Getter for property {@code targetAccount}. | 
| 399 |      * | 
| 400 |      * @return Bank account of the debitor/creditor depending on the transaction's type. | 
| 401 |      */ | 
| 402 |     public Kontonummer getTargetAccount() | 
| 403 |     { | 
| 404 |         return this.targetAccount; | 
| 405 |     } | 
| 406 |   | 
| 407 |     /** | 
| 408 |      * Setter for property {@code targetAccount}. | 
| 409 |      * | 
| 410 |      * @param value Bank account of the debitor/creditor depending on the transaction's type. | 
| 411 |      */ | 
| 412 |     public void setTargetAccount( final Kontonummer value ) | 
| 413 |     { | 
| 414 |         this.targetAccount = value; | 
| 415 |         this.hashCode = NO_HASHCODE; | 
| 416 |     } | 
| 417 |   | 
| 418 |     /** | 
| 419 |      * Getter for property {@code targetBank}. | 
| 420 |      * | 
| 421 |      * @return Bank of the debitor/creditor depending on the transaction's type. | 
| 422 |      */ | 
| 423 |     public Bankleitzahl getTargetBank() | 
| 424 |     { | 
| 425 |         return this.targetBank; | 
| 426 |     } | 
| 427 |   | 
| 428 |     /** | 
| 429 |      * Setter for property {@code targetBank}. | 
| 430 |      * | 
| 431 |      * @param value Bank of the debitor/creditor depending on the transaction's type. | 
| 432 |      */ | 
| 433 |     public void setTargetBank( final Bankleitzahl value ) | 
| 434 |     { | 
| 435 |         this.targetBank = value; | 
| 436 |         this.hashCode = NO_HASHCODE; | 
| 437 |     } | 
| 438 |   | 
| 439 |     /** | 
| 440 |      * Getter for property {@code targetName}. | 
| 441 |      * | 
| 442 |      * @return Debitor/creditor depending on the transaction's type. | 
| 443 |      */ | 
| 444 |     public AlphaNumericText27 getTargetName() | 
| 445 |     { | 
| 446 |         return this.targetName; | 
| 447 |     } | 
| 448 |   | 
| 449 |     /** | 
| 450 |      * Setter for property {@code targetName}. | 
| 451 |      * | 
| 452 |      * @param value Debitor/creditor depending on the transaction's type. | 
| 453 |      */ | 
| 454 |     public void setTargetName( final AlphaNumericText27 value ) | 
| 455 |     { | 
| 456 |         this.targetName = value; | 
| 457 |         this.hashCode = NO_HASHCODE; | 
| 458 |     } | 
| 459 |   | 
| 460 |     /** | 
| 461 |      * Getter for property {@code targetExt}. | 
| 462 |      * | 
| 463 |      * @return Additional data extending the target name or {@code null}. | 
| 464 |      */ | 
| 465 |     public AlphaNumericText27 getTargetExt() | 
| 466 |     { | 
| 467 |         return this.targetExt; | 
| 468 |     } | 
| 469 |   | 
| 470 |     /** | 
| 471 |      * Setter for property {@code targetExt}. | 
| 472 |      * | 
| 473 |      * @param value Additional data extending the target name or {@code null}. | 
| 474 |      */ | 
| 475 |     public void setTargetExt( final AlphaNumericText27 value ) | 
| 476 |     { | 
| 477 |         this.targetExt = value; | 
| 478 |         this.hashCode = NO_HASHCODE; | 
| 479 |     } | 
| 480 |   | 
| 481 |     /** | 
| 482 |      * Indicates whether some other object is equal to this one by comparing the values of all properties. | 
| 483 |      * | 
| 484 |      * @param o The reference object with which to compare. | 
| 485 |      * | 
| 486 |      * @return {@code true} if this object is the same as {@code o}; {@code false} otherwise. | 
| 487 |      */ | 
| 488 |     public boolean equals( final Object o ) | 
| 489 |     { | 
| 490 |         boolean equal = this == o; | 
| 491 |   | 
| 492 |         if ( !equal && o instanceof Transaction ) | 
| 493 |         { | 
| 494 |             final Transaction that = (Transaction) o; | 
| 495 |             equal = ( this.getAmount() == null | 
| 496 |                       ? that.getAmount() == null : this.getAmount().equals( that.getAmount() ) ) && | 
| 497 |                     ( this.getCurrency() == null | 
| 498 |                       ? that.getCurrency() == null : this.getCurrency().equals( that.getCurrency() ) ) && | 
| 499 |                     ( this.getExecutiveAccount() == null | 
| 500 |                       ? that.getExecutiveAccount() == null | 
| 501 |                       : this.getExecutiveAccount().equals( that.getExecutiveAccount() ) ) && | 
| 502 |                     ( this.getExecutiveBank() == null | 
| 503 |                       ? that.getExecutiveBank() == null : this.getExecutiveBank().equals( that.getExecutiveBank() ) ) && | 
| 504 |                     ( this.getExecutiveName() == null | 
| 505 |                       ? that.getExecutiveName() == null : this.getExecutiveName().equals( that.getExecutiveName() ) ) && | 
| 506 |                     ( this.getExecutiveExt() == null | 
| 507 |                       ? that.getExecutiveExt() == null : this.getExecutiveExt().equals( that.getExecutiveExt() ) ) && | 
| 508 |                     ( this.getPrimaryBank() == null | 
| 509 |                       ? that.getPrimaryBank() == null : this.getPrimaryBank().equals( that.getPrimaryBank() ) ) && | 
| 510 |                     ( this.getReference() == null | 
| 511 |                       ? that.getReference() == null : this.getReference().equals( that.getReference() ) ) && | 
| 512 |                     ( this.getTargetAccount() == null | 
| 513 |                       ? that.getTargetAccount() == null : this.getTargetAccount().equals( that.getTargetAccount() ) ) && | 
| 514 |                     ( this.getTargetBank() == null | 
| 515 |                       ? that.getTargetBank() == null : this.getTargetBank().equals( that.getTargetBank() ) ) && | 
| 516 |                     ( this.getTargetName() == null | 
| 517 |                       ? that.getTargetName() == null : this.getTargetName().equals( that.getTargetName() ) ) && | 
| 518 |                     ( this.getTargetExt() == null | 
| 519 |                       ? that.getTargetExt() == null : this.getTargetExt().equals( that.getTargetExt() ) ) && | 
| 520 |                     ( this.getType() == null | 
| 521 |                       ? that.getType() == null : this.getType().equals( that.getType() ) ); | 
| 522 |   | 
| 523 |             if ( equal ) | 
| 524 |             { | 
| 525 |                 if ( this.getDescriptions() == null || this.getDescriptions().length == 0 ) | 
| 526 |                 { | 
| 527 |                     equal = that.getDescriptions() == null || that.getDescriptions().length == 0; | 
| 528 |                 } | 
| 529 |                 else | 
| 530 |                 { | 
| 531 |                     equal = that.getDescriptions() != null && that.getDescriptions().length != 0 | 
| 532 |                             ? Arrays.equals( this.getDescriptions(), that.getDescriptions() ) : false; | 
| 533 |   | 
| 534 |                 } | 
| 535 |             } | 
| 536 |         } | 
| 537 |   | 
| 538 |         return equal; | 
| 539 |     } | 
| 540 |   | 
| 541 |     /** | 
| 542 |      * Returns a hash code value for this object. | 
| 543 |      * | 
| 544 |      * @return A hash code value for this object. | 
| 545 |      */ | 
| 546 |     public int hashCode() | 
| 547 |     { | 
| 548 |         if ( this.hashCode == NO_HASHCODE ) | 
| 549 |         { | 
| 550 |             int hc = 23; | 
| 551 |             hc = 37 * hc + ( this.amount == null ? 0 : this.amount.hashCode() ); | 
| 552 |             hc = 37 * hc + ( this.currency == null ? 0 : this.currency.hashCode() ); | 
| 553 |             hc = 37 * hc + ( this.executiveAccount == null ? 0 : this.executiveAccount.hashCode() ); | 
| 554 |             hc = 37 * hc + ( this.executiveBank == null ? 0 : this.executiveBank.hashCode() ); | 
| 555 |             hc = 37 * hc + ( this.executiveExt == null ? 0 : this.executiveExt.hashCode() ); | 
| 556 |             hc = 37 * hc + ( this.executiveName == null ? 0 : this.executiveName.hashCode() ); | 
| 557 |             hc = 37 * hc + ( this.primaryBank == null ? 0 : this.primaryBank.hashCode() ); | 
| 558 |             hc = 37 * hc + ( this.reference == null ? 0 : this.reference.hashCode() ); | 
| 559 |             hc = 37 * hc + ( this.targetAccount == null ? 0 : this.targetAccount.hashCode() ); | 
| 560 |             hc = 37 * hc + ( this.targetBank == null ? 0 : this.targetBank.hashCode() ); | 
| 561 |             hc = 37 * hc + ( this.targetExt == null ? 0 : this.targetExt.hashCode() ); | 
| 562 |             hc = 37 * hc + ( this.targetName == null ? 0 : this.targetName.hashCode() ); | 
| 563 |             hc = 37 * hc + ( this.type == null ? 0 : this.type.hashCode() ); | 
| 564 |   | 
| 565 |             if ( this.descriptions == null || this.descriptions.length == 0 ) | 
| 566 |             { | 
| 567 |                 hc = 37 * hc; | 
| 568 |             } | 
| 569 |             else | 
| 570 |             { | 
| 571 |                 for ( int i = this.descriptions.length - 1; i >= 0; i-- ) | 
| 572 |                 { | 
| 573 |                     hc = 37 * hc + this.descriptions[i].hashCode(); | 
| 574 |                 } | 
| 575 |             } | 
| 576 |   | 
| 577 |             this.hashCode = hc; | 
| 578 |         } | 
| 579 |   | 
| 580 |         return this.hashCode; | 
| 581 |     } | 
| 582 |   | 
| 583 |     /** | 
| 584 |      * Creates and returns a copy of this object. | 
| 585 |      * | 
| 586 |      * @return A clone of this instance. | 
| 587 |      */ | 
| 588 |     public Object clone() | 
| 589 |     { | 
| 590 |         try | 
| 591 |         { | 
| 592 |             return super.clone(); | 
| 593 |         } | 
| 594 |         catch ( final CloneNotSupportedException e ) | 
| 595 |         { | 
| 596 |             throw new AssertionError( e ); | 
| 597 |         } | 
| 598 |     } | 
| 599 |   | 
| 600 |     /** | 
| 601 |      * Returns a string representation of the object. | 
| 602 |      * | 
| 603 |      * @return A string representation of the object. | 
| 604 |      */ | 
| 605 |     public String toString() | 
| 606 |     { | 
| 607 |         return super.toString() + this.internalString(); | 
| 608 |     } | 
| 609 |   | 
| 610 |     /** | 
| 611 |      * Creates a string representing the properties of the instance. | 
| 612 |      * | 
| 613 |      * @return A string representing the properties of the instance. | 
| 614 |      */ | 
| 615 |     private String internalString() | 
| 616 |     { | 
| 617 |         return new StringBuffer( 300 ).append( '{' ). | 
| 618 |             append( "amount=" ).append( this.amount ). | 
| 619 |             append( ", currency=" ).append( this.currency ). | 
| 620 |             append( ", descriptions=" ).append( toString( this.descriptions ) ). | 
| 621 |             append( ", executiveAccount=" ).append( this.executiveAccount ). | 
| 622 |             append( ", executiveBank=" ).append( this.executiveBank ). | 
| 623 |             append( ", executiveName=" ).append( (Object) this.executiveName ). | 
| 624 |             append( ", executiveExt=" ).append( (Object) this.executiveExt ). | 
| 625 |             append( ", primaryBank=" ).append( this.primaryBank ). | 
| 626 |             append( ", reference=" ).append( this.reference ). | 
| 627 |             append( ", targetAccount=" ).append( this.targetAccount ). | 
| 628 |             append( ", targetBank=" ).append( this.targetBank ). | 
| 629 |             append( ", targetName=" ).append( (Object) this.targetName ). | 
| 630 |             append( ", targetExt=" ).append( (Object) this.targetExt ). | 
| 631 |             append( ", type=" ).append( this.type ). | 
| 632 |             append( '}' ).toString(); | 
| 633 |   | 
| 634 |     } | 
| 635 |   | 
| 636 |     private static String toString( final AlphaNumericText27[] texts ) | 
| 637 |     { | 
| 638 |         String string = null; | 
| 639 |   | 
| 640 |         if ( texts != null ) | 
| 641 |         { | 
| 642 |             final StringBuffer stringBuilder = | 
| 643 |                 new StringBuffer( texts.length * AlphaNumericText27.MAX_LENGTH + texts.length * 2 + 2 ); | 
| 644 |   | 
| 645 |             stringBuilder.append( '[' ); | 
| 646 |   | 
| 647 |             for ( int i = 0, max = texts.length - 1; i < max; i++ ) | 
| 648 |             { | 
| 649 |                 texts[i].format( stringBuilder ); | 
| 650 |   | 
| 651 |                 if ( i < max ) | 
| 652 |                 { | 
| 653 |                     stringBuilder.append( ", " ); | 
| 654 |                 } | 
| 655 |             } | 
| 656 |   | 
| 657 |             string = stringBuilder.append( ']' ).toString(); | 
| 658 |         } | 
| 659 |   | 
| 660 |         return string; | 
| 661 |     } | 
| 662 |   | 
| 663 | } |