数据库建模pdm文件的解析、简单删除表和保存

工具的开发背景:
crm系统以ework为基础改造而来,以前简单起见和ework混合了代码和表的,现在需要分析,就需要重新分析,哪些是共用的,哪些是私有的。
通过日志中打印的表名,可以分析出哪些表是crm独有的。
通过pdm文件表的创建记录确定哪些表是新表,新的表少,再除去crm独有的,所以方便人工检查哪些是crm专有的。

另外分析了us系统那边用到的表(那边用到的就肯定不能公用),
cas、权限、用户、组织单位、数据字典的肯定是公用的。
另外考虑以前开发中折中,偷懒,有些方法混合了ework、crm一方使用无需用到的表,目前一时没法剥离,需要确定备忘。

总体思路:
日志(或初始化sql脚本)或pdm中分析出来的表名列表结果分别存到集合包里面,通过里面的CollectionTool.java做集合的运算、打印(打印表名、编码、pdm中所属包方便人工判断)、保存。

工具编写匆忙,可能有少量bug和注释不统一的地方,不懂的请研究代码,恕不做技术支持。

pdm解析的

package chenxiaowen.tool.pdm;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.TreeSet;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import chenxiaowen.tool.collections.CollectionTool;
import chenxiaowen.tool.pdm.pojo.Column;
import chenxiaowen.tool.pdm.pojo.PhysicalDiagram;
import chenxiaowen.tool.pdm.pojo.Table;

