@Test public void test() throws Exception { UUID uuid = UUID.randomUUID(); @SuppressWarnings("unchecked") Getter<Object, Object> subGetter = mock(Getter.class); UUIDUnspecifiedTypeGetter<Object> getter = new UUIDUnspecifiedTypeGetter<Object>(subGetter); when(subGetter.get(any())).thenReturn(uuid.toString(), UUIDHelper.toBytes(uuid), new ByteArrayInputStream(UUIDHelper.toBytes(uuid)), new Date()); assertEquals(uuid, getter.get(null)); assertEquals(uuid, getter.get(null)); assertEquals(uuid, getter.get(null)); try { getter.get(null); fail(); } catch (IllegalArgumentException e) { } getter.toString(); } }
@Override public UUID get(final R target) throws Exception { final Object o = getter.get(target); if (o == null) return null; if (o instanceof String) { return UUID.fromString((String)o); } else if (o instanceof byte[]) { return UUIDHelper.fromBytes((byte[])o); } else if (o instanceof InputStream) { return UUIDHelper.fromBytes(toBytes((InputStream)o)); } throw new IllegalArgumentException("Cannot convert " + o + " to UUID"); }
@SuppressWarnings("unchecked") @Override public <P> Getter<ResultSet, P> newGetter(Type target, JdbcColumnKey key, Object... properties) { switch (key.getSqlType(properties)) { case JdbcColumnKey.UNDEFINED_TYPE: return (Getter<ResultSet, P>) new UUIDUnspecifiedTypeGetter<ResultSet>(new ObjectResultSetGetter(key.getIndex())); case Types.CHAR: case Types.LONGVARCHAR: case Types.VARCHAR: case Types.CLOB: return (Getter<ResultSet, P>) new StringUUIDGetter<ResultSet>(new StringResultSetGetter(key.getIndex())); case Types.LONGNVARCHAR: case Types.NCHAR: case Types.NVARCHAR: case Types.NCLOB: return (Getter<ResultSet, P>) new StringUUIDGetter<ResultSet>(new NStringResultSetGetter(key.getIndex())); case Types.BINARY: case Types.LONGVARBINARY: case Types.VARBINARY: return (Getter<ResultSet, P>) new BytesUUIDGetter<ResultSet>(new ByteArrayResultSetGetter(key.getIndex())); case Types.OTHER: // assume it's a UUID postgres return (Getter<ResultSet, P>) new ObjectResultSetGetter(key.getIndex()); default: throw new MapperBuildingException("Incompatible type " + key.getSqlType(properties) + " with UUID"); } } });
@SuppressWarnings("unchecked") @Override public <P> Getter<ResultSet, P> newGetter(Type target, JdbcColumnKey key, Object... properties) { switch (key.getSqlType(properties)) { case JdbcColumnKey.UNDEFINED_TYPE: return (Getter<ResultSet, P>) new UUIDUnspecifiedTypeGetter<ResultSet>(new ObjectResultSetGetter(key.getIndex())); case Types.CHAR: case Types.LONGVARCHAR: case Types.VARCHAR: case Types.CLOB: return (Getter<ResultSet, P>) new StringUUIDGetter<ResultSet>(new StringResultSetGetter(key.getIndex())); case Types.LONGNVARCHAR: case Types.NCHAR: case Types.NVARCHAR: case Types.NCLOB: return (Getter<ResultSet, P>) new StringUUIDGetter<ResultSet>(new NStringResultSetGetter(key.getIndex())); case Types.BINARY: case Types.LONGVARBINARY: case Types.VARBINARY: return (Getter<ResultSet, P>) new BytesUUIDGetter<ResultSet>(new ByteArrayResultSetGetter(key.getIndex())); case Types.OTHER: // assume it's a UUID postgres return (Getter<ResultSet, P>) new ObjectResultSetGetter(key.getIndex()); default: throw new MapperBuildingException("Incompatible type " + key.getSqlType(properties) + " with UUID"); } } });
@Override public UUID get(final R target) throws Exception { final Object o = getter.get(target); if (o == null) return null; if (o instanceof String) { return UUID.fromString((String)o); } else if (o instanceof byte[]) { return UUIDHelper.fromBytes((byte[])o); } else if (o instanceof InputStream) { return UUIDHelper.fromBytes(toBytes((InputStream)o)); } throw new IllegalArgumentException("Cannot convert " + o + " to UUID"); }