01: // Copyright (c) 2003-2007, Jodd Team (jodd.sf.net). All Rights Reserved.
02:
03: package jodd.datetime;
04:
05: import jodd.datetime.converter.CalendarConverter;
06: import jodd.datetime.converter.DateConverter;
07: import jodd.datetime.converter.DateTimeStampConverter;
08: import jodd.datetime.converter.GregorianCalendarConverter;
09: import jodd.datetime.converter.JdtConverter;
10: import jodd.datetime.converter.SqlDateConverter;
11: import jodd.datetime.converter.SqlTimestampConverter;
12:
13: import java.util.HashMap;
14: import java.util.Calendar;
15: import java.util.Map;
16:
17: /**
18: * Manager for {@link JdtConverter} instances.
19: * @see #registerDefaults()
20: */
21: public class JdtConverterManager {
22:
23: // ---------------------------------------------------------------- manager
24:
25: private static Map<Class, JdtConverter> converters = new HashMap<Class, JdtConverter>();
26:
27: static {
28: registerDefaults();
29: }
30:
31: /**
32: * Unregister all converters.
33: */
34: public static void unregisterAll() {
35: converters.clear();
36: }
37:
38: /**
39: * Registers default set of converters.
40: * @see #register(Class, jodd.datetime.converter.JdtConverter)
41: */
42: public static void registerDefaults() {
43: register(DateTimeStamp.class, new DateTimeStampConverter());
44: register(Calendar.class, new CalendarConverter());
45: register(java.util.GregorianCalendar.class,
46: new GregorianCalendarConverter());
47: register(java.util.Date.class, new DateConverter());
48: register(java.sql.Date.class, new SqlDateConverter());
49: register(java.sql.Timestamp.class, new SqlTimestampConverter());
50: }
51:
52: /**
53: * Registers converter for an objects of specific type.
54:
55: * @see #registerDefaults()
56: */
57: public static void register(Class type, JdtConverter converter) {
58: converters.put(type, converter);
59: }
60:
61: public static void unregister(Class type) {
62: converters.remove(type);
63: }
64:
65: // ---------------------------------------------------------------- lookup
66:
67: /**
68: * Returns converter for the specific object type.
69: * @return converter instance, <code>null</code> if nothing found.
70: */
71: public static JdtConverter lookup(Class type) {
72: return converters.get(type);
73: }
74:
75: /**
76: * Performs more throughly search for converter loader. It examines all available
77: * converters and returns the first that matches the object type.
78: */
79: public static JdtConverter lookup(Object source) {
80: JdtConverter converter = lookup(source.getClass());
81: if (converter == null) { // class not found, scan for instanceof matching
82: for (Class key : converters.keySet()) {
83: if (key.isInstance(source)) {
84: converter = lookup(key);
85: break;
86: }
87: }
88: }
89: return converter;
90: }
91:
92: }
|