blob: 89f8a4ed41c8dbbe52c50f661d0d38bdac8aa385 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.converter;
import java.util.Collection;
import java.util.Iterator;
import org.apache.camel.Converter;
import org.apache.camel.Exchange;
import org.apache.camel.util.ObjectHelper;
/**
* Some core java.lang based <a
* href="http://camel.apache.org/type-converter.html">Type Converters</a>
*
* @version
*/
@Converter
public final class ObjectConverter {
/**
* Utility classes should not have a public constructor.
*/
private ObjectConverter() {
}
public static boolean isCollection(Object value) {
return value instanceof Collection || (value != null && value.getClass().isArray());
}
/**
* Converts the given value to a boolean, handling strings or Boolean
* objects; otherwise returning false if the value could not be converted to
* a boolean
*/
@Converter
public static boolean toBool(Object value) {
Boolean answer = toBoolean(value);
return answer != null && answer;
}
/**
* Converts the given value to a Boolean, handling strings or Boolean
* objects; otherwise returning null if the value cannot be converted to a
* boolean
*/
@Converter
public static Boolean toBoolean(Object value) {
return ObjectHelper.toBoolean(value);
}
/**
* Creates an iterator over the value
*/
@SuppressWarnings("rawtypes")
@Converter
public static Iterator iterator(Object value) {
return ObjectHelper.createIterator(value);
}
/**
* Returns the converted value, or null if the value is null
*/
@Converter
public static Byte toByte(Object value) {
if (value instanceof Byte) {
return (Byte) value;
} else if (value instanceof Number) {
Number number = (Number) value;
return number.byteValue();
} else if (value instanceof String) {
return Byte.valueOf((String) value);
} else {
return null;
}
}
@Converter
public static char[] toCharArray(String value) {
return value.toCharArray();
}
@Converter
public static char toChar(String value) {
// must be 1 length string
if (value == null || value.length() != 1) {
throw new IllegalArgumentException("String must have exactly a length of 1: " + value);
}
return value.toCharArray()[0];
}
@Converter
public static String fromCharArray(char[] value) {
return new String(value);
}
/**
* Returns the converted value, or null if the value is null
*/
@SuppressWarnings("rawtypes")
@Converter
public static Class toClass(Object value, Exchange exchange) {
if (value instanceof Class) {
return (Class) value;
} else if (value instanceof String) {
// prefer to use class resolver API
if (exchange != null) {
return exchange.getContext().getClassResolver().resolveClass((String) value);
} else {
return ObjectHelper.loadClass((String) value);
}
} else {
return null;
}
}
/**
* Returns the converted value, or null if the value is null
*/
@Converter
public static Short toShort(Object value) {
if (value instanceof Short) {
return (Short) value;
} else if (value instanceof Number) {
if (value.equals(Float.NaN) || value.equals(Double.NaN)) {
return null;
}
Number number = (Number) value;
return number.shortValue();
} else if (value instanceof String) {
return Short.valueOf((String) value);
} else {
return null;
}
}
/**
* Returns the converted value, or null if the value is null
*/
@Converter
public static Integer toInteger(Object value) {
if (value instanceof Integer) {
return (Integer) value;
} else if (value instanceof Number) {
if (value.equals(Float.NaN) || value.equals(Double.NaN)) {
return null;
}
Number number = (Number) value;
return number.intValue();
} else if (value instanceof String) {
return Integer.valueOf((String) value);
} else {
return null;
}
}
/**
* Returns the converted value, or null if the value is null
*/
@Converter
public static Long toLong(Object value) {
if (value instanceof Long) {
return (Long) value;
} else if (value instanceof Number) {
if (value.equals(Float.NaN) || value.equals(Double.NaN)) {
return null;
}
Number number = (Number) value;
return number.longValue();
} else if (value instanceof String) {
return Long.valueOf((String) value);
} else {
return null;
}
}
/**
* Returns the converted value, or null if the value is null
*/
@Converter
public static Float toFloat(Object value) {
if (value instanceof Float) {
return (Float) value;
} else if (value instanceof Number) {
if (value.equals(Double.NaN)) {
return null;
}
Number number = (Number) value;
return number.floatValue();
} else if (value instanceof String) {
return Float.valueOf((String) value);
} else {
return null;
}
}
/**
* Returns the converted value, or null if the value is null
*/
@Converter
public static Double toDouble(Object value) {
if (value instanceof Double) {
return (Double) value;
} else if (value instanceof Number) {
if (value.equals(Float.NaN)) {
return null;
}
Number number = (Number) value;
return number.doubleValue();
} else if (value instanceof String) {
return Double.valueOf((String) value);
} else {
return null;
}
}
// add fast type converters from most common used
@Converter
public static String toString(Integer value) {
return value.toString();
}
@Converter
public static String toString(Long value) {
return value.toString();
}
@Converter
public static String toString(Boolean value) {
return value.toString();
}
@Converter
public static String toString(StringBuffer value) {
return value.toString();
}
@Converter
public static String toString(StringBuilder value) {
return value.toString();
}
@Converter
public static Integer toInteger(String value) {
return Integer.valueOf(value);
}
@Converter
public static Long toLong(String value) {
return Long.valueOf(value);
}
@Converter
public static Float toFloat(String value) {
return Float.valueOf(value);
}
@Converter
public static Double toDouble(String value) {
return Double.valueOf(value);
}
@Converter
public static Boolean toBoolean(String value) {
return "true".equalsIgnoreCase(value.toString()) ? Boolean.TRUE : Boolean.FALSE;
}
}