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 | } |