View Javadoc
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.util.Calendar;
25  import java.util.Currency;
26  import java.util.Date;
27  import org.jdtaus.banking.AlphaNumericText27;
28  import org.jdtaus.banking.Bankleitzahl;
29  import org.jdtaus.banking.Kontonummer;
30  import org.jdtaus.banking.Referenznummer10;
31  
32  /**
33   * "A" record.
34   *
35   * @author <a href="mailto:cs@schulte.it">Christian Schulte</a>
36   * @version $JDTAUS: Header.java 8661 2012-09-27 11:29:58Z schulte $
37   */
38  public class Header implements Cloneable, Serializable
39  {
40  
41      /** Constant for the name of property {@code customer}. */
42      public static final String PROP_CUSTOMER = "org.jdtaus.banking.dtaus.Header.PROP_CUSTOMER";
43  
44      /** Constant for the name of property {@code account}. */
45      public static final String PROP_ACCOUNT = "org.jdtaus.banking.dtaus.Header.PROP_ACCOUNT";
46  
47      /** Constant for the name of property {@code bank}. */
48      public static final String PROP_BANK = "org.jdtaus.banking.dtaus.Header.PROP_BANK";
49  
50      /** Constant for the name of property {@code type}. */
51      public static final String PROP_TYPE = "org.jdtaus.banking.dtaus.Header.PROP_TYPE";
52  
53      /** Constant for the name of property {@code currency}. */
54      public static final String PROP_CURRENCY = "org.jdtaus.banking.dtaus.Header.PROP_CURRENCY";
55  
56      /** Constant for the name of property {@code reference}. */
57      public static final String PROP_REFERENCE = "org.jdtaus.banking.dtaus.Header.PROP_REFERENCE";
58  
59      /** Constant for the name of property {@code bankData}. */
60      public static final String PROP_BANKDATA = "org.jdtaus.banking.dtaus.Header.PROP_BANKDATA";
61  
62      /** Constant for the name of property {@code createDate}. */
63      public static final String PROP_CREATEDATE = "org.jdtaus.banking.dtaus.Header.PROP_CREATEDATE";
64  
65      /** Constant for the name of property {@code executionDate}. */
66      public static final String PROP_EXECUTIONDATE = "org.jdtaus.banking.dtaus.Header.PROP_EXECUTIONDATE";
67  
68      /** Serial version UID for backwards compatibility with 1.0.x classes. */
69      private static final long serialVersionUID = -5704199858711059732L;
70  
71      /**
72       * Name of the customer a logical file belongs to.
73       * @serial
74       */
75      private AlphaNumericText27 customer;
76  
77      /**
78       * Code of the account a logical file belongs to.
79       * @serial
80       */
81      private Kontonummer account;
82  
83      /**
84       * Code of the bank a logical file belongs to.
85       * @serial
86       */
87      private Bankleitzahl bank;
88  
89      /**
90       * Type of a logical file.
91       * @serial
92       */
93      private LogicalFileType type;
94  
95      /**
96       * Currency of a logical file.
97       * @serial
98       */
99      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 }