package org.simpleflatmapper.datastax; import com.datastax.driver.core.GettableByIndexData; import com.datastax.driver.core.SettableByIndexData; import java.lang.reflect.Method; import java.util.Date; /*** * Bridge method to 3.1 api */ public class DataHelper { private static final Method setTimestampMethod; private static final Method getTimestampMethod; private static final Method setTimeMethod; private static final Method getTimeMethod; private static final Method setDateMethod; private static final Method getDateMethod; private static final Method setSmallIntMethod; private static final Method getSmallIntMethod; private static final Method setTinyIntMethod; private static final Method getTinyIntMethod; static { setTimestampMethod = getSetTimestampMethod(); getTimestampMethod = getGetTimestampMethod(); setTimeMethod = getSetTimeMethod(); getTimeMethod = getGetTimeMethod(); setDateMethod = getSetDateMethod(); getDateMethod = getGetDateMethod(); setSmallIntMethod = getSetSmallIntMethod(); getSmallIntMethod = getGetSmallIntMethod(); setTinyIntMethod = getSetTinyIntMethod(); getTinyIntMethod = getGetTinyIntMethod(); } private static Method getGetTinyIntMethod() { try { return GettableByIndexData.class.getMethod("getByte", int.class); } catch (NoSuchMethodException e) { } return null; } private static Method getSetTinyIntMethod() { try { return SettableByIndexData.class.getMethod("setByte", int.class, byte.class); } catch (NoSuchMethodException e) { } return null; } private static Method getGetSmallIntMethod() { try { return GettableByIndexData.class.getMethod("getShort", int.class); } catch (NoSuchMethodException e) { } return null; } private static Method getSetSmallIntMethod() { try { return SettableByIndexData.class.getMethod("setShort", int.class, short.class); } catch (NoSuchMethodException e) { } return null; } private static Method getGetDateMethod() { try { return GettableByIndexData.class.getMethod("getDate", int.class); } catch (NoSuchMethodException e) { } return null; } private static Method getSetDateMethod() { if (DataTypeHelper.localDateClass == null) return null; try { return SettableByIndexData.class.getMethod("setDate", int.class, DataTypeHelper.localDateClass); } catch (NoSuchMethodException e) { } return null; } private static Method getGetTimeMethod() { try { return GettableByIndexData.class.getMethod("getTime", int.class); } catch (NoSuchMethodException e) { } return null; } private static Method getSetTimeMethod() { try { return SettableByIndexData.class.getMethod("setTime", int.class, long.class); } catch (NoSuchMethodException e) { } return null; } private static Method getGetTimestampMethod() { try { return GettableByIndexData.class.getMethod("getTimestamp", int.class); } catch (NoSuchMethodException e) { try { return GettableByIndexData.class.getMethod("getDate", int.class); } catch (NoSuchMethodException e1) { throw new IllegalStateException("Unable to lookup getDate or getTimestamp on " + GettableByIndexData.class); } } } private static Method getSetTimestampMethod() { try { return SettableByIndexData.class.getMethod("setTimestamp", int.class, Date.class); } catch (NoSuchMethodException e) { try { return SettableByIndexData.class.getMethod("setDate", int.class, Date.class); } catch (NoSuchMethodException e1) { throw new IllegalStateException("Unable to lookup setDate or setTimestamp on " + SettableByIndexData.class); } } } public static void setTimestamp(int index, Date date, SettableByIndexData data) throws Exception { setTimestampMethod.invoke(data, index, date); } public static Date getTimestamp(int index, GettableByIndexData data) throws Exception { return (Date) getTimestampMethod.invoke(data, index); } public static void setTime(int index, long time, SettableByIndexData data) throws Exception { if (setTimeMethod == null) throw new UnsupportedOperationException(); setTimeMethod.invoke(data, index, time); } public static long getTime(int index, GettableByIndexData data) throws Exception { if (getTimeMethod == null) throw new UnsupportedOperationException(); return (Long) getTimeMethod.invoke(data, index); } public static void setDate(int index, Object localDate, SettableByIndexData data) throws Exception { if (setDateMethod == null) throw new UnsupportedOperationException(); setDateMethod.invoke(data, index, localDate); } public static Object getDate(int index, GettableByIndexData data) throws Exception { if (getDateMethod == null) throw new UnsupportedOperationException(); return getDateMethod.invoke(data, index); } public static void setShort(int index, short s, SettableByIndexData data) throws Exception { if (setSmallIntMethod == null) throw new UnsupportedOperationException(); setSmallIntMethod.invoke(data, index, s); } public static short getShort(int index, GettableByIndexData data) throws Exception { if (getSmallIntMethod == null) throw new UnsupportedOperationException(); return (Short)getSmallIntMethod.invoke(data, index); } public static void setByte(int index, byte b, SettableByIndexData data) throws Exception { if (setTinyIntMethod == null) throw new UnsupportedOperationException(); setTinyIntMethod.invoke(data, index, b); } public static byte getByte(int index, GettableByIndexData data) throws Exception { if (getTinyIntMethod == null) throw new UnsupportedOperationException(); return (Byte)getTinyIntMethod.invoke(data, index); } public static boolean hasShortAccessor() { return getSmallIntMethod != null; } public static boolean hasByteAccessor() { return getTinyIntMethod != null; } }