/*
* 作成日: 2005/06/21
*
* DbUnit形式でDBのdump/restoreを行うユーティリティ
*/
package pwv.spring.edbutil;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.digester.Digester;
/**
* DbUnitHelper
*
* @author Hiroshi TAKEMOTO
*/
public class DbUnitHelper {
private ILoadAndSave template;
private Digester digester;
public DbUnitHelper(ILoadAndSave template) {
this.template = template;
setupDigester();
}
public void dump(Writer writer) {
try {
Iterator itr = template.getHelperMap().values().iterator();
writer.write("\n");
writer.write("\n") ;
// 各テーブルに対して
while (itr.hasNext()) {
EDbHelper helper = (EDbHelper) itr.next();
List list = template.loadAll(Class.forName(helper.getClsName()));
if (list != null) {
for (int i = 0; i < list.size(); i++) {
writer.write(helper.toDbUnitFormat(list.get(i)));
}
}
}
writer.write("\n");
writer.close();
}
catch (Exception e){}
}
public void dump(String path) {
try {
OutputStreamWriter writer =
new OutputStreamWriter(new FileOutputStream(path));
dump(writer);
}
catch (Exception e) {
}
}
public void restore(String path) {
try {
BufferedInputStream stream =
new BufferedInputStream(new FileInputStream(path));
Iterator itr = template.getHelperMap().values().iterator();
// すべてのテーブルを空にする
while (itr.hasNext()) {
EDbHelper helper = (EDbHelper) itr.next();
template.delete(Class.forName(helper.getClsName()), "");
}
List dataset = (List)digester.parse(stream);
if (dataset != null) {
for (int i = 0; i < dataset.size(); i++) {
template.save(dataset.get(i));
}
}
}
catch (Exception e) {}
}
private Digester setupDigester() {
digester = new Digester();
// タグの処理
digester.addObjectCreate("dataset", "java.util.ArrayList");
digester.addSetProperties("dataset");
Iterator itr = template.getHelperMap().values().iterator();
while (itr.hasNext()) {
EDbHelper helper = (EDbHelper) itr.next();
digester.addObjectCreate("dataset/" + helper.getTableName(),
helper.getClsName(), "type");
digester.addSetNext("dataset/" + helper.getTableName(), "add",
helper.getClsName());
digester.addSetProperties("dataset/" + helper.getTableName());
}
return (digester);
}
}