blob: d74a458122b4e3395feac2fd2c75661f1d9d7cd4 [file] [log] [blame]
/*
* Copyright (c) 2007, 2009, 2011, 2012, 2015 Eike Stepper (Berlin, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.net4j.internal.jms.util;
import org.eclipse.net4j.jms.JMSProtocolConstants;
import org.eclipse.net4j.util.io.ExtendedDataInputStream;
import org.eclipse.net4j.util.io.ExtendedDataOutputStream;
import javax.jms.MessageFormatException;
import java.io.IOException;
public final class TypeUtil
{
private TypeUtil()
{
}
public static boolean getBoolean(Object value) throws MessageFormatException
{
if (value instanceof Boolean)
{
return (Boolean)value;
}
else if (value instanceof String)
{
return Boolean.valueOf((String)value);
}
else if (value == null)
{
throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
}
throw new MessageFormatException(conversionProblem(boolean.class, value));
}
public static byte getByte(Object value) throws MessageFormatException
{
if (value instanceof Byte)
{
return (Byte)value;
}
else if (value instanceof String)
{
return Byte.parseByte((String)value);
}
else if (value == null)
{
throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
}
throw new MessageFormatException(conversionProblem(byte.class, value));
}
public static short getShort(Object value) throws MessageFormatException
{
if (value instanceof Short)
{
return (Short)value;
}
else if (value instanceof Byte)
{
return (Byte)value;
}
else if (value instanceof String)
{
return Short.parseShort((String)value);
}
else if (value == null)
{
throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
}
throw new MessageFormatException(conversionProblem(short.class, value));
}
public static char getChar(Object value) throws MessageFormatException
{
if (value instanceof Character)
{
return (Character)value;
}
else if (value == null)
{
throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
}
throw new MessageFormatException(conversionProblem(char.class, value));
}
public static int getInt(Object value) throws MessageFormatException
{
if (value instanceof Integer)
{
return (Integer)value;
}
else if (value instanceof Short)
{
return (Short)value;
}
else if (value instanceof Byte)
{
return (Byte)value;
}
else if (value instanceof String)
{
return Integer.parseInt((String)value);
}
else if (value == null)
{
throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
}
throw new MessageFormatException(conversionProblem(int.class, value));
}
public static long getLong(Object value) throws MessageFormatException
{
if (value instanceof Long)
{
return (Long)value;
}
else if (value instanceof Integer)
{
return (Integer)value;
}
else if (value instanceof Short)
{
return (Short)value;
}
else if (value instanceof Byte)
{
return (Byte)value;
}
else if (value instanceof String)
{
return Long.parseLong((String)value);
}
else if (value == null)
{
throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
}
throw new MessageFormatException(conversionProblem(long.class, value));
}
public static float getFloat(Object value) throws MessageFormatException
{
if (value instanceof Float)
{
return (Float)value;
}
else if (value instanceof String)
{
return Float.parseFloat((String)value);
}
else if (value == null)
{
throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
}
throw new MessageFormatException(conversionProblem(float.class, value));
}
public static double getDouble(Object value) throws MessageFormatException
{
if (value instanceof Double)
{
return (Double)value;
}
else if (value instanceof Float)
{
return (Float)value;
}
else if (value instanceof String)
{
return Double.parseDouble((String)value);
}
else if (value == null)
{
throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
}
throw new MessageFormatException(conversionProblem(double.class, value));
}
public static String getString(Object value) throws MessageFormatException
{
if (value instanceof byte[])
{
throw new MessageFormatException(conversionProblem(String.class, value));
}
else if (value == null)
{
throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
}
return String.valueOf(value);
}
public static byte[] getBytes(Object value) throws MessageFormatException
{
if (value instanceof byte[])
{
byte[] bytes = (byte[])value;
byte[] result = new byte[bytes.length];
System.arraycopy(bytes, 0, result, 0, bytes.length);
}
else if (value == null)
{
throw new IllegalArgumentException("value == null"); //$NON-NLS-1$
}
throw new MessageFormatException(conversionProblem(byte[].class, value));
}
public static void write(ExtendedDataOutputStream out, Object value) throws IOException
{
if (value instanceof Boolean)
{
out.writeByte(JMSProtocolConstants.TYPE_BOOLEAN);
out.writeBoolean((Boolean)value);
}
else if (value instanceof Byte)
{
out.writeByte(JMSProtocolConstants.TYPE_BYTE);
out.writeByte((Byte)value);
}
else if (value instanceof Character)
{
out.writeByte(JMSProtocolConstants.TYPE_CHAR);
out.writeChar((Character)value);
}
else if (value instanceof Double)
{
out.writeByte(JMSProtocolConstants.TYPE_DOUBLE);
out.writeDouble((Double)value);
}
else if (value instanceof Float)
{
out.writeByte(JMSProtocolConstants.TYPE_FLOAT);
out.writeFloat((Float)value);
}
else if (value instanceof Long)
{
out.writeByte(JMSProtocolConstants.TYPE_LONG);
out.writeLong((Long)value);
}
else if (value instanceof Short)
{
out.writeByte(JMSProtocolConstants.TYPE_SHORT);
out.writeShort((Short)value);
}
else if (value instanceof String)
{
out.writeByte(JMSProtocolConstants.TYPE_STRING);
out.writeString((String)value);
}
throw new IllegalArgumentException("value: " + value); //$NON-NLS-1$
}
public static Object read(ExtendedDataInputStream in) throws IOException
{
byte type = in.readByte();
switch (type)
{
case JMSProtocolConstants.TYPE_BOOLEAN:
return in.readBoolean();
case JMSProtocolConstants.TYPE_BYTE:
return in.readByte();
case JMSProtocolConstants.TYPE_CHAR:
return in.readChar();
case JMSProtocolConstants.TYPE_DOUBLE:
return in.readDouble();
case JMSProtocolConstants.TYPE_FLOAT:
return in.readFloat();
case JMSProtocolConstants.TYPE_LONG:
return in.readLong();
case JMSProtocolConstants.TYPE_SHORT:
return in.readShort();
case JMSProtocolConstants.TYPE_STRING:
return in.readString();
}
throw new IOException("Invalid type: " + type); //$NON-NLS-1$
}
private static String conversionProblem(Class<?> type, Object value)
{
return "Cannot convert values of type " + value.getClass().getName() + " to " + type.getName(); //$NON-NLS-1$ //$NON-NLS-2$
}
}