您的位置:首页 > 数据库

根据传入的条件解析对应的XML文件,并存入数据库

2010-05-19 14:55 239 查看
1。TestXmlToDB类

public void testAddDataByFileType() throws IOException {
String xmlFileTypeCd = "01";
XmlToDBUtil xmlToDBUtil = new XmlToDBUtil();
xmlToDBUtil.addDataToDB(xmlFileTypeCd);
}


2。xmlToDBUtil类

/**
* 把XML数据转化为对象并加入到数据库中的工具类
* @author Alanlin
*
*/
public class XmlToDBUtil extends HibernateDaoSupport{

/** Spring框架应用上下文对象 */
private static ApplicationContext factory = getApplicationContext();
private static XmlToDBUtil xmlToDBUtil = null;

//解析后的数据列表
private static List accountCalculationList = null;
private static List accountDefinitionList = null;
private static List accountMappingRequestToModelList = null;
private static List assertionDefitionList = null;
private static List formulaDefinitionList = null;
private static List bizCodeDefList = null;

static{
getApplicationContext();
xmlToDBUtil = (XmlToDBUtil)factory.getBean("xmlToDBUtil");
}

/**
* 获得Spring框架应用上下文对象
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext()
{
//判断如果 ApplicationContext 的对象 == NULL
if ( factory == null )
{
try
{
factory = new ClassPathXmlApplicationContext(new String[]{"applicationContext-daoSupport-test.xml"});

}
catch ( Exception e1 )
{
e1.printStackTrace();
}
}
//返回ApplicationContext
return factory;
}

//******************************************************************************

public void addDataToDB(String xmlFileTypeCd) throws IOException {

//取得对应的资源文件
InputStream in = getFileInputStream(xmlFileTypeCd);
//解析取到的资源文件
this.digestMethod(in,xmlFileTypeCd);

//调用对应的执行方法
if("01".equals(xmlFileTypeCd)
|| "02".equals(xmlFileTypeCd) || "08".equals(xmlFileTypeCd)) {

//向数据库添加AccountCalculate和AccountProject数据,以及添加AccountProjectSub数据
this.addAccountCalculationList(xmlToDBUtil, xmlFileTypeCd);
} else {

//通过统一的方法向数据库添加数据
this.addListContent(xmlFileTypeCd);
}

}

/*	*//**
* 向数据库添加历史映射文件的主方法
* @throws IOException
*//*
public void addAccountCalculation() throws IOException {

String xmlFileTypeCd = "01";
//取得对应的资源文件
InputStream in = getFileInputStream(xmlFileTypeCd);
//解析取到的资源文件
this.digestMethod(in,xmlFileTypeCd);
//调用递归算法,循环添加数据
this.addAccountCalculationList(xmlToDBUtil,xmlFileTypeCd);

}

*//**
* 向数据库添加预测映射文件的主方法
* @throws IOException
*//*
public void addAccountProject() throws IOException {

String xmlFileTypeCd = "02";
//取得对应的资源文件
InputStream in = getFileInputStream(xmlFileTypeCd);
//解析取到的资源文件
this.digestMethod(in,xmlFileTypeCd);
//调用递归算法,循环添加数据
this.addAccountCalculationList(xmlToDBUtil,xmlFileTypeCd);

}*/

//******************************************************************************

/**
* 获取所需要映射的XML文件
* @return
* @throws FileNotFoundException
*/
private InputStream getFileInputStream(String xmlFileTypeCd) throws FileNotFoundException {

InputStream in = null;

//历史预测类的
if("01".equals(xmlFileTypeCd)) {

in = this.getResourceAsStream(OwnerXmlTypeRoute.ACCOUNT_CALCULATION);
} else if("02".equals(xmlFileTypeCd)) {

in = this.getResourceAsStream(OwnerXmlTypeRoute.ACCOUNT_PROJECTION);
} else if("03".equals(xmlFileTypeCd)) {

in = this.getResourceAsStream(OwnerXmlTypeRoute.ACCOUNT_MAPPING_REQUEST_TO_MODEL);
} else if("04".equals(xmlFileTypeCd)) {

in = this.getResourceAsStream(OwnerXmlTypeRoute.ACCOUNT_DEFINITION);
} else if("05".equals(xmlFileTypeCd)) {

in = this.getResourceAsStream(OwnerXmlTypeRoute.ASSERTION_DEDINITION);
} else if("06".equals(xmlFileTypeCd)) {

in = this.getResourceAsStream(OwnerXmlTypeRoute.FORMULA_DEFINITION);
} else if("07".equals(xmlFileTypeCd)) {

in = this.getResourceAsStream(OwnerXmlTypeRoute.BIZ_CODE_DEF);
} else if("08".equals(xmlFileTypeCd)) {

in = this.getResourceAsStream(OwnerXmlTypeRoute.ACCOUNT_PROJECTION_SUB);
}

return in;
}

/**
* 解析XML文件,使文件转化为对象方便储存
*/
private void digestMethod(InputStream is,String xmlFileTypeCd) {

if(is==null){
throw new RuntimeException(" inputStream is null!!!" );
}
try {
Digester digester = new Digester();
digester.push(this);
digester.setValidating(false);
digester.setNamespaceAware(false);

//历史预测类的
if("01".equals(xmlFileTypeCd)
|| "02".equals(xmlFileTypeCd) || "08".equals(xmlFileTypeCd)) {

accountCalculationList = new ArrayList();

digester.addObjectCreate("calFinancialAccounts/accountCalEssentials",AccountCalEssentials.class);
digester.addSetProperties("calFinancialAccounts/accountCalEssentials");
digester.addSetNext("calFinancialAccounts/accountCalEssentials", "addAccountCalEssentials");

digester.addObjectCreate("*/paramEssentials", ParamEssentials.class);
digester.addSetProperties("*/paramEssentials");
digester.addSetNext("*/paramEssentials", "addParamEssentials",ParamEssentials.class.getName());
digester.parse(is);

} else if("03".equals(xmlFileTypeCd)) {

accountMappingRequestToModelList = new ArrayList();

digester.addObjectCreate("accountmappings/accountmapping",AccountMapping.class);
digester.addSetProperties("accountmappings/accountmapping");
digester.addSetNext("accountmappings/accountmapping", "addAccountMapping");
digester.parse(is);

} else if("04".equals(xmlFileTypeCd)) {

accountDefinitionList = new ArrayList();

digester.addObjectCreate("accounts/account",Account.class);
digester.addSetProperties("accounts/account");
digester.addSetNext("accounts/account", "addAccount");
digester.parse(is);

} else if("05".equals(xmlFileTypeCd)) {

assertionDefitionList = new ArrayList();

digester.addObjectCreate("assertionLibary/assertion",AssertionDefinition.class);
digester.addSetProperties("assertionLibary/assertion");
digester.addSetNext("assertionLibary/assertion", "addAssertionDefinition");

digester.addObjectCreate("*/param", ParamDefinition.class);
digester.addSetProperties("*/param");
digester.addSetNext("*/param", "addParamDefinition",ParamDefinition.class.getName());

digester.parse(is);

} else if("06".equals(xmlFileTypeCd)) {

formulaDefinitionList = new ArrayList();

digester.addObjectCreate("formulaLibary/formula",FormulaDefinition.class);
digester.addSetProperties("formulaLibary/formula");
digester.addSetNext("formulaLibary/formula", "addFormulaDefinition");

digester.addObjectCreate("*/param", ParamDefinition.class);
digester.addSetProperties("*/param");
digester.addSetNext("*/param", "addParamDefinition",ParamDefinition.class.getName());

digester.parse(is);

} else if("07".equals(xmlFileTypeCd)) {

bizCodeDefList = new ArrayList();

digester.addObjectCreate("bizCodes/bizCode",BizCodeDef.class);
digester.addSetProperties("bizCodes/bizCode");
digester.addSetNext("bizCodes/bizCode", "addBizCodeDef");
digester.parse(is);

}

} catch (Exception ex) {
ex.printStackTrace();
}
}

/**
* AccountCalculate和AccountProject使用该方法添加对象
* 该方法为私有类 digestMethod调用的,把该类中解析出来的对象加到 List列表之中
* @param accountCalEssentials
*/
public static void addAccountCalEssentials(AccountCalEssentials accountCalEssentials){

accountCalculationList.add(accountCalEssentials);
}

/**
* AccountDefinition使用该方法添加对象
* @param account
*/
public static void addAccount(Account account) {

accountDefinitionList.add(account);
}

/**
* AccountMappingRequestToModel使用该方法添加对象
* @param accountMapping
*/
public static void addAccountMapping(AccountMapping accountMapping){

accountMappingRequestToModelList.add(accountMapping);
}

/**
* AssertionDefinition使用该方法添加对象
* @param assertionDefinition
*/
public static void addAssertionDefinition(AssertionDefinition assertionDefinition) {

assertionDefitionList.add(assertionDefinition);
}

/**
* FormulaDefinition使用该方法添加对象
* @param assertionDefinition
*/
public static void addFormulaDefinition(FormulaDefinition formulaDefinition) {

formulaDefinitionList.add(formulaDefinition);
}

/**
* BizCodeDef使用该方法添加对象
* @param assertionDefinition
*/
public static void addBizCodeDef(BizCodeDef bizCodeDef) {

bizCodeDefList.add(bizCodeDef);
}

/**
* 该方法会 把List列表中的数据批量添加到数据库中
* @throws IOException
*/
private void addListContent(String xmlFileTypeCd) throws IOException {

//    	List list = null;

//历史预测类的
if("03".equals(xmlFileTypeCd)) {

xmlToDBUtil.getHibernateTemplate().saveOrUpdateAll(accountMappingRequestToModelList);
} else if("04".equals(xmlFileTypeCd)) {

xmlToDBUtil.getHibernateTemplate().saveOrUpdateAll(accountDefinitionList);
} else if("05".equals(xmlFileTypeCd)) {

for(int i=0;i<assertionDefitionList.size();i++) {
AssertionDefinition assertionDefinition = (AssertionDefinition)assertionDefitionList.get(i);
assertionDefinition.setOwner(xmlFileTypeCd);
List paramDefinitionList = assertionDefinition.getAssertionParamDefinitionList();
if(paramDefinitionList != null && paramDefinitionList.size()>0) {
for(int j=0;j<paramDefinitionList.size();j++) {
ParamDefinition paramDefinition = (ParamDefinition)paramDefinitionList.get(j);
paramDefinition.setParentIdentityName(assertionDefinition.getAssertionIdentityName());
paramDefinition.setOwner(xmlFileTypeCd);
}
xmlToDBUtil.getHibernateTemplate().saveOrUpdateAll(paramDefinitionList);
}
}
xmlToDBUtil.getHibernateTemplate().saveOrUpdateAll(assertionDefitionList);

} else if("06".equals(xmlFileTypeCd)) {

for(int i=0;i<formulaDefinitionList.size();i++) {
FormulaDefinition formulaDefinition = (FormulaDefinition)formulaDefinitionList.get(i);
formulaDefinition.setOwner(xmlFileTypeCd);
List paramDefinitionList = formulaDefinition.getFormulaParamDefinitionList();
if(paramDefinitionList != null && paramDefinitionList.size()>0) {
for(int j=0;j<paramDefinitionList.size();j++) {
ParamDefinition paramDefinition = (ParamDefinition)paramDefinitionList.get(j);
paramDefinition.setParentIdentityName(formulaDefinition.getFormulaIdentityName());
paramDefinition.setOwner(xmlFileTypeCd);
}
xmlToDBUtil.getHibernateTemplate().saveOrUpdateAll(paramDefinitionList);
}
}
xmlToDBUtil.getHibernateTemplate().saveOrUpdateAll(formulaDefinitionList);

} else if("07".equals(xmlFileTypeCd)) {

xmlToDBUtil.getHibernateTemplate().saveOrUpdateAll(bizCodeDefList);
}

}

/**
* 该方法 会调用后来的递归方法,把对象依次加入数据库中
* @param xmlToDBUtil
* @return
* @throws IOException
*/
private List addAccountCalculationList(XmlToDBUtil xmlToDBUtil,String xmlFileTypeCd) throws IOException {

int accountSize = accountCalculationList.size();
List paramEssentialsList = null;
StringBuffer sb = null;
if(accountCalculationList != null &&  accountSize> 0) {
for(int i=0;i<accountSize;i++) {
AccountCalEssentials accountCalEssentials = (AccountCalEssentials)accountCalculationList.get(i);
accountCalEssentials.setOwner(xmlFileTypeCd);
sb = new StringBuffer();
sb.append(accountCalEssentials.getAccountCode());
paramEssentialsList = accountCalEssentials.getParamEssentialsList();
this.showParamEssentials(paramEssentialsList,sb,xmlToDBUtil,sb.toString(),xmlFileTypeCd);
xmlToDBUtil.getHibernateTemplate().saveOrUpdate(accountCalEssentials);
}
}

return accountCalculationList;

}

/**
* 该方法为递归调用方法的调用者
* @param paramEssentialsList
* @param sb
* @param xmlToDBUtil
* @param accountCode
*/
private void showParamEssentials(List paramEssentialsList,StringBuffer sb,XmlToDBUtil xmlToDBUtil,String accountCode,String xmlFileTypeCd) {

this.calParamEssentials(paramEssentialsList, sb.toString(),true,xmlToDBUtil,accountCode,xmlFileTypeCd);
}

/**
* 该方法为递归方法,循环调用自己,直至把所有的文件都加到数据库中为止
* @param paramEssentialsList
* @param parentNum
* @param isTop
* @param xmlToDBUtil
* @param accountCode
* @return
*/
private StringBuffer calParamEssentials(List paramEssentialsList,String parentNum,boolean isTop,XmlToDBUtil xmlToDBUtil,String accountCode,String xmlFileTypeCd) {

if(paramEssentialsList != null && paramEssentialsList.size() >0) {
for(int j=0;j<paramEssentialsList.size();j++) {

ParamEssentials paramEssentials = (ParamEssentials)paramEssentialsList.get(j);

if(paramEssentials.getParamEssentialsList() != null && paramEssentials.getParamEssentialsList().size()>0) {

paramEssentials.setParamNum(parentNum+"_0" + (j+1));

if(parentNum.length()<11) {
paramEssentials.setAccountCode(accountCode);
}

if(isTop){
paramEssentials.setParentParamNum("0");
}else{
paramEssentials.setParentParamNum(parentNum);
}
paramEssentials.setOwner(xmlFileTypeCd);
xmlToDBUtil.getHibernateTemplate().saveOrUpdate(paramEssentials);

this.calParamEssentials(paramEssentials.getParamEssentialsList(),paramEssentials.getParamNum(),false,xmlToDBUtil,accountCode,xmlFileTypeCd);
}
else {

paramEssentials.setParamNum(parentNum+"_0"+(j+1));

if(parentNum.length()<11) {
paramEssentials.setAccountCode(accountCode);
}

if(isTop){
paramEssentials.setParentParamNum("0");
}else{
paramEssentials.setParentParamNum(parentNum);
}
paramEssentials.setOwner(xmlFileTypeCd);
xmlToDBUtil.getHibernateTemplate().saveOrUpdate(paramEssentials);

}
}
}

return null;
}

private InputStream getResourceAsStream(String resouce)
{
ClassLoader cl = XmlToDBUtil.class.getClassLoader();

if( cl!=null )
return cl.getResourceAsStream( resouce );
else
return ClassLoader.getSystemResourceAsStream( resouce );
}


3。OwnerXmlTypeRoute类

public static final String ACCOUNT_ROOT = "cn/ccb/faengine/foundation/model/commoncorporation/";

public static final String ACCOUNT_CALCULATION = ACCOUNT_ROOT + "AccountCalculation.xml";

public static final String ACCOUNT_MAPPING_REQUEST_TO_MODEL = ACCOUNT_ROOT + "AccountMappingRequestToModel.xml";

public static final String ACCOUNT_PROJECTION = ACCOUNT_ROOT + "AccountProjection.xml";

public static final String ACCOUNT_PROJECTION_SUB = ACCOUNT_ROOT + "AccountProjectionSub.xml";

public static final String ACCOUNT_DEFINITION = ACCOUNT_ROOT + "AccountDefinition.xml";

public static final String TOOLLIB_ROOT = "cn/ccb/faengine/foundation/toollib/";

public static final String ASSERTION_DEDINITION = TOOLLIB_ROOT + "AssertionDefinition.xml";

public static final String FORMULA_DEFINITION = TOOLLIB_ROOT + "FormulaDefinition.xml";

public static final String BIZ_CODE_DEF = "cn/ccb/faengine/common/bizcode/BizCode.xml";


Spring以及Hibernate配置文件的内容省略。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