credit_contract_tabledesc.xml文件描述字段的对应关系
comparedata.xml描述一些自定义的值对应关系可以看出,所谓的对应,在配置文件中以unit为单位描述对应关系,其中,自己实现了几个对应关系:
多对多的对应关系:org.cafecup.common.datatran.prop.MoreToMoreComparisonImpl
根据配置文件对应的对应关系:org.cafecup.common.datatran.prop.CompareComparisonImpl
赋默认值的对应关系:org.cafecup.common.datatran.prop.DefaultValueComparisonImpl
以及自定义的对应关系:
dg.dkzh.comparisonimpl.DateFormatComparisonImpl
dg.dkzh.comparisonimpl.ZhztComparisonImpl其实所有的对应关系都是实现了Comparison接口,下面列一下DateFormatComparisonImpl的代码:
import org.apache.log4j.Logger;
import org.cafecup.common.datatran.entity.Column;
import org.cafecup.common.datatran.prop.Comparison;/**
 * 格式化日期格式为yyyy-mm-dd
 * 
 * @author Administrator
 * 
 */public class DateFormatComparisonImpl implements Comparison {private Logger logger = Logger.getLogger(DateFormatComparisonImpl.class);public void execute(String[] params, Column[] sources, Column[] targets) {
int size = sources.length;
if (size > targets.length) {
size = targets.length;
}
if (logger.isDebugEnabled()) {
logger.debug("日期类型多对多的关系处理:\r\n");
logger.debug("SOURCES size=[" + sources.length + "]\r\n");
logger.debug("TARGETS size=[" + targets.length + "]\r\n");
}for (int i = 0; i < size; i++) {
if (logger.isDebugEnabled()) {
logger.debug("开始日期类型的处理SOURCE:[" + sources[i].getTableId()
+ "." + sources[i].getColumnName() + "]TARGET:["
+ targets[i].getTableId() + "."
+ targets[i].getColumnName() + "]");
}
for (int j = 0; j < sources[i].getDatalist().size(); j++) {
targets[i].getDatalist()
.add(getDateStr((String) sources[i].getDatalist().get(j)));
}
}
}/**
 * 获取合规的日期字符串,格式为"YYYY-MM-DD"
 * 传过来的格式可能为yyyymmdd、yyyy/m/d、yyyy/m/dd、yyyy/mm/d或者yyyy/mm/dd
 * 
 * @param datestr
 * @return String
 */
private String getDateStr(String datestr) {
if (datestr == null || datestr.length() < 8 || datestr.length() > 10) {
logger.warn("获取的日期参数[" + datestr + "]不合法!");
return null;
}
String[] dateunits = datestr.split("[/]");
if (dateunits.length == 1) {// 格式为yyyymmdd
return datestr.substring(0, 4) + "-" + datestr.substring(4, 6)
+ "-" + datestr.substring(6);
} else {
StringBuffer strb = new StringBuffer("0000-00-00");
strb.replace(0, 4, dateunits[0]);
strb.replace(7 - dateunits[1].length(), 7, dateunits[1]);
strb.replace(10 - dateunits[2].length(), 10, dateunits[2]);
return strb.toString();
}
}
}只是粗略的讲了一下用法及原理,自我感觉还可以,不知道大家在做数据移植时有没有更好的办法,希望拿出来共享一下,^^