View Javadoc

1   package org.weda.converter.impl;
2   
3   import java.sql.Time;
4   import java.sql.Timestamp;
5   import java.text.ParseException;
6   import java.text.SimpleDateFormat;
7   import java.util.Date;
8   import java.util.HashMap;
9   import java.util.Map;
10  import org.weda.converter.ValueTypeConverter;
11  import org.weda.converter.ValueTypeConverterException;
12  
13  /**Цель: преобразование строки к дате и наооборот
14   *
15   * @author tim
16   */
17  public class DateConverter extends AbstractConverter {
18      private final static ThreadLocal formatters = 
19          new ThreadLocal(){
20              protected Object initialValue(){
21                  return new HashMap();
22              }
23          };
24      
25      public Object convert(Class toType, Object value, String pattern) 
26          throws ValueTypeConverterException 
27      {
28          if (String.class.equals(toType) && value instanceof Date){
29              if (pattern==null)
30                  return value.toString();
31              else{
32                  SimpleDateFormat formatter = getFormatter(pattern);
33                  return formatter.format(value);
34              }
35          }else if (   Date.class.isAssignableFrom(toType) 
36                    && value instanceof String)
37          {
38              try{
39                  Date date = getFormatter(pattern).parse((String)value);
40                  if (Date.class.equals(toType)){
41                      return date;
42                  }else if (Timestamp.class.equals(toType)){
43                      return new Timestamp(date.getTime());
44                  }else if (java.sql.Date.class.equals(toType)){
45                      return new java.sql.Date(date.getTime());
46                  }else if (Time.class.equals(toType)){
47                      return new Time(date.getTime()%86400000);
48                  }else
49                      throw new ValueTypeConverterException(
50                          getMessages().format(
51                              "UnknownDateType"
52                              , date.getClass().getName()));
53              }catch(ParseException e){
54                  throw new ValueTypeConverterException(
55                      getMessages().format(
56                          "ConversionError"
57                          , value, toType.getName(), pattern==null?"":pattern)
58                      , e);
59              }
60          }else
61              throw new ValueTypeConverterException(
62                  getMessages().format(
63                      "UnknownToType"
64                      , toType.getName(), value.getClass().getName()));
65      }
66      
67      private final static SimpleDateFormat getFormatter(String pattern) {
68          SimpleDateFormat formatter = 
69              (SimpleDateFormat)((Map)formatters.get()).get(pattern);
70          if (formatter==null){
71              if (pattern==null)
72                  formatter = new SimpleDateFormat();
73              else
74                  formatter = new SimpleDateFormat(pattern);
75              ((Map)formatters.get()).put(pattern, formatter);
76          }
77          return formatter;
78      }
79      
80      
81  }