1 package de.keepondreaming.xml;
2
3 import java.lang.reflect.Method;
4 import java.text.ParseException;
5 import java.text.SimpleDateFormat;
6 import java.util.Date;
7 import java.util.HashMap;
8 import java.util.Map;
9
10 import de.keepondreaming.xml.util.Util;
11
12 /***
13 * Transforms Date strings to long values
14 *
15 *
16 * $Author: wintermond $
17 * $Date: 2005/07/10 18:39:24 $
18 * $Log: DateHandler.java,v $
19 * Revision 1.1 2005/07/10 18:39:24 wintermond
20 * initial
21 *
22 */
23 public class DateHandler
24 {
25 /***
26 * {@link SimpleDateFormat} objects are costly to create, so cache them
27 */
28 private Map<String, SimpleDateFormat> dateFormatersM = new HashMap<String, SimpleDateFormat>();
29
30 /***
31 * Needed to obtain mapping informations
32 */
33 private AnnotationStrategy parserStrategyM;
34
35 /***
36 * Default constructor
37 *
38 * @param parserStrategy
39 */
40 public DateHandler(AnnotationStrategy parserStrategy)
41 {
42 parserStrategyM = parserStrategy;
43 }
44
45
46 /***
47 * Creates a {@link java.util.Date}, {@link java.sql.Date} or {@link java.sql.Timestamp} object
48 * based upon the <code>value</code>
49 *
50 * @param method
51 * @param value
52 *
53 * @return a {@link java.util.Date}, {@link java.sql.Date} or {@link java.sql.Timestamp} object
54 */
55 public Date getDateString(Method method, String value) throws ParseException
56 {
57 Date result = null;
58 String formatString = parserStrategyM.getDateFormatPattern(method);
59 if(formatString != null)
60 {
61 formatString = formatString.trim();
62 SimpleDateFormat formater = dateFormatersM.get(formatString);
63 if(formater == null)
64 {
65 formater = new SimpleDateFormat(formatString);
66 dateFormatersM.put(formatString, formater);
67 try
68 {
69 long valueAsLong = formater.parse(value).getTime();
70 result = (Date) Util.createObject(method.getReturnType(), String.valueOf(valueAsLong));
71 }
72 catch (ParseException e)
73 {
74 System.err.println("Error while applying pattern [" + formatString + "] on value [" + value + "]");
75 throw e;
76 }
77
78 }
79 }
80 else
81 {
82 result = (Date) Util.createObject(method.getReturnType(), value);
83 }
84
85 return result;
86 }
87 }