package com.ricebridge.csvman.test;
import com.ricebridge.csvman.*;
import com.ricebridge.data.sc.*;
import com.ricebridge.data.BeanSpec;
import com.ricebridge.data.Text;
import org.jostraca.util.*;
import junit.framework.*;
import junit.textui.*;
import java.util.*;
import java.io.*;
import java.text.*;
public class SaveBeansTest extends TestCase {
public SaveBeansTest( String pName ) {
super( pName );
}
public static TestSuite suite() {
return new TestSuite( SaveBeansTest.class );
}
public static void main( String[] pArgs ) {
TestRunner.run( suite() );
}
public void testExample() throws Exception {
File csvFile = null;
csvFile = TestUtil.getTextCsvFile( "save" );
CsvManager csvManager = new CsvManager();
LineSpec rs = new LineSpec( new String[] {"Name","Foo","Bar"} );
BeanSpec bs = new BeanSpec( BeanLine.class );
ArrayList beans = new ArrayList();
beans.add( new BeanLine("r1","f1","b1") );
beans.add( new BeanLine("r2","f2","b2") );
beans.add( new BeanLine("r3","f3","b3") );
csvManager.saveBeans( csvFile, rs, bs, beans );
assertEquals( "r1,f1,b1\nr2,f2,b2\nr3,f3,b3\n", FileUtil.readFile(csvFile) );
}
public void testConversions() throws Exception {
File csvFile = null;
csvFile = TestUtil.getTextCsvFile( "save" );
CsvManager csvManager = new CsvManager();
LineSpec rs = new LineSpec( new String[] {"Name","Int","Short","Long","Float","Double","Boolean","Char","Byte","String","Date"} );
HashMap scm = new HashMap();
scm.put( "Date", new DateConverter() );
BeanSpec bs = new BeanSpec( ConvLine.class, scm );
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
List beans = new ArrayList();
beans.add( new ConvLine( "r1",1,(short)10,100L,(float)1.1,(double)1.01,true,'a',(byte)1,"s1",sdf.parse("2005-01-01") ) );
beans.add( new ConvLine( "r2",2,(short)20,200L,(float)2.2,(double)2.02,true,'a',(byte)2,"s2",sdf.parse("2005-02-02") ) );
beans.add( new ConvLine( "r3",3,(short)30,300L,(float)3.3,(double)3.03,true,'a',(byte)3,"s3",sdf.parse("2005-03-03") ) );
CsvSpec xs = csvManager.getCsvSpec();
csvManager.saveBeans( csvFile, rs, bs, beans );
assertEquals( "r1,1,10,100,1.1,1.01,true,a,1,s1,2005-01-01\nr2,2,20,200,2.2,2.02,true,a,2,s2,2005-02-02\nr3,3,30,300,3.3,3.03,true,a,3,s3,2005-03-03\n", FileUtil.readFile(csvFile) );
}
public void testSingle() throws Exception {
ArrayList beans = new ArrayList();
beans.add( new SingleBean("b1","q1") );
beans.add( new SingleBean("b2","q2") );
String savecanon = "b1,q1\nb2,q2\n";
File csvFile = null;
csvFile = TestUtil.getTextCsvFile( "save" );
CsvManager csvManager = new CsvManager();
CsvSpec xs = csvManager.getCsvSpec();
LineSpec ls = new LineSpec( new String[] {"Name","Que"} );
BeanSpec bs = new BeanSpec( SingleBean.class );
FileUtil.writeFile(csvFile,"");
csvManager.saveBeans( csvFile, ls, bs, beans );
assertEquals( savecanon, FileUtil.readFile(csvFile) );
FileUtil.writeFile(csvFile,"");
csvManager.saveBeans( csvFile.getAbsolutePath(), ls, bs, beans );
assertEquals( savecanon, FileUtil.readFile(csvFile) );
FileUtil.writeFile(csvFile,"");
OutputStream is = new FileOutputStream( csvFile );
csvManager.saveBeans( is, ls, bs, beans );
assertEquals( savecanon, FileUtil.readFile(csvFile) );
is.close();
FileUtil.writeFile(csvFile,"");
FileWriter fw = new FileWriter( csvFile );
csvManager.saveBeans( fw, ls, bs, beans );
assertEquals( savecanon, FileUtil.readFile(csvFile) );
fw.close();
Text bt = new Text();
csvManager.setCsvSpec( csvManager.makeUnixSpec() );
csvManager.saveBeans( bt, ls, bs, beans );
assertEquals( savecanon, bt.getText() );
}
public void testMultiple() throws Exception {
ArrayList beans1 = new ArrayList();
beans1.add( new SingleBean("b1","q1") );
beans1.add( new SingleBean("b2","q2") );
String savecanon1 = "b1,q1\nb2,q2\n";
File csvFile = null;
csvFile = TestUtil.getTextCsvFile( "save" );
LineSpec linespec1 = new LineSpec( new String[] {"Name","Que"} );
BeanSpec bs = new BeanSpec( SingleBean.class );
CsvManager csvManager = new CsvManager();
csvManager.setCsvSpec( csvManager.makeUnixSpec() );
FileUtil.writeFile(csvFile,"");
csvManager.saveBeans( csvFile, linespec1, bs, beans1 );
assertEquals( savecanon1, FileUtil.readFile(csvFile) );
FileUtil.writeFile(csvFile,"");
csvManager.saveBeans( csvFile.getAbsolutePath(), linespec1, bs, beans1 );
assertEquals( savecanon1, FileUtil.readFile(csvFile) );
FileUtil.writeFile(csvFile,"");
OutputStream os = new FileOutputStream( csvFile );
csvManager.saveBeans( os, linespec1, bs, beans1 );
assertEquals( savecanon1, FileUtil.readFile(csvFile) );
os.close();
FileUtil.writeFile(csvFile,"");
FileWriter fw = new FileWriter( csvFile );
csvManager.saveBeans( fw, linespec1, bs, beans1 );
assertEquals( savecanon1, FileUtil.readFile(csvFile) );
fw.close();
Text text = new Text();
csvManager.saveBeans( text, linespec1, bs, beans1 );
assertEquals( savecanon1, text.toString() );
ArrayList beans2 = new ArrayList();
beans2.add( new SingleBean("2b1","2q1") );
beans2.add( new SingleBean("2b2","2q2") );
beans2.add( new SingleBean("2b3","2q3") );
String savecanon2 = "2b1,2q1\n2b2,2q2\n2b3,2q3\n";
FileUtil.writeFile(csvFile,"");
csvManager.saveBeans( csvFile, linespec1, bs, beans2 );
assertEquals( savecanon2, FileUtil.readFile(csvFile) );
FileUtil.writeFile(csvFile,"");
csvManager.saveBeans( csvFile.getAbsolutePath(), linespec1, bs, beans2 );
assertEquals( savecanon2, FileUtil.readFile(csvFile) );
FileUtil.writeFile(csvFile,"");
os = new FileOutputStream( csvFile );
csvManager.saveBeans( os, linespec1, bs, beans2 );
assertEquals( savecanon2, FileUtil.readFile(csvFile) );
os.close();
FileUtil.writeFile(csvFile,"");
fw = new FileWriter( csvFile );
csvManager.saveBeans( fw, linespec1, bs, beans2 );
assertEquals( savecanon2, FileUtil.readFile(csvFile) );
fw.close();
text = new Text();
csvManager.saveBeans( text, linespec1, bs, beans2 );
assertEquals( savecanon2, text.toString() );
ArrayList beans3 = new ArrayList();
beans3.add( new SingleBean("3b1","3q1") );
beans3.add( new SingleBean("3b2","3q2") );
beans3.add( new SingleBean("3b3","3q3") );
beans3.add( new SingleBean("3b4","3q4") );
String savecanon3 = "3b1,3q1\n3b2,3q2\n3b3,3q3\n3b4,3q4\n";
FileUtil.writeFile(csvFile,"");
csvManager.saveBeans( csvFile, linespec1, bs, beans3 );
assertEquals( savecanon3, FileUtil.readFile(csvFile) );
FileUtil.writeFile(csvFile,"");
csvManager.saveBeans( csvFile.getAbsolutePath(), linespec1, bs, beans3 );
assertEquals( savecanon3, FileUtil.readFile(csvFile) );
FileUtil.writeFile(csvFile,"");
os = new FileOutputStream( csvFile );
csvManager.saveBeans( os, linespec1, bs, beans3 );
assertEquals( savecanon3, FileUtil.readFile(csvFile) );
os.close();
FileUtil.writeFile(csvFile,"");
fw = new FileWriter( csvFile );
csvManager.saveBeans( fw, linespec1, bs, beans3 );
assertEquals( savecanon3, FileUtil.readFile(csvFile) );
fw.close();
text = new Text();
csvManager.saveBeans( text, linespec1, bs, beans3 );
assertEquals( savecanon3, text.toString() );
}
private String canon( List pBeans ) throws Exception {
return pBeans.toString();
}
public static class BeanLine {
private String iName;
private String iFoo;
private String iBar;
public BeanLine( String pName, String pFoo, String pBar ) {
iName = pName;
iFoo = pFoo;
iBar = pBar;
}
public void setName( String pName ) { iName = pName; }
public String getName() { return iName; }
public void setFoo( String pFoo ) { iFoo = pFoo; }
public String getFoo() { return iFoo; }
public void setBar( String pBar ) { iBar = pBar; }
public String getBar() { return iBar; }
public String toString() {
return iName+":"+iFoo+":"+iBar;
}
}
public static class ConvLine {
private String iName;
private int iInt;
private short iShort;
private long iLong;
private float iFloat;
private double iDouble;
private boolean iBoolean;
private char iChar;
private byte iByte;
private String iString;
private Date iDate;
public ConvLine( String pName,
int pInt,
short pShort,
long pLong,
float pFloat,
double pDouble,
boolean pBoolean,
char pChar,
byte pByte,
String pString,
Date pDate ) {
iName = pName;
iInt = pInt;
iShort = pShort;
iLong = pLong;
iFloat = pFloat;
iDouble = pDouble;
iBoolean = pBoolean;
iChar = pChar;
iByte = pByte;
iString = pString;
iDate = pDate;
}
public void setName( String pName ) { iName = pName; }
public String getName() { return iName; }
public void setInt( int pInt ) { iInt = pInt; }
public int getInt() { return iInt; }
public void setShort( short pShort ) { iShort = pShort; }
public short getShort() { return iShort; }
public void setLong( long pLong ) { iLong = pLong; }
public long getLong() { return iLong; }
public void setFloat( float pFloat ) { iFloat = pFloat; }
public float getFloat() { return iFloat; }
public void setDouble( double pDouble ) { iDouble = pDouble; }
public double getDouble() { return iDouble; }
public void setBoolean( boolean pBoolean ) { iBoolean = pBoolean; }
public boolean getBoolean() { return iBoolean; }
public void setChar( char pChar ) { iChar = pChar; }
public char getChar() { return iChar; }
public void setByte( byte pByte ) { iByte = pByte; }
public byte getByte() { return iByte; }
public void setString( String pString ) { iString = pString; }
public String getString() { return iString; }
public void setDate( Date pDate ) { iDate = pDate; }
public Date getDate() { return iDate; }
public String toString() {
return ""+iName+":"+iInt+":"+iShort+":"+iLong+":"+iFloat+":"+iDouble+":"+iBoolean+":"+iChar+":"+iByte+":"+iString+":"+iDate;
}
}
public static class DateConverter extends DefaultStringConverter {
private Date iDefault = new Date();
private SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
protected Object makeObjectImpl( String pValue ) throws Exception {
return df.parse(pValue);
}
protected Object makeDefaultObjectImpl() {
return iDefault;
}
protected String makeStringImpl( Object pValue ) throws Exception {
return df.format((Date)pValue);
}
protected String makeDefaultStringImpl() {
return iDefault.toString();
}
}
public static class SingleBean {
private String iName;
private String iQue;
public SingleBean( String pName, String pQue ) {
iName = pName;
iQue = pQue;
}
public void setName( String pName ) { iName = pName; }
public String getName() { return iName; }
public void setQue( String pQue ) { iQue = pQue; }
public String getQue() { return iQue; }
public String toString() {
return iName+":"+iQue;
}
}
}