From 71d3577074df990578dea98e69efc83705367b6a Mon Sep 17 00:00:00 2001 From: Michael Bayne Date: Fri, 4 Feb 2011 18:14:15 +0000 Subject: [PATCH] Ur doin it wrong. The transforming field marshaller needs to operate on F (the non-persistent type), and transform in getFromSet/writeToStatement, rather than operate on T (the persistent type) and transform in getFromObject/writeToObject. This makes the newly added test in TransformTest work, rather than fail, as it did previously. --- .../depot/impl/FieldMarshaller.java | 26 +++++++++---------- .../com/samskivert/depot/TransformTest.java | 26 ++++++++++++++++--- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/samskivert/depot/impl/FieldMarshaller.java b/src/main/java/com/samskivert/depot/impl/FieldMarshaller.java index 5dd42d7..ddd99e3 100644 --- a/src/main/java/com/samskivert/depot/impl/FieldMarshaller.java +++ b/src/main/java/com/samskivert/depot/impl/FieldMarshaller.java @@ -112,8 +112,8 @@ public abstract class FieldMarshaller } } - protected static FieldMarshaller createTransformingMarshaller ( - final Transformer xformer, Field field, Transform annotation) + protected static FieldMarshaller createTransformingMarshaller ( + final Transformer xformer, final Field field, Transform annotation) { Class pojoType = getTransformerType(xformer, "from"); checkArgument(pojoType.isAssignableFrom(field.getType()), @@ -125,28 +125,28 @@ public abstract class FieldMarshaller (FieldMarshaller)createMarshaller(getTransformerType(xformer, "to")); delegate.create(field); - FieldMarshaller xmarsh = new FieldMarshaller() { + FieldMarshaller xmarsh = new FieldMarshaller() { @Override public String getColumnType (ColumnTyper typer, int length) { return delegate.getColumnType(typer, length); } - @Override public T getFromObject (Object po) + @Override public F getFromObject (Object po) throws IllegalArgumentException, IllegalAccessException { @SuppressWarnings("unchecked") F value = (F)_field.get(po); - return xformer.toPersistent(value); + return value; } - @Override public T getFromSet (ResultSet rs) throws SQLException { - return delegate.getFromSet(rs); + @Override public F getFromSet (ResultSet rs) throws SQLException { + return xformer.fromPersistent(delegate.getFromSet(rs)); } - @Override public T getFromSet (ResultSet rs, int index) throws SQLException { - return delegate.getFromSet(rs, index); + @Override public F getFromSet (ResultSet rs, int index) throws SQLException { + return xformer.fromPersistent(delegate.getFromSet(rs, index)); } - @Override public void writeToObject (Object po, T value) + @Override public void writeToObject (Object po, F value) throws IllegalArgumentException, IllegalAccessException { - _field.set(po, xformer.fromPersistent(value)); + _field.set(po, value); } - @Override public void writeToStatement (PreparedStatement ps, int column, T value) + @Override public void writeToStatement (PreparedStatement ps, int column, F value) throws SQLException { - delegate.writeToStatement(ps, column, value); + delegate.writeToStatement(ps, column, xformer.toPersistent(value)); } }; xmarsh.create(field); diff --git a/src/test/java/com/samskivert/depot/TransformTest.java b/src/test/java/com/samskivert/depot/TransformTest.java index 18ea0b1..f32adb0 100644 --- a/src/test/java/com/samskivert/depot/TransformTest.java +++ b/src/test/java/com/samskivert/depot/TransformTest.java @@ -1,5 +1,5 @@ // -// $Id$ +// $Id: TransformTest.java 760 2010-12-09 00:08:58Z samskivert $ // // Depot library - a Java relational persistence library // Copyright (C) 2006-2010 Michael Bayne and Pär Winzell @@ -230,7 +230,16 @@ public class TransformTest extends TestBase testCreateReadDelete(new String[] { "", "\n", "", "\n\n" }); } - protected void testCreateReadDelete (String[] strings) + @Test public void testProject () + { + TransformRecord in = createAndInsert(new String[] { "one", "two", "three" }); + Set bobs = _repo.from(TransformRecord.class) + .where(TransformRecord.RECORD_ID.eq(in.recordId)) + .load(TransformRecord.BOBS); + assertEquals(in.bobs, bobs); + } + + protected TransformRecord createAndInsert (String[] strings) { TransformRecord in = new TransformRecord(); in.recordId = 1; @@ -241,6 +250,17 @@ public class TransformTest extends TestBase in.ordinal = Ordinal.THREE; in.bobs = EnumSet.of(ExtraOrdinal.TWO); _repo.insert(in); + return in; + } + + protected void delete (TransformRecord in) + { + _repo.delete(TransformRecord.getKey(in.recordId)); + } + + protected void testCreateReadDelete (String[] strings) + { + TransformRecord in = createAndInsert(strings); TransformRecord out = _repo.loadNoCache(in.recordId); assertNotNull(out != null); // we got a result @@ -256,7 +276,7 @@ public class TransformTest extends TestBase assertEquals(in.bobs, out.bobs); // finally clean up after ourselves - _repo.delete(TransformRecord.getKey(in.recordId)); + delete(in); assertNull(_repo.loadNoCache(in.recordId)); }