001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.camel.converter;
018    
019    import java.util.Collection;
020    import java.util.Iterator;
021    
022    import org.apache.camel.Converter;
023    import org.apache.camel.util.ObjectHelper;
024    
025    /**
026     * Some core java.lang based <a
027     * href="http://camel.apache.org/type-converter.html">Type Converters</a>
028     *
029     * @version $Revision: 747062 $
030     */
031    @Converter
032    public final class ObjectConverter {
033    
034        /**
035         * Utility classes should not have a public constructor.
036         */
037        private ObjectConverter() {
038        }
039    
040        public static boolean isCollection(Object value) {
041            // TODO we should handle primitive array types?
042            return value instanceof Collection || (value != null && value.getClass().isArray());
043        }
044    
045        /**
046         * Converts the given value to a boolean, handling strings or Boolean
047         * objects; otherwise returning false if the value could not be converted to
048         * a boolean
049         */
050        @Converter
051        public static boolean toBool(Object value) {
052            Boolean answer = toBoolean(value);
053            return answer != null && answer;
054        }
055    
056        /**
057         * Converts the given value to a Boolean, handling strings or Boolean
058         * objects; otherwise returning null if the value cannot be converted to a
059         * boolean
060         */
061        @Converter
062        public static Boolean toBoolean(Object value) {
063            return ObjectHelper.toBoolean(value);
064        }
065    
066        /**
067         * Returns the boolean value, or null if the value is null
068         */
069        @Converter
070        public static Boolean toBoolean(Boolean value) {
071            if (value != null) {
072                return value;
073            }
074            return Boolean.FALSE;
075        }
076    
077        /**
078         * Creates an iterator over the value
079         */
080        @SuppressWarnings("unchecked")
081        @Converter
082        public static Iterator iterator(Object value) {
083            return ObjectHelper.createIterator(value);
084        }
085        
086        
087        /**
088         * Returns the converted value, or null if the value is null
089         */
090        @Converter
091        public static Byte toByte(Object value) {
092            if (value instanceof Byte) {
093                return (Byte) value;
094            } else if (value instanceof Number) {
095                Number number = (Number) value;
096                return number.byteValue();
097            } else if (value instanceof String) {
098                return Byte.valueOf((String) value);
099            } else {
100                return null;
101            }
102        }
103    
104        @Converter
105        public static byte[] toByteArray(String value) {
106            return value.getBytes();
107        }
108    
109        @Converter
110        public static char[] toCharArray(String value) {
111            return value.toCharArray();
112        }
113    
114        @Converter
115        public static String fromCharArray(char[] value) {
116            return new String(value);
117        }
118    
119        /**
120         * Returns the converted value, or null if the value is null
121         */
122        @Converter
123        public static Short toShort(Object value) {
124            if (value instanceof Short) {
125                return (Short) value;
126            } else if (value instanceof Number) {
127                Number number = (Number) value;
128                return number.shortValue();
129            } else if (value instanceof String) {
130                return Short.valueOf((String) value);
131            } else {
132                return null;
133            }
134        }
135    
136        /**
137         * Returns the converted value, or null if the value is null
138         */
139        @Converter
140        public static Integer toInteger(Object value) {
141            if (value instanceof Integer) {
142                return (Integer) value;
143            } else if (value instanceof Number) {
144                Number number = (Number) value;
145                return number.intValue();
146            } else if (value instanceof String) {
147                return Integer.valueOf((String) value);
148            } else {
149                return null;
150            }
151        }
152    
153        /**
154         * Returns the converted value, or null if the value is null
155         */
156        @Converter
157        public static Long toLong(Object value) {
158            if (value instanceof Long) {
159                return (Long) value;
160            } else if (value instanceof Number) {
161                Number number = (Number) value;
162                return number.longValue();
163            } else if (value instanceof String) {
164                return Long.valueOf((String) value);
165            } else {
166                return null;
167            }
168        }
169    
170        /**
171         * Returns the converted value, or null if the value is null
172         */
173        @Converter
174        public static Float toFloat(Object value) {
175            if (value instanceof Float) {
176                return (Float) value;
177            } else if (value instanceof Number) {
178                Number number = (Number) value;
179                return number.floatValue();
180            } else if (value instanceof String) {
181                return Float.valueOf((String) value);
182            } else {
183                return null;
184            }
185        }
186    
187        /**
188         * Returns the converted value, or null if the value is null
189         */
190        @Converter
191        public static Double toDouble(Object value) {
192            if (value instanceof Double) {
193                return (Double) value;
194            } else if (value instanceof Number) {
195                Number number = (Number) value;
196                return number.doubleValue();
197            } else if (value instanceof String) {
198                return Double.valueOf((String) value);
199            } else {
200                return null;
201            }
202        }
203    
204    }