KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > directwebremoting > convert > ObjectConverter


1 /*
2  * Copyright 2005 Joe Walker
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16 package org.directwebremoting.convert;
17
18 import java.lang.reflect.Field JavaDoc;
19 import java.lang.reflect.Modifier JavaDoc;
20 import java.util.HashMap JavaDoc;
21 import java.util.Map JavaDoc;
22
23 import org.directwebremoting.extend.Converter;
24 import org.directwebremoting.extend.InboundContext;
25 import org.directwebremoting.extend.MarshallException;
26 import org.directwebremoting.extend.Property;
27 import org.directwebremoting.extend.TypeHintContext;
28 import org.directwebremoting.impl.FieldProperty;
29
30 /**
31  * Convert a Javascript associative array into a JavaBean
32  * @author Joe Walker [joe at getahead dot ltd dot uk]
33  */

34 public class ObjectConverter extends BasicObjectConverter implements Converter
35 {
36     /**
37      * Do we force accessibility for private fields
38      * @param force "true|false" to set the force accessibility flag
39      */

40     public void setForce(String JavaDoc force)
41     {
42         this.force = Boolean.valueOf(force).booleanValue();
43     }
44
45     /* (non-Javadoc)
46      * @see org.directwebremoting.extend.NamedConverter#getPropertyMapFromObject(java.lang.Object, boolean, boolean)
47      */

48     public Map JavaDoc getPropertyMapFromObject(Object JavaDoc example, boolean readRequired, boolean writeRequired) throws MarshallException
49     {
50         Class JavaDoc clazz = example.getClass();
51         return getPropertyMapFromClass(clazz, readRequired, writeRequired);
52     }
53
54     /* (non-Javadoc)
55      * @see org.directwebremoting.extend.NamedConverter#getPropertyMap(java.lang.Class, boolean, boolean)
56      */

57     public Map JavaDoc getPropertyMapFromClass(Class JavaDoc type, boolean readRequired, boolean writeRequired)
58     {
59         Map JavaDoc allFields = new HashMap JavaDoc();
60
61         while (type != Object JavaDoc.class)
62         {
63             Field JavaDoc[] fields = type.getDeclaredFields();
64
65             fieldLoop:
66             for (int i = 0; i < fields.length; i++)
67             {
68                 Field JavaDoc field = fields[i];
69                 String JavaDoc name = field.getName();
70
71                 // We don't marshall getClass()
72
if ("class".equals(name))
73                 {
74                     continue fieldLoop;
75                 }
76
77                 // Access rules mean we might not want to do this one
78
if (!isAllowedByIncludeExcludeRules(name))
79                 {
80                     continue fieldLoop;
81                 }
82
83                 if (!Modifier.isPublic(field.getModifiers()))
84                 {
85                     if (force)
86                     {
87                         field.setAccessible(true);
88                     }
89                     else
90                     {
91                         continue fieldLoop;
92                     }
93                 }
94
95                 allFields.put(name, new FieldProperty(field));
96             }
97
98             type = type.getSuperclass();
99         }
100
101         return allFields;
102     }
103
104     /* (non-Javadoc)
105      * @see org.directwebremoting.convert.BasicObjectConverter#createTypeHintContext(org.directwebremoting.extend.InboundContext, org.directwebremoting.extend.Property)
106      */

107     protected TypeHintContext createTypeHintContext(InboundContext inctx, Property property)
108     {
109         return inctx.getCurrentTypeHintContext();
110     }
111
112     /**
113      * Do we force accessibillity for hidden fields
114      */

115     private boolean force = false;
116 }
117
Popular Tags