Replace the CommaSeparatedString transformer with an escaping

TabSeparatedString transformer. Maybe I should just use StringUtil methods...
This commit is contained in:
Michael Bayne
2010-06-19 18:05:23 +00:00
parent f4cc4f2bee
commit 728159dc48
3 changed files with 58 additions and 7 deletions
@@ -37,14 +37,26 @@ import com.samskivert.depot.annotation.Column;
public class Transformers
{
/**
* Combines the contents of a String[] column into a single string, separated by commas.
* Combines the contents of a String[] column into a single string, separated by tabs. Any tabs
* in the strings will be escaped.
*/
public static class CommaSeparatedString implements Transformer<String[], String> {
public String toPersistent (String[] value) {
return Joiner.on(",").join(value);
public static class TabSeparatedString implements Transformer<String[], String> {
public String toPersistent (String[] values) {
StringBuffer buf = new StringBuffer();
for (String value : values) {
if (buf.length() > 0) {
buf.append("\t");
}
buf.append(value.replace("\t", "\\\t"));
}
return buf.toString();
}
public String[] fromPersistent (Class<?> ftype, String value) {
return value.split(",");
String[] values = value.replace("\\\t", "%%ESCTAB%%").split("\t");
for (int ii = 0; ii < values.length; ii++) {
values[ii] = values[ii].replace("%%ESCTAB%%", "\t");
}
return values;
}
}
}
@@ -127,7 +127,7 @@ public class TransformTest extends TestBase
@Id public int recordId;
@Transform(Transformers.CommaSeparatedString.class)
@Transform(Transformers.TabSeparatedString.class)
public String[] strings;
public CustomType custom;
@@ -151,7 +151,7 @@ public class TransformTest extends TestBase
public static class BadTransformRecord extends PersistentRecord
{
@Transform(Transformers.CommaSeparatedString.class)
@Transform(Transformers.TabSeparatedString.class)
public Thread thread;
public InvalidCustomType invalid;
@@ -0,0 +1,39 @@
//
// $Id$
//
// Depot library - a Java relational persistence library
// Copyright (C) 2006-2010 Michael Bayne and Pär Winzell
//
// This library is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License as published
// by the Free Software Foundation; either version 2.1 of the License, or
// (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
package com.samskivert.depot.tests;
import org.junit.Test;
import static org.junit.Assert.*;
import com.samskivert.depot.Transformers;
/**
* Tests the stock transformers.
*/
public class TransformersTest
{
@Test public void testTabSeparatedString ()
{
String[] data = { "notabs", "\tpretab", "posttab\t", "in\ttab", "\t\t\tOMGtabs!\t\t" };
Transformers.TabSeparatedString xform = new Transformers.TabSeparatedString();
assertArrayEquals(data, xform.fromPersistent(null, xform.toPersistent(data)));
}
}