/* * 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$ } }