//$Id: SimpleLineImporter.java,v 1.1 2007-3-24 下午12:20:34 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.importer; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.beanfuse.transfer.ItemTransfer; import org.beanfuse.transfer.importer.reader.ItemReader; import org.beanfuse.transfer.importer.reader.Reader; /** * 线性导入实现 * * @author chaostone * */ public abstract class ItemImporter extends AbstractImporter implements Importer, ItemTransfer { /** 属性说明[attr,description] */ protected Map descriptions = new HashMap(); /** 导入属性 */ protected String[] attrs; /** 当前导入值[attr,value] */ protected Map values = new HashMap(); /** * 导入之前读入标题 */ public void beforeImport() { String[] descs = ((ItemReader) reader).readDescription(); attrs = ((ItemReader) reader).readTitle(); for (int i = 0; i < attrs.length && i < descs.length; i++) { descriptions.put(attrs[i], descs[i]); } } /** * 设置数据读取对象 * */ public void setReader(Reader reader) { if (reader instanceof ItemReader) { this.reader = (ItemReader) reader; } else { throw new RuntimeException("Expected LineReader but:" + reader.getClass().getName()); } } /** * 改变现有某个属性的值 * * @param attr * @param value * @return */ public void changeCurValue(String attr, Object value) { values.put(attr, value); } public boolean read() { Object[] curData = (Object[]) reader.read(); if (null == curData) { setCurrent(null); setCurData(null); return false; } else { for (int i = 0; i < curData.length; i++) { values.put(attrs[i], curData[i]); } return true; } } public boolean isDataValid() { boolean valid = false; for (Object value : values.values()) { if (value instanceof String) { String tt = (String) value; if (StringUtils.isNotBlank(tt)) { valid = true; break; } } else { if (null != value) valid = true; break; } } return valid; } public Map getCurData() { return values; } public void setCurData(Map curData) { this.values = curData; } public String[] getAttrs() { return attrs; } public Map getDescriptions() { return descriptions; } public String processAttr(String attr) { return attr; } }