package org.quickbundle.mda.gc; import java.net.MalformedURLException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.apache.commons.collections.map.CaseInsensitiveMap; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.quickbundle.tools.helper.xml.RmXmlHelper; public class PdmParser { private Document pdm = null; private Map mPdmColumn = null; public PdmParser(String pdmPath) throws MalformedURLException, DocumentException { pdm = RmXmlHelper.parse(RmXmlHelper.formatToUrl(pdmPath)); mPdmColumn = getCodeNameByPdm(); } /** * 功能: Map中存放String[], a[0]=表的Name,a[1]=表的Comment,a[2]=表的多个BusinessRule * * @param pdmPath * @return */ private Map getCodeNameByPdm() { Map mColumn = null; try { Map mBusinessRule = new HashMap(); for (Iterator iter = pdm.selectNodes("//c:BusinessRules/o:BusinessRule").iterator(); iter.hasNext();) { Element eleBusinessRule = (Element) iter.next(); mBusinessRule.put(eleBusinessRule.valueOf("@Id"), eleBusinessRule.valueOf("a:Code")); } mColumn = new CaseInsensitiveMap(); for (Iterator iter = pdm.selectNodes("//o:Table[a:Code]").iterator(); iter.hasNext();) { Element ele = (Element) iter.next(); String tableName = ele.valueOf("a:Code"); mColumn.put(tableName, getPdmInfo(ele, mBusinessRule)); for (Iterator iterator = ele.selectNodes(".//o:Column").iterator(); iterator.hasNext();) { Element eleColumn = (Element) iterator.next(); //System.out.println(tableName + ":" + eleColumn.valueOf("a:Code") + ":" + eleColumn.valueOf("a:Name")); mColumn.put(tableName + ":" + eleColumn.valueOf("a:Code"), getPdmInfo(eleColumn, mBusinessRule)); } } } catch (Exception e) { QbXmlGenerateCodePlugin.log(e.getMessage()); } return mColumn; } private String[] getPdmInfo(Element ele, Map mBusinessRule) { String columnBusinessRule = ""; for (Iterator itColumnAttackRule = ele.selectNodes("c:AttachedRules/o:BusinessRule").iterator(); itColumnAttackRule.hasNext();) { Element eleBusinessRule = (Element)itColumnAttackRule.next(); if(columnBusinessRule.length() > 0) { columnBusinessRule += ","; } columnBusinessRule += mBusinessRule.get(eleBusinessRule.valueOf("@Ref")).toString(); } String[] aTableInfo = new String[]{ele.valueOf("a:Name"), ele.valueOf("a:Comment"), columnBusinessRule}; return aTableInfo; } public Document getPdm() { return pdm; } public Map getMPdmColumn() { return mPdmColumn; } }