//$Id: AbstractExporter.java,v 1.1 2007-3-24 下午08:51:38 chaostone Exp $ /* * Copyright c 2005-2009 * Licensed under GNU LESSER General Public License, Version 3. * http://www.gnu.org/licenses * */ /******************************************************************************** * @author chaostone * * MODIFICATION DESCRIPTION * * Name Date Description * ============ ============ ============ *chaostone 2007-3-24 Created * ********************************************************************************/ package org.beanfuse.transfer.exporter; import java.util.Collection; import java.util.Iterator; import java.util.Locale; import java.util.Vector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.beanfuse.transfer.Transfer; import org.beanfuse.transfer.TransferListener; import org.beanfuse.transfer.TransferResult; import org.beanfuse.transfer.exporter.writer.ItemWriter; import org.beanfuse.transfer.exporter.writer.Writer; public class ItemExporter implements Exporter { /** Commons Logging instance. */ protected static Logger logger = LoggerFactory.getLogger(ItemExporter.class); /** 数据读取对象 */ protected ItemWriter writer; /** 转换结果 */ protected TransferResult transferResult; /** 监听器列表 */ protected Vector listeners = new Vector(); /** 成功记录数 */ protected int success = 0; /** 失败记录数 */ protected int fail = 0; /** 下一个要输出的位置 */ protected int index = -1; /** 导入属性对应的标题 */ protected String[] titles; /** 转换的数据集 */ protected Collection datas; protected Iterator iter; private Object current; /** 转换上下文 */ protected Context context; public Transfer addListener(TransferListener listener) { listeners.add(listener); listener.setTransfer(this); return this; } public Object getCurrent() { return current; } public int getFail() { return fail; } public Locale getLocale() { return Locale.getDefault(); } public int getSuccess() { return success; } public int getTranferIndex() { return index; } public void transfer(TransferResult tr) { if (null == titles || titles.length == 0) return; this.transferResult = tr; tr.setTransfer(this); beforeExport(); for (Iterator iter = listeners.iterator(); iter.hasNext();) { TransferListener listener = (TransferListener) iter.next(); listener.startTransfer(tr); } while (hasNext()) { next(); int errors = tr.errors(); // 实体转换开始 for (Iterator iter = listeners.iterator(); iter.hasNext();) { TransferListener listener = (TransferListener) iter.next(); listener.startTransferItem(tr); } long transferItemStart = System.currentTimeMillis(); // 进行转换 transferItem(); // 如果导出过程中没有错误,将成功记录数增一 if (tr.errors() == errors) { this.success++; } else { this.fail++; } logger.debug("tranfer item:{} take time:{}", String.valueOf(getTranferIndex()), String .valueOf(System.currentTimeMillis() - transferItemStart)); // 实体转换结束 for (Iterator iter = listeners.iterator(); iter.hasNext();) { TransferListener listener = (TransferListener) iter.next(); listener.endTransferItem(tr); } } for (Iterator iter = listeners.iterator(); iter.hasNext();) { TransferListener listener = (TransferListener) iter.next(); listener.endTransfer(tr); } // 告诉输出者,输出完成 writer.close(); } protected void beforeExport() { writer.writeTitle(titles); } public void transferItem() { if (null == getCurrent()) return; writer.write(getCurrent()); } protected void next() { index++; current = iter.next(); } public boolean hasNext() { return iter.hasNext(); } public String getFormat() { return writer.getFormat(); } public String[] getTitles() { return titles; } public void setTitles(String[] titles) { this.titles = titles; } public void setContext(Context context) { Collection items = (Collection) context.getDatas().get("items"); if (null != items) { datas = items; iter = datas.iterator(); } this.context = context; } public String getDataName() { return null; } public void setWriter(Writer writer) { if (writer instanceof ItemWriter) { this.writer = (ItemWriter) writer; } } }