001    /**
002     *
003     * Licensed to the Apache Software Foundation (ASF) under one or more
004     * contributor license agreements.  See the NOTICE file distributed with
005     * this work for additional information regarding copyright ownership.
006     * The ASF licenses this file to You under the Apache License, Version 2.0
007     * (the "License"); you may not use this file except in compliance with
008     * the License.  You may obtain a copy of the License at
009     *
010     * http://www.apache.org/licenses/LICENSE-2.0
011     *
012     * Unless required by applicable law or agreed to in writing, software
013     * distributed under the License is distributed on an "AS IS" BASIS,
014     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    package org.apache.camel.converter;
019    
020    import org.apache.camel.Converter;
021    
022    import java.util.Arrays;
023    import java.util.Collection;
024    import java.util.Collections;
025    import java.util.Iterator;
026    
027    /**
028     * Some core java.lang based
029     * <a href="http://activemq.apache.org/camel/type-converter.html">Type Converters</a>
030     *
031     * @version $Revision: 544115 $
032     */
033    @Converter
034    public class ObjectConverter {
035        public static boolean isCollection(Object value) {
036            // TODO we should handle primitive array types?
037            return value instanceof Collection || (value != null && value.getClass().isArray());
038        }
039    
040        /**
041         * Creates an iterator over the value if the value is a collection, an Object[] or a primitive type array; otherwise
042         * to simplify the caller's code, we just create a singleton collection iterator over a single value
043         */
044        @Converter
045        public static Iterator iterator(Object value) {
046            if (value == null) {
047                return Collections.EMPTY_LIST.iterator();
048            }
049            else if (value instanceof Collection) {
050                Collection collection = (Collection) value;
051                return collection.iterator();
052            }
053            else if (value.getClass().isArray()) {
054                // TODO we should handle primitive array types?
055                return Arrays.asList(value).iterator();
056            }
057            else {
058                return Collections.singletonList(value).iterator();
059            }
060        }
061    
062        /**
063         * Converts the given value to a boolean, handling strings or Boolean objects;
064         * otherwise returning false if the value could not be converted to a boolean
065         */
066        @Converter
067        public static boolean toBool(Object value) {
068            Boolean answer = toBoolean(value);
069            if (answer != null) {
070                return answer.booleanValue();
071            }
072            return false;
073        }
074    
075        /**
076         * Converts the given value to a Boolean, handling strings or Boolean objects;
077         * otherwise returning null if the value cannot be converted to a boolean
078         */
079        @Converter
080        public static Boolean toBoolean(Object value) {
081            if (value instanceof Boolean) {
082                return (Boolean) value;
083            }
084            if (value instanceof String) {
085                return "true".equalsIgnoreCase(value.toString()) ? Boolean.TRUE : Boolean.FALSE;
086            }
087            return null;
088        }
089    }