/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.core.util;
import org.mule.runtime.api.meta.NameableObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ObjectUtils extends org.apache.commons.lang.ObjectUtils {
/** logger used by this class */
protected static final Logger logger = LoggerFactory.getLogger(ObjectUtils.class);
/**
* Like {@link #identityToString(Object)} but without the object's full package name.
*
* @param obj the object for which the identity description is to be generated
* @return the object's identity description in the form of "ClassName@IdentityCode" or "null" if the argument was null.
*/
public static String identityToShortString(Object obj) {
if (obj == null) {
return "null";
} else {
return new StringBuilder(40).append(ClassUtils.getSimpleName(obj.getClass())).append('@')
.append(Integer.toHexString(System.identityHashCode(obj))).toString();
}
}
/**
* Gets a String from a value in a null-safe manner.
* <p/>
*
* @param answer the object value
* @param defaultValue the default to use if null or of incorrect type
* @return the value as a String, or the defaultValue
*/
public static String getString(final Object answer, String defaultValue) {
if (answer != null) {
return answer.toString();
} else {
return defaultValue;
}
}
/**
* Gets a boolean from a value in a null-safe manner.
* <p/>
*
* @param answer the object value
* @param defaultValue the default to use if null or of incorrect type
* @return the value as a boolean, or the defaultValue
*/
public static boolean getBoolean(final Object answer, Boolean defaultValue) {
if (answer != null) {
if (answer instanceof Boolean) {
return (Boolean) answer;
} else if (answer instanceof String) {
return Boolean.valueOf((String) answer);
} else if (answer instanceof Number) {
Number n = (Number) answer;
return (n.intValue() > 0) ? Boolean.TRUE : Boolean.FALSE;
} else {
if (logger.isWarnEnabled()) {
logger
.warn("Value exists but cannot be converted to boolean: " + answer + ", returning default value: " + defaultValue);
}
return defaultValue;
}
}
return defaultValue;
}
/**
* Gets a byte from a value in a null-safe manner.
* <p/>
*
* @param answer the object value
* @param defaultValue the default to use if null or of incorrect type
* @return the value as a byte, or the defaultValue
*/
public static byte getByte(final Object answer, Byte defaultValue) {
if (answer == null) {
return defaultValue;
} else if (answer instanceof Number) {
return ((Number) answer).byteValue();
} else if (answer instanceof String) {
try {
return Byte.valueOf((String) answer);
} catch (NumberFormatException e) {
// handled below
}
}
if (logger.isWarnEnabled()) {
logger.warn("Value exists but cannot be converted to byte: " + answer + ", returning default value: " + defaultValue);
}
return defaultValue;
}
/**
* Gets a short from a value in a null-safe manner.
* <p/>
*
* @param answer the object value
* @param defaultValue the default to use if null or of incorrect type
* @return the value as a short, or the defaultValue
*/
public static short getShort(final Object answer, Short defaultValue) {
if (answer == null) {
return defaultValue;
} else if (answer instanceof Number) {
return ((Number) answer).shortValue();
} else if (answer instanceof String) {
try {
return Short.valueOf((String) answer);
} catch (NumberFormatException e) {
// handled below
}
}
if (logger.isWarnEnabled()) {
logger.warn("Value exists but cannot be converted to short: " + answer + ", returning default value: " + defaultValue);
}
return defaultValue;
}
/**
* Gets a int from a value in a null-safe manner.
* <p/>
*
* @param answer the object value
* @param defaultValue the default to use if null or of incorrect type
* @return the value as a int, or the defaultValue
*/
public static int getInt(final Object answer, Integer defaultValue) {
if (answer == null) {
return defaultValue;
} else if (answer instanceof Number) {
return ((Number) answer).intValue();
} else if (answer instanceof String) {
try {
return Integer.valueOf((String) answer);
} catch (NumberFormatException e) {
// handled below
}
}
if (logger.isWarnEnabled()) {
logger.warn("Value exists but cannot be converted to int: " + answer + ", returning default value: " + defaultValue);
}
return defaultValue;
}
/**
* Gets a long from a value in a null-safe manner.
* <p/>
*
* @param answer the object value
* @param defaultValue the default to use if null or of incorrect type
* @return the value as a long, or the defaultValue
*/
public static long getLong(final Object answer, Long defaultValue) {
if (answer == null) {
return defaultValue;
} else if (answer instanceof Number) {
return ((Number) answer).longValue();
} else if (answer instanceof String) {
try {
return Long.valueOf((String) answer);
} catch (NumberFormatException e) {
// handled below
}
}
if (logger.isWarnEnabled()) {
logger.warn("Value exists but cannot be converted to long: " + answer + ", returning default value: " + defaultValue);
}
return defaultValue;
}
/**
* Gets a float from a value in a null-safe manner.
* <p/>
*
* @param answer the object value
* @param defaultValue the default to use if null or of incorrect type
* @return the value as a float, or the defaultValue
*/
public static float getFloat(final Object answer, Float defaultValue) {
if (answer == null) {
return defaultValue;
} else if (answer instanceof Number) {
return ((Number) answer).floatValue();
} else if (answer instanceof String) {
try {
return Float.valueOf((String) answer);
} catch (NumberFormatException e) {
// handled below
}
}
if (logger.isWarnEnabled()) {
logger.warn("Value exists but cannot be converted to float: " + answer + ", returning default value: " + defaultValue);
}
return defaultValue;
}
/**
* Gets a double from a value in a null-safe manner.
* <p/>
*
* @param answer the object value
* @param defaultValue the default to use if null or of incorrect type
* @return the value as a double, or the defaultValue
*/
public static double getDouble(final Object answer, Double defaultValue) {
if (answer == null) {
return defaultValue;
} else if (answer instanceof Number) {
return ((Number) answer).doubleValue();
} else if (answer instanceof String) {
try {
return Double.valueOf((String) answer);
} catch (NumberFormatException e) {
// handled below
}
}
if (logger.isWarnEnabled()) {
logger.warn("Value exists but cannot be converted to double: " + answer + ", returning default value: " + defaultValue);
}
return defaultValue;
}
public static String toString(Object obj) {
if (obj == null) {
return "";
}
String str = obj.getClass().getName();
if (obj instanceof NameableObject) {
str += String.format(" '%s'", ((NameableObject) obj).getName());
}
return str;
}
}