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.Arrays;
020 import java.util.Collection;
021 import java.util.Collections;
022 import java.util.Iterator;
023
024 import org.apache.camel.Converter;
025
026 /**
027 * Some core java.lang based <a
028 * href="http://activemq.apache.org/camel/type-converter.html">Type Converters</a>
029 *
030 * @version $Revision: 563607 $
031 */
032 @Converter
033 public class ObjectConverter {
034
035 /**
036 * Utility classes should not have a public constructor.
037 */
038 private ObjectConverter() {
039 }
040
041 public static boolean isCollection(Object value) {
042 // TODO we should handle primitive array types?
043 return value instanceof Collection || (value != null && value.getClass().isArray());
044 }
045
046 /**
047 * Creates an iterator over the value if the value is a collection, an
048 * Object[] or a primitive type array; otherwise to simplify the caller's
049 * code, we just create a singleton collection iterator over a single value
050 */
051 @Converter
052 public static Iterator iterator(Object value) {
053 if (value == null) {
054 return Collections.EMPTY_LIST.iterator();
055 } else if (value instanceof Collection) {
056 Collection collection = (Collection)value;
057 return collection.iterator();
058 } else if (value.getClass().isArray()) {
059 // TODO we should handle primitive array types?
060 return Arrays.asList(value).iterator();
061 } else {
062 return Collections.singletonList(value).iterator();
063 }
064 }
065
066 /**
067 * Converts the given value to a boolean, handling strings or Boolean
068 * objects; otherwise returning false if the value could not be converted to
069 * a boolean
070 */
071 @Converter
072 public static boolean toBool(Object value) {
073 Boolean answer = toBoolean(value);
074 if (answer != null) {
075 return answer.booleanValue();
076 }
077 return false;
078 }
079
080 /**
081 * Converts the given value to a Boolean, handling strings or Boolean
082 * objects; otherwise returning null if the value cannot be converted to a
083 * boolean
084 */
085 @Converter
086 public static Boolean toBoolean(Object value) {
087 if (value instanceof Boolean) {
088 return (Boolean)value;
089 }
090 if (value instanceof String) {
091 return "true".equalsIgnoreCase(value.toString()) ? Boolean.TRUE : Boolean.FALSE;
092 }
093 return null;
094 }
095
096 /**
097 * Returns the boolean value, or null if the value is null
098 */
099 @Converter
100 public static Boolean toBoolean(Boolean value) {
101 if (value != null) {
102 return value.booleanValue();
103 }
104 return false;
105 }
106
107 }