001    package net.sourceforge.javajson.converter;
002    
003    import java.lang.reflect.InvocationTargetException;
004    import java.util.Collection;
005    
006    import org.apache.log4j.Logger;
007    
008    import net.sourceforge.javajson.JsonArray;
009    import net.sourceforge.javajson.JsonObject;
010    
011    /**
012     * Converts java objects to json based on bean-style fields and
013     * classes/interfaces (to filter)
014     * 
015     * @author miguel de anda
016     */
017    public class Converter {
018            protected final Logger log = Logger.getLogger(getClass());
019    
020            public static final Converter instance = new Converter();
021    
022            private Converter() {
023            }
024    
025            public static Converter getInstance() {
026                    return instance;
027            }
028    
029            public Object fromJson(JsonObject json) throws ClassNotFoundException,
030                            InstantiationException, IllegalAccessException,
031                            IllegalArgumentException, InvocationTargetException {
032                    Object o = null;
033                    Class cls = Class.forName(json.getString("class"));
034                    o = cls.newInstance();
035                    Utils.fromJson(o, json);
036                    return o;
037            }
038    
039            /**
040             * Convenience method for converting objects without a predefined mapper.
041             * This method does not allow objects to be filtered in any way and will
042             * inspect every public getter and return its value, if the value is not a
043             * Number, String or Date, it will then do the conversion on that object as
044             * well. If the return type is a Collection, it will be converted to a
045             * JsonArray
046             * 
047             * @param o
048             * @return
049             * @throws SecurityException
050             * @throws IllegalArgumentException
051             * @throws NoSuchMethodException
052             * @throws IllegalAccessException
053             * @throws InvocationTargetException
054             */
055            public JsonObject toJson(Object o) throws SecurityException,
056                            IllegalArgumentException, NoSuchMethodException,
057                            IllegalAccessException, InvocationTargetException {
058                    return Mapper.DefaultMapper.toJson(o);
059            }
060    
061            /**
062             * Convenience method for converting objects without a predefined mapper.
063             * This method does not allow objects to be filtered in any way and will
064             * inspect every public getter and return its value, if the value is not a
065             * Number, String or Date, it will then do the conversion on that object as
066             * well. If the return type is a Collection, it will be converted to a
067             * JsonArray
068             * 
069             * @param o
070             * @param flat
071             *            Don't look at non basic fields (numbers, strings, dates,
072             *            boolean)
073             * @return
074             * @throws SecurityException
075             * @throws IllegalArgumentException
076             * @throws NoSuchMethodException
077             * @throws IllegalAccessException
078             * @throws InvocationTargetException
079             */
080            public JsonObject toJson(Object o, boolean flat) throws SecurityException,
081                            IllegalArgumentException, NoSuchMethodException,
082                            IllegalAccessException, InvocationTargetException {
083                    return Mapper.DefaultMapper.toJson(o, flat);
084            }
085    
086            /**
087             * Convenience method for converting objects without a predefined mapper.
088             * This method does not allow objects to be filtered in any way and will
089             * inspect every public getter and return its value, if the value is not a
090             * Number, String or Date, it will be skipped.
091             * 
092             * @param o
093             * @param cls
094             *            The class to read the fields from
095             * @return
096             * @throws SecurityException
097             * @throws IllegalArgumentException
098             * @throws NoSuchMethodException
099             * @throws IllegalAccessException
100             * @throws InvocationTargetException
101             */
102            public JsonObject toJson(Object o, Class cls) throws SecurityException,
103                            IllegalArgumentException, NoSuchMethodException,
104                            IllegalAccessException, InvocationTargetException {
105                    return Mapper.DefaultMapper.toJson(o, cls);
106            }
107    
108            /**
109             * Convenience method for converting objects without a predefined mapper.
110             * This method does not allow objects to be filtered in any way and will
111             * inspect every public getter and return its value, if the value is not a
112             * Number, String or Date, it will then do the conversion on that object as
113             * well. If the return type is a Collection, it will be converted to a
114             * JsonArray
115             * 
116             * @param o
117             * @return
118             * @throws SecurityException
119             * @throws IllegalArgumentException
120             * @throws NoSuchMethodException
121             * @throws IllegalAccessException
122             * @throws InvocationTargetException
123             */
124            public JsonArray toJsonArray(Collection c) throws SecurityException,
125                            IllegalArgumentException, NoSuchMethodException,
126                            IllegalAccessException, InvocationTargetException {
127                    return Mapper.DefaultMapper.toJsonArray(c);
128            }
129    
130            /**
131             * Convenience method for converting objects without a predefined mapper.
132             * This method does not allow objects to be filtered in any way and will
133             * inspect every public getter and return its value, if the value is not a
134             * Number, String or Date, it will then do the conversion on that object as
135             * well. If the return type is a Collection, it will be converted to a
136             * JsonArray
137             * 
138             * @param o
139             * @return
140             * @throws SecurityException
141             * @throws IllegalArgumentException
142             * @throws NoSuchMethodException
143             * @throws IllegalAccessException
144             * @throws InvocationTargetException
145             */
146            public JsonArray toJsonArray(Collection c, boolean flat) throws SecurityException,
147                            IllegalArgumentException, NoSuchMethodException,
148                            IllegalAccessException, InvocationTargetException {
149                    return Mapper.DefaultMapper.toJsonArray(c, flat);
150            }
151    
152            /**
153             * Convenience method for converting collections without a predefined
154             * mapper. This method does not allow objects to be filtered in any way and
155             * will inspect every public getter and return its value, if the value is
156             * not a Number, String or Date, it will be skipped.
157             * 
158             * @param o
159             * @param cls
160             *            The class to read the fields from
161             * @return
162             * @throws SecurityException
163             * @throws IllegalArgumentException
164             * @throws NoSuchMethodException
165             * @throws IllegalAccessException
166             * @throws InvocationTargetException
167             */
168            public JsonArray toJsonArray(Collection c, Class cls)
169                            throws SecurityException, IllegalArgumentException,
170                            NoSuchMethodException, IllegalAccessException,
171                            InvocationTargetException {
172                    return Mapper.DefaultMapper.toJsonArray(c, cls);
173            }
174    
175            /**
176             * Convenience method for converting collections without a predefined
177             * mapper. This method does not allow objects to be filtered in any way and
178             * will inspect every public getter and return its value, if the value is
179             * not a Number, String or Date, it will be skipped.
180             * 
181             * @param o
182             * @param cls
183             *            The class to read the fields from
184             * @return
185             * @throws SecurityException
186             * @throws IllegalArgumentException
187             * @throws NoSuchMethodException
188             * @throws IllegalAccessException
189             * @throws InvocationTargetException
190             */
191            public JsonArray toJsonArray(Collection c, Class cls, boolean flat)
192                            throws SecurityException, IllegalArgumentException,
193                            NoSuchMethodException, IllegalAccessException,
194                            InvocationTargetException {
195                    return Mapper.DefaultMapper.toJsonArray(c, cls, flat);
196            }
197    }