KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > jodd > bean > BeanLoaderManager


1 // Copyright (c) 2003-2007, Jodd Team (jodd.sf.net). All Rights Reserved.
2

3 package jodd.bean;
4
5 import java.util.HashMap JavaDoc;
6 import java.util.Iterator JavaDoc;
7 import java.util.Map JavaDoc;
8
9 import jodd.bean.loader.*;
10
11 /**
12  * Manager for {@link BeanLoader} instances that populates java beans from various sources.
13  */

14 public class BeanLoaderManager {
15
16     // ---------------------------------------------------------------- manager
17

18     private static Map JavaDoc loaders = new HashMap JavaDoc();
19
20     static {
21         registerDefaults();
22     }
23
24     /**
25      * Unregister all loaders.
26      */

27     public static void unregisterAll() {
28         loaders.clear();
29     }
30
31
32     /**
33      * Registers default set of loaders.
34      * <p>
35      *
36      * Important note: class that doesn't come with JDK is first being examined
37      * for existence. Examination is done with <code>Class.forName()</code>
38      * If class exists, it will be registered. If not, it will be skipped.
39      *
40      * @see #register
41      */

42     public static void registerDefaults() {
43         register(java.util.Map JavaDoc.class, new MapBeanLoader());
44         register(java.sql.ResultSet JavaDoc.class, new ResultSetBeanLoader());
45         try {
46             Class.forName("javax.servlet.http.HttpServletRequest"); // check if exists
47
register(javax.servlet.http.HttpServletRequest JavaDoc.class, new RequestBeanLoader());
48             Class.forName("javax.servlet.http.HttpSession");
49             register(javax.servlet.http.HttpSession JavaDoc.class, new SessionBeanLoader());
50             Class.forName("javax.servlet.ServletContext");
51             register(javax.servlet.ServletContext JavaDoc.class, new ServletContextBeanLoader());
52             register(jodd.servlet.upload.MultipartRequest.class, new MultipartRequestBeanLoader());
53             register(jodd.servlet.upload.MultipartRequestWrapper.class, new MultipartRequestWrapperBeanLoader());
54         } catch (ClassNotFoundException JavaDoc cnfex) {
55             // ignore
56
}
57     }
58
59     /**
60      * Registers loader for an objects of specific type.
61      *
62      * @param type type of object that will be used by loader to populate bean.
63      * @param load loader object that populates a bean.
64      *
65      * @see #registerDefaults
66      */

67     public static void register(Class JavaDoc type, BeanLoader load) {
68         loaders.put(type, load);
69     }
70
71     public static void unregister(Class JavaDoc type) {
72         loaders.remove(type);
73     }
74
75
76     // ---------------------------------------------------------------- lookup
77

78
79     /**
80      * Returns loader for the specific object type.
81      *
82      * @param type type of object that will be used by loader to populate bean.
83      *
84      * @return loader for objects of specific type, <code>null</code> if no loader found.
85      */

86     public static BeanLoader lookup(Class JavaDoc type) {
87         return (BeanLoader) loaders.get(type);
88     }
89
90     /**
91      * Performs more throughly search for bean loader. It examines all available
92      * loaders and returns the first that matches the object type.
93      */

94     public static BeanLoader lookup(Object JavaDoc source) {
95         BeanLoader load = lookup(source.getClass());
96         if (load == null) { // class not found, scan for instanceof matching
97
Iterator JavaDoc it = loaders.keySet().iterator();
98             while (it.hasNext()) {
99                 Class JavaDoc key = (Class JavaDoc) it.next();
100                 if (key.isInstance(source)) {
101                     load = lookup(key);
102                     break;
103                 }
104             }
105         }
106         return load;
107     }
108
109     // ---------------------------------------------------------------- loader
110

111     /**
112      * Populates bean from given object by using a loader for given objects type.
113      */

114     public static void load(Object JavaDoc bean, Object JavaDoc source) {
115         BeanLoader loader = lookup(source);
116         if (loader == null) {
117             throw new BeanException("No registered loader for source: " + source.getClass().getName());
118         }
119         loader.load(bean, source);
120     }
121
122     public static void load(Object JavaDoc bean, Object JavaDoc source, Class JavaDoc type) {
123         BeanLoader loader = lookup(type);
124         if (loader == null) {
125             throw new BeanException("No registered loader for type: " + type.getName());
126         }
127         loader.load(bean, source);
128     }
129
130
131     public static void load(Object JavaDoc bean, Object JavaDoc source, BeanLoader loader) {
132         loader.load(bean, source);
133     }
134 }
Popular Tags