/* * 作成日: 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); } }