/**
* pdm文件解析出 PhysicalDiagram、Table、Column<br>
* 演示了pdm元素的查找、删除、保存。 <br>
* 如果文件很大导致内存溢出,请配置运行的vm参数,如:-Xms400m -Xmx1024m<br>
* <br>
* dom4j的xpath查找xml的指定节点 <br>
* http://blog.csdn.net/sidihuo/article/details/41310727<br>
* xpath表达式如: <br>
* "//div[@style][@id='BlogArticleDetail']/[1]"<br>
* "//div[@class='PageSkip_1']//a[@title]/[1]/text()"<br>
* "//div[@class='PageSkip_1']//a/text()"<br>
* "//div[@class='ArticleTitle']/text()[1]"<br>
* "//div[@class='PageSkip_1']//a[@title]/[1]/text()" <br>
*
* @author 陈小稳 33881270@qq.com
*/
public class PdmParser {
private File pdmFile;
private Document doc;
private ArrayList<Table> tableList = null;
// <表id,表>
private HashMap<String, Table> idTableMap = null;
// <表code,表>
private HashMap<String, Table> codeTableMap = null;
// <表id,表所属PhysicalDiagram>
private HashMap<String, PhysicalDiagram> idPhysicalDiagramMap = null;
private ArrayList<PhysicalDiagram> PhysicalDiagramsList = null;
private boolean hasParseColumns;
private boolean hasParsePhysicalDiagrams;
private boolean hasParseTables;

public static void main(String[] args) throws Exception {
File pdmFile = new File("D:\\Desktop\\PhysicalData_1.pdm");
PdmParser parseTool = new PdmParser(pdmFile);

// //按 PhysicalDiagram>表>字段 打印
// parseTool.printAllInfo();

// //按 PhysicalDiagram>表>字段 打印指定日期后新增的表和字段信息
// parseTool.printAddedInfoAfterDate("2016-12-10 00:01");

// //打印指定日期后新增的表的信息
// parseTool.printAddedTablesAfterDate("2016-12-10 00:01");

// // 指定日期后新增的表的信息输出到集合文件
// parseTool.writeAddedTablesAfterDateToCollectionFile("2016-06-01",
// "z.new_crm.txt");

// // 将所有表名输入到表名集合文件
// parseTool.printAllTablesToCollectionFile("4.txt");

// //将所有pdm文件中有表定义没所属包的表的表名输入到表名集合文件
// parseTool.printTablesWithOutSymbolToCollectionFile("4.txt");

// // 编辑保存
// parseTool.deleteTableByCode("t_3,Table_1");
// File file = new File("D:\\Desktop\\new.pdm");
// parseTool.saveToFile(file);

// String datastr="2016-12-9 23:24";//查询的日期转换成pdm格式的时间
// Date date1 = DateUtils.parseDate(datastr, new String[]{"yyyy-MM-dd
// HH:mm","yyyy-MM-dd"});
// String compareDate = date1.getTime()/1000+"";
// System.out.println(compareDate);//1481297040
// System.out.println(System.currentTimeMillis());//1481297096391

// String creationDate="1481286082";//pdm格式的时间转换为一般可视化日期
// Long timeMillis = Long.parseLong(creationDate)*1000;
// Date date2 = new Date(timeMillis);
// String datastr2 = DateFormatUtils.format(date2, "yyyy-MM-dd
// HH:mm:ss");
// System.out.println(datastr2);//2016-12-09 20:21:22

}

/**
* 根据表名删除指定节点
*
* @param parseTool
* @param string
* @throws DocumentException
*/
public void deleteTableByCode(String tableCodes) throws DocumentException {
String[] codes = tableCodes.split(",");
if (!this.hasParseTables) {
parseTables();
}
if (!this.hasParsePhysicalDiagrams) {
parsePhysicalDiagrams();
}
for (int i = 0; i < codes.length; i++) {
String code = codes[i];
if (StringUtils.isEmpty(code)) {
continue;
}
Table table = codeTableMap.get(code);
if (table == null) {
System.err.println("要删除的表 " + code + " 不在pdm中");
continue;
}
String tableid = table.getId();

// 根据table 的Id属性过滤
String xpath = "//c:Tables/o:Table[@Id='" + tableid + "']";

// 根据表格的code节点的文本内容查找到code节点,再获得上级(也就是表格)
// String xpath = "//c:Tables/o:Table/a:Code[text()='" + code +
// "']/..";

List<Element> composites = this.getDoc().selectNodes(xpath);
if (CollectionUtils.isEmpty(composites)) {
System.err.println("没找到编号为 " + code + " 的表");
} else if (composites.size() > 1) {
System.err.println("找到编号为 " + code + " 的表,但不唯一");
} else {
Element tableElement = composites.get(0);
// String tableid = tableElement.attributeValue("Id");

System.out.println("删除表,编号为 " + code + ",id=" + tableid
+ " 位置:" + idPhysicalDiagramMap.get(tableid).getName());
// 删表
tableElement.getParent().remove(tableElement);

// 删除表所属包的关系
String xpath2 = "//c:PhysicalDiagrams//c:Symbols//o:Table[@Ref='"
+ tableid + "']";// 简写部分关键路径
// String xpath2 =
// "//c:PhysicalDiagrams//o:PhysicalDiagram//c:Symbols//o:TableSymbol//c:Object//o:Table[@Ref='"
// + tableid + "']";//完整路径
List<Element> composites2 = this.getDoc().selectNodes(xpath2);
if (CollectionUtils.isNotEmpty(composites2)) {
System.out.println("删表(编号为 " + code + ")的包、表关系 "
+ composites2.size() + " 处");
for (Iterator iterator = composites2.iterator(); iterator
.hasNext();) {
Element element = (Element) iterator.next();
// 删表的引用
Element oTableSymbolElement = element.getParent()
.getParent();
oTableSymbolElement.getParent().remove(
oTableSymbolElement);
}
} else {
System.err.println("删表编号为 " + code + "的表,找不到所属包");
}

// 删除表所属外键的关系
String xpath3 = "//c:References//o:Table[@Ref='" + tableid
+ "']";// 简写部分关键路径
List<Element> composites3 = this.getDoc().selectNodes(xpath3);
if (CollectionUtils.isNotEmpty(composites3)) {
System.out.println("删表(编号为 " + code + ")的外键 "
+ composites3.size() + " 处");
for (Iterator iterator = composites3.iterator(); iterator
.hasNext();) {
Element element = (Element) iterator.next();
Element oReferenceElement = element.getParent()
.getParent();
oReferenceElement.getParent().remove(oReferenceElement);
}
} else {
System.out.println("删表编号为 " + code + "的表,找不到相关外键");
}

}
}
}

public HashMap<String, PhysicalDiagram> getIdPhysicalDiagramMap() {
return idPhysicalDiagramMap;
}

public void setIdPhysicalDiagramMap(
HashMap<String, PhysicalDiagram> idPhysicalDiagramMap) {
this.idPhysicalDiagramMap = idPhysicalDiagramMap;
}

public void saveToFile(File file) {
try {
if (file.exists()) {
System.out.println("del " + file.getAbsolutePath());
file.delete();
}
/*
* OutputFormat format = new OutputFormat();// 指定XML的输出样式
* OutputFormat.createPrettyPrint() format.setEncoding("UTF-8"); //
* 指定XML编码 XMLWriter writer = new XMLWriter(new FileWriter(file),
* format); Document doc = this.getDoc();
* doc.setXMLEncoding("UTF-8"); writer.write(doc); writer.close();
*/

// 解决输出乱码问题
OutputFormat format = new OutputFormat();
format.setEncoding("UTF-8");
OutputStream out = new FileOutputStream(file);
XMLWriter writer = new XMLWriter(out, format);
writer.write(this.getDoc());
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 解析 PhysicalDiagram、表、字段 信息
*
* @param parseTool
* @throws DocumentException
*/
public void parseAllInfo() throws DocumentException {
if (!this.hasParseTables) {
parseTables();
}
if (!this.hasParseColumns) {
parseColumns();
}
if (!this.hasParsePhysicalDiagrams) {
parsePhysicalDiagrams();
}
}

/**
* 解析多个pdm文件的表和模块
*
* @param pdmFiles
* @return
* @throws DocumentException
*/
public static PdmParser parseTablesAndPhysicalDiagrams(String[] pdmFiles)
throws DocumentException {
// <表code,表>
HashMap<String, Table> codeTableMap = new HashMap<String, Table>();
// <表id,表所属PhysicalDiagram>
HashMap<String, PhysicalDiagram> idPhysicalDiagramMap = new HashMap<String, PhysicalDiagram>();
for (int i = 0; i < pdmFiles.length; i++) {
File pdmFile1 = new File(pdmFiles[i]);
PdmParser parseTool1 = new PdmParser(pdmFile1);
parseTool1.parseTables();
parseTool1.parsePhysicalDiagrams();
HashMap<String, Table> codeTableMap1 = parseTool1.getCodeTableMap();
HashMap<String, PhysicalDiagram> idPhysicalDiagramMap1 = parseTool1
.getIdPhysicalDiagramMap();
codeTableMap.putAll(codeTableMap1);
idPhysicalDiagramMap.putAll(idPhysicalDiagramMap1);
}
PdmParser r = new PdmParser(null);
r.setIdPhysicalDiagramMap(idPhysicalDiagramMap);
r.setCodeTableMap(codeTableMap);
return r;
}

/**
* 按 PhysicalDiagram>表>字段 打印指定日期后新增的表和字段信息
*
* @param parseTool
* @param datastr
* 查询的时间,如:"2016-12-9 20:21:22"
* @throws ParseException
* @throws DocumentException
*/
public void printAddedInfoAfterDate(String datastr) throws ParseException,
DocumentException {
if (!this.hasParseTables) {
parseTables();
}
if (!this.hasParseColumns) {
parseColumns();
}
if (!this.hasParsePhysicalDiagrams) {
parsePhysicalDiagrams();
}
// 如果表是新增的,则在 表上标记新增。
// 如果表是旧的,字段是新增的,则在 字段 上标记新增。
Date date1 = DateUtils.parseDate(datastr, new String[] {
"yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM-dd" });
String compareDateTicksStr = date1.getTime() / 1000 + "";
System.out.println("==打印指定日期 " + datastr + "(" + compareDateTicksStr
+ ") 之后新增的表格和字段============================");
for (Iterator iterator = this.getPhysicalDiagramsList().iterator(); iterator
.hasNext();) {
PhysicalDiagram pd = (PhysicalDiagram) iterator.next();
Boolean packHasPrint = false;
ArrayList<String> tableIds = pd.getTableIds();
for (Iterator iterator2 = tableIds.iterator(); iterator2.hasNext();) {
String tableid = (String) iterator2.next();
Table table = this.getIdTableMap().get(tableid);
Boolean tableHasPrint = false;
// 发现指定日期后的表格
if (table.getCreationDate().compareTo(compareDateTicksStr) >= 0) {
if (!packHasPrint) {
packHasPrint = true;
System.out.println("" + pd);
}
tableHasPrint = true;
System.out.println("\t【new】" + table);
}
ArrayList<Column> columns = table.getColumns();
Boolean tableIsNew = tableHasPrint;
for (Iterator iterator3 = columns.iterator(); iterator3
.hasNext();) {
Column column = (Column) iterator3.next();
// 发现指定日期后的字段
if (column.getCreationDate().compareTo(compareDateTicksStr) >= 0) {
if (!packHasPrint) {
packHasPrint = true;
System.out.println("" + pd);
}
if (!tableHasPrint) {
tableHasPrint = true;
System.out.println("\t" + table);
}

System.out.println("\t\t" + (tableIsNew ? "" : "【new】")
+ column);
}
}
}
}
}

/**
* 打印指定日期后新增的表的信息
*
* @param datastr
* @throws ParseException
* @throws DocumentException
*/
public void printAddedTablesAfterDate(String datastr)
throws ParseException, DocumentException {
if (!this.hasParseTables) {
parseTables();
}
Date date1 = DateUtils.parseDate(datastr, new String[] {
"yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM-dd" });
String compareDateTicksStr = date1.getTime() / 1000 + "";
TreeSet<String> adds = new TreeSet<String>();
for (Iterator iterator2 = tableList.iterator(); iterator2.hasNext();) {
Table table = (Table) iterator2.next();
// 发现指定日期后的表格
if (table.getCreationDate().compareTo(compareDateTicksStr) >= 0) {
adds.add(table.getCode());
}
}
for (Iterator iterator = adds.iterator(); iterator.hasNext();) {
String tablecode = (String) iterator.next();
System.out.println(tablecode + ",");
}
}

/**
* 指定日期后新增的表的信息输出到集合文件
*
* @param datastr
* @throws ParseException
* @throws DocumentException
*/
public void writeAddedTablesAfterDateToCollectionFile(String datastr,
String filename) throws Exception {
if (!this.hasParseTables) {
parseTables();
}
Date date1 = DateUtils.parseDate(datastr, new String[] {
"yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM-dd" });
String compareDateTicksStr = date1.getTime() / 1000 + "";
TreeSet<String> adds = new TreeSet<String>();
for (Iterator iterator2 = tableList.iterator(); iterator2.hasNext();) {
Table table = (Table) iterator2.next();
// 发现指定日期后的表格
if (table.getCreationDate().compareTo(compareDateTicksStr) >= 0) {
adds.add(table.getCode());
}
}
CollectionTool.writeCollectionFile(filename, adds);
}

/**
* 将所有表名输入到表名集合文件
*
* @param filename
* @throws DocumentException
*/
public void printAllTablesToCollectionFile(String filename)
throws Exception {
if (!this.hasParseTables) {
parseTables();
}
TreeSet<String> a = new TreeSet<String>();
for (Iterator iterator = tableList.iterator(); iterator.hasNext();) {
Table t = (Table) iterator.next();
a.add(t.getCode());
}
CollectionTool.writeCollectionFile(filename, a);
}

/**
* 将所有pdm文件中有表定义没所属包的表的表名输入到表名集合文件
*
* @param filename
* @throws DocumentException
*/
public void printTablesWithOutSymbolToCollectionFile(String filename)
throws Exception {
if (!this.hasParseTables) {
parseTables();
}
if (!this.hasParsePhysicalDiagrams) {
parsePhysicalDiagrams();
}
TreeSet<String> a = new TreeSet<String>();
for (Iterator iterator = tableList.iterator(); iterator.hasNext();) {
Table t = (Table) iterator.next();
String tbid = t.getId();
PhysicalDiagram symbol = idPhysicalDiagramMap.get(tbid);
if (symbol == null) {
a.add(t.getCode());
}
}
CollectionTool.writeCollectionFile(filename, a);
}

/**
* 按 PhysicalDiagram>表>字段 打印
*
* @param parseTool
* @throws DocumentException
*/
public void printAllInfo() throws DocumentException {
if (!this.hasParseTables) {
parseTables();
}
if (!this.hasParseColumns) {
parseColumns();
}
if (!this.hasParsePhysicalDiagrams) {
parsePhysicalDiagrams();
}

System.out
.println("==按 PhysicalDiagram>表>字段 打印======================================================================");
for (Iterator iterator = getPhysicalDiagramsList().iterator(); iterator
.hasNext();) {
PhysicalDiagram pd = (PhysicalDiagram) iterator.next();
System.out.println(pd.toString());
ArrayList<String> tableIds = pd.getTableIds();
for (Iterator iterator2 = tableIds.iterator(); iterator2.hasNext();) {
String tableid = (String) iterator2.next();
Table table = getIdTableMap().get(tableid);
System.out.println("\t" + table);
ArrayList<Column> columns = table.getColumns();
for (Iterator iterator3 = columns.iterator(); iterator3
.hasNext();) {
Column column = (Column) iterator3.next();
System.out.println("\t\t" + column);
}
}
}
}

/**
* 1.解析所有表格
*
* @throws DocumentException
*/
public void parseTables() throws DocumentException {
tableList = new ArrayList<Table>();
idTableMap = new HashMap<String, Table>();
codeTableMap = new HashMap<String, Table>();
Iterator itr = doc.selectNodes("//c:Tables//o:Table").iterator();
Table table = null;
while (itr.hasNext()) {
table = new Table();
Element tableElement = (Element) itr.next();
String id = tableElement.attribute("Id").getValue();
table.setId(id);
String code = tableElement.elementTextTrim("Code");
code = code.toLowerCase();
table.setCode(code);
table.setName(tableElement.elementTextTrim("Name"));
table.setCreationDate(tableElement.elementTextTrim("CreationDate"));
table.setModificationDate(tableElement
.elementTextTrim("ModificationDate"));
tableList.add(table);
idTableMap.put(id, table);
codeTableMap.put(code, table);
}
this.hasParseTables = true;
}

/**
* 2.解析所有PhysicalDiagram和PhysicalDiagram包含的表
*
* @throws DocumentException
*/
public void parsePhysicalDiagrams() throws DocumentException {
PhysicalDiagramsList = new ArrayList<PhysicalDiagram>();
idPhysicalDiagramMap = new HashMap<String, PhysicalDiagram>();
Iterator itr = doc.selectNodes(
"//c:PhysicalDiagrams//o:PhysicalDiagram").iterator();
PhysicalDiagram physicalDiagram = null;
while (itr.hasNext()) {
physicalDiagram = new PhysicalDiagram();
Element element = (Element) itr.next();
String id = element.attribute("Id").getValue();
physicalDiagram.setId(id);
String code = element.elementTextTrim("Code");
code = code.toLowerCase();
physicalDiagram.setName(element.elementTextTrim("Name"));
physicalDiagram.setCode(code);
// physicalDiagram.setCreationDate(element.elementTextTrim("CreationDate"));
// physicalDiagram.setModificationDate(element.elementTextTrim("ModificationDate"));
PhysicalDiagramsList.add(physicalDiagram);

// System.out.println("name:"+physicalDiagram.getName()+"
// id:"+physicalDiagram.getId());
// 不以“//”开头,表示从下级里面查找
Iterator ittable = element.selectNodes(
"c:Symbols//o:TableSymbol//c:Object//o:Table").iterator();
ArrayList<String> tableIds = new ArrayList<String>();
while (ittable.hasNext()) {
Element reftable = (Element) ittable.next();
String tableid = reftable.attribute("Ref").getValue();
// System.out.println("ref tableid:"+tableid);
tableIds.add(tableid);
idPhysicalDiagramMap.put(tableid, physicalDiagram);
}
physicalDiagram.setTableIds(tableIds);
}
this.hasParsePhysicalDiagrams = true;
}

/**
* 3.解析表的字段和pk
*
* @param table
* @throws DocumentException
*/

public void parseColumns() throws DocumentException {
for (Iterator iterator = getTableList().iterator(); iterator.hasNext();) {
Table table = (Table) iterator.next();
parseColumnsOfTable(table);
}
this.hasParseColumns = true;
}

/**
* 解析表的字段和pk
*
* @param table
* @throws DocumentException
*/
public void parseColumnsOfTable(Table table) throws DocumentException {
ArrayList<Column> columnlist = new ArrayList<Column>();
Column column = null;
Element tableElement = getTableElementById(table.getId());
// Iterator itr1 =
// tableElement.element("Columns").elements("Column").iterator();
Iterator itr1 = tableElement.selectNodes("c:Columns//o:Column")
.iterator();
while (itr1.hasNext()) {
column = new Column();
Element columnElement = (Element) itr1.next();
String id = columnElement.attributeValue("Id");
// String id = columnElement.attribute("Id").getValue();
column.setId(id);
column.setName(columnElement.elementTextTrim("Name"));
String code = columnElement.elementTextTrim("Code");
code = code.toLowerCase();
column.setCode(code);
column.setCreationDate(columnElement
.elementTextTrim("CreationDate"));
column.setModificationDate(columnElement
.elementTextTrim("ModificationDate"));
String length = columnElement.elementTextTrim("Length");
column.setLength(length == null ? null : Integer.parseInt(length));
String dataType = columnElement.elementTextTrim("DataType");
if (dataType.indexOf("(") > 0) {
column.setType(dataType.substring(0, dataType.indexOf("(")));
} else {
column.setType(dataType);
}
columnlist.add(column);
}
table.setColumns(columnlist);

// set pk
if (tableElement.element("Keys") != null) {
String keys_primarykey_ref_id = tableElement.element("PrimaryKey")
.element("Key").attributeValue("Ref");
String keys_key_id = tableElement.element("Keys").element("Key")
.attributeValue("Id");
if (keys_primarykey_ref_id.equals(keys_key_id)) {
String keys_column_ref = tableElement.element("Keys").element(
"Key").element("Key.Columns").element("Column")
.attributeValue("Ref");
for (Iterator iterator = columnlist.iterator(); iterator
.hasNext();) {
Column columni = (Column) iterator.next();
if (keys_column_ref.equals(columni.getId())) {
columni.setPkFlag(true);
table.setPkFieldCode(columni.getCode());
}
}
}
}
}

/**
* 根据Id找到 PhysicalDiagram 元素
*
* @param id
* @return
* @throws DocumentException
*/
public Element getPhysicalDiagramElementById(String id)
throws DocumentException {
Element tableElement = getElementByTypePathAndAttrVal(
"//c:PhysicalDiagrams//o:PhysicalDiagram", "Id", id);
return tableElement;
}

/**
* 根据Id找到表元素
*
* @param id
* @return
* @throws DocumentException
*/
public Element getTableElementById(String id) throws DocumentException {
Element tableElement = getElementByTypePathAndAttrVal(
"//c:Tables//o:Table", "Id", id);
return tableElement;
}

/**
* 根据typepath找到指定类型的元素,再根据元素上的属性定位具体的元素
*
* @param typepath
* @param attrName
* @param attrVal
* @return
* @throws DocumentException
*/
public Element getElementByTypePathAndAttrVal(String typepath,
String attrName, String attrVal) throws DocumentException {
Iterator itr = doc.selectNodes(typepath).iterator();
Table table = null;
while (itr.hasNext()) {
Element element = (Element) itr.next();
Attribute attr = element.attribute(attrName);
if (attr != null) {
String txt = attr.getValue();
if (StringUtils.equalsIgnoreCase(attrVal, txt)) {
return element;
}
}
}
return null;
}

/**
* 枚举列出元素上的所有属性
*
* @param tableElement
*/
private void showAttributes(Element tableElement) {
List<Attribute> listAttr = tableElement.attributes();// 当前节点的所有属性的list
for (Attribute attr : listAttr) {// 遍历当前节点的所有属性
String name = attr.getName();// 属性名称
String value = attr.getValue();// 属性的值
System.out.println("属性名称:" + name + "属性值:" + value);
}
}

/**
* @deprecated
* @throws DocumentException
*/
private void printTables() throws DocumentException {
if (CollectionUtils.isNotEmpty(tableList)) {
for (Iterator iterator = tableList.iterator(); iterator.hasNext();) {
Table table = (Table) iterator.next();
System.out.println(table.getCode() + "\t" + table.getId());
}
}
}

public PdmParser(File pdmFile) throws DocumentException {
this.pdmFile = pdmFile;
if (pdmFile != null && pdmFile.exists()) {
SAXReader sr = new SAXReader();
this.doc = sr.read(this.pdmFile);
}
}

public ArrayList<Table> getTableList() {
return tableList;
}

public void setTableList(ArrayList<Table> tableList) {
this.tableList = tableList;
}

public ArrayList<PhysicalDiagram> getPhysicalDiagramsList() {
return PhysicalDiagramsList;
}

public void setPhysicalDiagramsList(
ArrayList<PhysicalDiagram> physicalDiagramsList) {
PhysicalDiagramsList = physicalDiagramsList;
}

public HashMap<String, Table> getIdTableMap() {
return idTableMap;
}

public void setIdTableMap(HashMap<String, Table> idTableMap) {
this.idTableMap = idTableMap;
}

public Document getDoc() {
return doc;
}

public void setDoc(Document doc) {
this.doc = doc;
}

public HashMap<String, Table> getCodeTableMap() {
return codeTableMap;
}

public void setCodeTableMap(HashMap<String, Table> codeTableMap) {
this.codeTableMap = codeTableMap;
}

}


package chenxiaowen.tool.pdm.pojo;

import java.util.ArrayList;

import org.apache.commons.collections.CollectionUtils;

public class Table {
private String id;
private String name;
private String code;
private String creationDate;
private String modificationDate;
private ArrayList<Column> columns;
private String pkFieldCode;


@Override
public String toString() {
return "Table " +
"{id: " + id
+ ", name: " + name
+ ", code: " + code
+ ", creationDate: " + creationDate
+ ", modificationDate: " + modificationDate
+ ", columns size: " + (CollectionUtils.isEmpty(columns)?0:columns.size())
+ "}";
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public String getCreationDate() {
return creationDate;
}

public void setCreationDate(String creationDate) {
this.creationDate = creationDate;
}

public String getModificationDate() {
return modificationDate;
}

public void setModificationDate(String modificationDate) {
this.modificationDate = modificationDate;
}

public String getPkFieldCode() {
return pkFieldCode;
}

public void setPkFieldCode(String pkFieldCode) {
this.pkFieldCode = pkFieldCode;
}

public ArrayList<Column> getColumns() {
return columns;
}

public void setColumns(ArrayList<Column> columns) {
this.columns = columns;
}

}

package chenxiaowen.tool.pdm.pojo;

import java.util.ArrayList;

import org.apache.commons.collections.CollectionUtils;

/**
* pdm文件的模块
* @author 陈小稳 33881270@qq.com
*
*/
public class PhysicalDiagram {
private String name;
private String code;
private String id;
private ArrayList<String> tableIds;
@Override
public String toString() {
return "PhysicalDiagram {id: " + id
+ ", name: " + name
+ ", code: " + code
+ ", tables in package: " + (CollectionUtils.isEmpty(tableIds)?0:tableIds.size())
+ "}";
}

public ArrayList<String> getTableIds() {
return tableIds;
}

public void setTableIds(ArrayList<String> tableIds) {
this.tableIds = tableIds;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

}


package chenxiaowen.tool.pdm.pojo;

public class Column {
private String id;
private String name;
private String code;
private String creationDate;
private String modificationDate;
private String type;
private Integer length;
private Boolean pkFlag;

@Override
public String toString() {
return "Column {id: " + id + ", name: " + name + ", code: " + code
+ ", creationDate: " + creationDate + ", modificationDate: "
+ modificationDate + "}";
}

public String getCreationDate() {
return creationDate;
}

public void setCreationDate(String creationDate) {
this.creationDate = creationDate;
}

public String getModificationDate() {
return modificationDate;
}

public void setModificationDate(String modificationDate) {
this.modificationDate = modificationDate;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getType() {
return type;
}

public void setType(String type) {
this.type = type;
}

public Integer getLength() {
return length;
}

public void setLength(Integer length) {
this.length = length;
}

public String getCode() {
return code;
}

public void setCode(String code) {
this.code = code;
}

public Boolean getPkFlag() {
return pkFlag;
}

public void setPkFlag(Boolean pkFlag) {
this.pkFlag = pkFlag;
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值