|
|
|
package xyz.wbsite.dbtool.javafx.manger;
|
|
|
|
|
|
|
|
import org.w3c.dom.Document;
|
|
|
|
import org.w3c.dom.Element;
|
|
|
|
import org.w3c.dom.NodeList;
|
|
|
|
import xyz.wbsite.dbtool.javafx.enums.FieldType;
|
|
|
|
import xyz.wbsite.dbtool.javafx.po.Field;
|
|
|
|
import xyz.wbsite.dbtool.javafx.po.Module;
|
|
|
|
import xyz.wbsite.dbtool.javafx.po.Project;
|
|
|
|
import xyz.wbsite.dbtool.javafx.po.Table;
|
|
|
|
|
|
|
|
import javax.xml.parsers.DocumentBuilder;
|
|
|
|
import javax.xml.parsers.DocumentBuilderFactory;
|
|
|
|
import javax.xml.parsers.ParserConfigurationException;
|
|
|
|
import javax.xml.transform.OutputKeys;
|
|
|
|
import javax.xml.transform.Transformer;
|
|
|
|
import javax.xml.transform.TransformerFactory;
|
|
|
|
import javax.xml.transform.dom.DOMSource;
|
|
|
|
import javax.xml.transform.stream.StreamResult;
|
|
|
|
import java.io.File;
|
|
|
|
import java.io.FileInputStream;
|
|
|
|
import java.io.FileOutputStream;
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
|
|
public class XmlManager {
|
|
|
|
|
|
|
|
public Project inflate(File xmlFile) {
|
|
|
|
Project project = new Project();
|
|
|
|
|
|
|
|
if (xmlFile == null) {
|
|
|
|
return project;
|
|
|
|
} else if (!xmlFile.exists()) {
|
|
|
|
System.err.println("文件不存在!");
|
|
|
|
} else {
|
|
|
|
//开始解析
|
|
|
|
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
|
|
|
|
FileInputStream inputStream = null;
|
|
|
|
try {
|
|
|
|
inputStream = new FileInputStream(xmlFile);
|
|
|
|
Document document = documentBuilderFactory.newDocumentBuilder().parse(inputStream);
|
|
|
|
|
|
|
|
Element dbElement = document.getDocumentElement();
|
|
|
|
|
|
|
|
if ("project".endsWith(dbElement.getNodeName())) {
|
|
|
|
System.out.println("加载模型[" + xmlFile.getName() + "]");
|
|
|
|
|
|
|
|
NodeList projectName = dbElement.getElementsByTagName("projectName");
|
|
|
|
if (projectName.getLength() == 1) {
|
|
|
|
project.setProjectName(projectName.item(0).getTextContent());
|
|
|
|
}
|
|
|
|
|
|
|
|
NodeList projectBasePackage = dbElement.getElementsByTagName("projectBasePackage");
|
|
|
|
if (projectBasePackage.getLength() == 1) {
|
|
|
|
project.setProjectBasePackage(projectBasePackage.item(0).getTextContent());
|
|
|
|
}
|
|
|
|
|
|
|
|
NodeList projectAuthor = dbElement.getElementsByTagName("projectAuthor");
|
|
|
|
if (projectAuthor.getLength() == 1) {
|
|
|
|
project.setProjectAuthor(projectAuthor.item(0).getTextContent());
|
|
|
|
}
|
|
|
|
|
|
|
|
NodeList modules = dbElement.getElementsByTagName("module");
|
|
|
|
if (modules.getLength() > 0) {
|
|
|
|
|
|
|
|
for (int i = 0; i < modules.getLength(); i++) {
|
|
|
|
Module module = new Module();
|
|
|
|
Element moduleElement = (Element) modules.item(i);
|
|
|
|
|
|
|
|
NodeList moduleName = moduleElement.getElementsByTagName("moduleName");
|
|
|
|
if (moduleName.getLength() == 1) {
|
|
|
|
module.setModuleName(moduleName.item(0).getTextContent());
|
|
|
|
}
|
|
|
|
|
|
|
|
NodeList moduleComment = moduleElement.getElementsByTagName("moduleComment");
|
|
|
|
if (moduleComment.getLength() == 1) {
|
|
|
|
module.setModuleComment(moduleComment.item(0).getTextContent());
|
|
|
|
}
|
|
|
|
|
|
|
|
NodeList modulePrefix = moduleElement.getElementsByTagName("modulePrefix");
|
|
|
|
if (modulePrefix.getLength() == 1) {
|
|
|
|
module.setModulePrefix(modulePrefix.item(0).getTextContent());
|
|
|
|
}
|
|
|
|
|
|
|
|
NodeList hasSysFields = moduleElement.getElementsByTagName("hasSysFields");
|
|
|
|
if (hasSysFields.getLength() == 1) {
|
|
|
|
module.setHasSysFields(Boolean.parseBoolean(hasSysFields.item(0).getTextContent()));
|
|
|
|
}
|
|
|
|
|
|
|
|
NodeList tables = moduleElement.getElementsByTagName("table");
|
|
|
|
if (tables.getLength() > 0) {
|
|
|
|
for (int j = 0; j < tables.getLength(); j++) {
|
|
|
|
Element tableElement = (Element) tables.item(j);
|
|
|
|
Table table = new Table();
|
|
|
|
table.setdBhandle(module);
|
|
|
|
table.setTableName(tableElement.getAttribute("tableName"));
|
|
|
|
table.setTableComment(tableElement.getAttribute("tableComment"));
|
|
|
|
table.setCreate(Boolean.parseBoolean(tableElement.getAttribute("create")));
|
|
|
|
table.setDelete(Boolean.parseBoolean(tableElement.getAttribute("delete")));
|
|
|
|
table.setUpdate(Boolean.parseBoolean(tableElement.getAttribute("update")));
|
|
|
|
table.setFind(Boolean.parseBoolean(tableElement.getAttribute("find")));
|
|
|
|
table.setGet(Boolean.parseBoolean(tableElement.getAttribute("get")));
|
|
|
|
table.setSearch(Boolean.parseBoolean(tableElement.getAttribute("search")));
|
|
|
|
table.setGetAll(Boolean.parseBoolean(tableElement.getAttribute("getAll")));
|
|
|
|
|
|
|
|
NodeList fields = tableElement.getElementsByTagName("field");
|
|
|
|
|
|
|
|
if (fields.getLength() > 0) {
|
|
|
|
for (int k = 0; k < fields.getLength(); k++) {
|
|
|
|
Element fieldElement = (Element) fields.item(k);
|
|
|
|
Field field = new Field();
|
|
|
|
field.setFieldName(fieldElement.getAttribute("fieldName"));
|
|
|
|
field.setFieldType(FieldType.parse(fieldElement.getAttribute("fieldType")));
|
|
|
|
field.setFieldLength(Integer.parseInt(fieldElement.getAttribute("fieldLength")));
|
|
|
|
field.setFieldComment(fieldElement.getAttribute("fieldComment"));
|
|
|
|
field.setDefaultValue(fieldElement.getAttribute("defaultValue"));
|
|
|
|
field.setIsSystem(Boolean.parseBoolean(fieldElement.getAttribute("IsSystem")));
|
|
|
|
field.setIsMust(Boolean.parseBoolean(fieldElement.getAttribute("isMust")));
|
|
|
|
field.setIsPrimaryKey(Boolean.parseBoolean(fieldElement.getAttribute("isPrimaryKey")));
|
|
|
|
field.setIsQuery(Boolean.parseBoolean(fieldElement.getAttribute("isQuery")));
|
|
|
|
field.setIsSearch(Boolean.parseBoolean(fieldElement.getAttribute("isSearch")));
|
|
|
|
table.putField(field);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
module.putTable(table);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
project.putModule(module);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
System.out.println("模型初始化成功...");
|
|
|
|
return project;
|
|
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
|
|
System.out.println("文件:'" + xmlFile.getName() + "'解析失败!请检查语法是否正确!");
|
|
|
|
e.printStackTrace();
|
|
|
|
} finally {
|
|
|
|
if (inputStream != null) {
|
|
|
|
try {
|
|
|
|
inputStream.close();
|
|
|
|
} catch (IOException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return project;
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean saveAs(File path, Project project) {
|
|
|
|
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
|
|
|
|
DocumentBuilder builder;
|
|
|
|
//生成DOM模型
|
|
|
|
try {
|
|
|
|
builder = dbFactory.newDocumentBuilder();
|
|
|
|
Document doc = builder.newDocument();
|
|
|
|
|
|
|
|
Element rootProject = doc.createElement("project");
|
|
|
|
doc.appendChild(rootProject);
|
|
|
|
|
|
|
|
Element projectName = doc.createElement("projectName");
|
|
|
|
projectName.setTextContent(project.getProjectName());
|
|
|
|
Element projectBasePackage = doc.createElement("projectBasePackage");
|
|
|
|
projectBasePackage.setTextContent(project.getProjectBasePackage());
|
|
|
|
Element projectAuthor = doc.createElement("projectAuthor");
|
|
|
|
projectAuthor.setTextContent(project.getProjectAuthor());
|
|
|
|
rootProject.appendChild(projectName);
|
|
|
|
rootProject.appendChild(projectBasePackage);
|
|
|
|
rootProject.appendChild(projectAuthor);
|
|
|
|
|
|
|
|
Element modules = doc.createElement("modules");
|
|
|
|
rootProject.appendChild(modules);
|
|
|
|
|
|
|
|
//region Description
|
|
|
|
for (Module md : project.getModules()) {
|
|
|
|
Element module = doc.createElement("module");
|
|
|
|
|
|
|
|
Element moduleName = doc.createElement("moduleName");
|
|
|
|
Element moduleComment = doc.createElement("moduleComment");
|
|
|
|
Element modulePrefix = doc.createElement("modulePrefix");
|
|
|
|
Element hasSysFields = doc.createElement("hasSysFields");
|
|
|
|
moduleName.setTextContent(md.getModuleName());
|
|
|
|
moduleComment.setTextContent(md.getModuleComment());
|
|
|
|
modulePrefix.setTextContent(md.getModulePrefix());
|
|
|
|
hasSysFields.setTextContent(String.valueOf(md.isHasSysFields()));
|
|
|
|
module.appendChild(moduleComment);
|
|
|
|
module.appendChild(modulePrefix);
|
|
|
|
module.appendChild(moduleName);
|
|
|
|
module.appendChild(hasSysFields);
|
|
|
|
|
|
|
|
Element tables = doc.createElement("tables");
|
|
|
|
module.appendChild(tables);
|
|
|
|
for (Table t : md.getTables()) {
|
|
|
|
Element table = doc.createElement("table");
|
|
|
|
table.setAttribute("tableName", t.getTableName());
|
|
|
|
table.setAttribute("tableComment", t.getTableComment());
|
|
|
|
table.setAttribute("create", t.getCreate().toString());
|
|
|
|
table.setAttribute("delete", t.getDelete().toString());
|
|
|
|
table.setAttribute("update", t.getUpdate().toString());
|
|
|
|
table.setAttribute("find", t.getFind().toString());
|
|
|
|
table.setAttribute("get", t.getGet().toString());
|
|
|
|
table.setAttribute("search", t.getSearch().toString());
|
|
|
|
table.setAttribute("getAll", t.getGetAll().toString());
|
|
|
|
|
|
|
|
Element fields = doc.createElement("fields");
|
|
|
|
|
|
|
|
table.appendChild(fields);
|
|
|
|
|
|
|
|
for (Field f : t.getFields()) {
|
|
|
|
Element field = doc.createElement("field");
|
|
|
|
field.setAttribute("fieldName", f.getFieldName());
|
|
|
|
if (f.getFieldType() != null) {
|
|
|
|
field.setAttribute("fieldType", f.getFieldType().name());
|
|
|
|
}
|
|
|
|
if (f.getFieldLength() != null) {
|
|
|
|
field.setAttribute("fieldLength", f.getFieldLength().toString());
|
|
|
|
}
|
|
|
|
field.setAttribute("fieldComment", f.getFieldComment());
|
|
|
|
field.setAttribute("defaultValue", f.getDefaultValue());
|
|
|
|
if (f.getIsMust() != null) {
|
|
|
|
field.setAttribute("isMust", f.getIsMust().toString());
|
|
|
|
}
|
|
|
|
field.setAttribute("isQuery", f.getIsQuery().toString());
|
|
|
|
field.setAttribute("isSearch", f.getIsSearch().toString());
|
|
|
|
if (f.getIsPrimaryKey() != null) {
|
|
|
|
field.setAttribute("isPrimaryKey", f.getIsPrimaryKey().toString());
|
|
|
|
}
|
|
|
|
if (f.getIsSystem() != null) {
|
|
|
|
field.setAttribute("IsSystem", f.getIsSystem().toString());
|
|
|
|
}
|
|
|
|
fields.appendChild(field);
|
|
|
|
}
|
|
|
|
tables.appendChild(table);
|
|
|
|
}
|
|
|
|
modules.appendChild(module);
|
|
|
|
}
|
|
|
|
//endregion
|
|
|
|
|
|
|
|
//输出文件
|
|
|
|
FileOutputStream stream = null;
|
|
|
|
try {
|
|
|
|
Transformer t = TransformerFactory.newInstance().newTransformer();
|
|
|
|
|
|
|
|
//设置换行和缩进
|
|
|
|
t.setOutputProperty(OutputKeys.INDENT, "yes");
|
|
|
|
t.setOutputProperty(OutputKeys.METHOD, "xml");
|
|
|
|
|
|
|
|
if (!path.exists()) {
|
|
|
|
path.mkdirs();
|
|
|
|
}
|
|
|
|
File file = new File(path, project.getProjectName() + ".xml");
|
|
|
|
if (!file.exists()) {
|
|
|
|
file.createNewFile();
|
|
|
|
}
|
|
|
|
stream = new FileOutputStream(file);
|
|
|
|
t.transform(new DOMSource(doc), new StreamResult(stream));
|
|
|
|
System.out.println("[" + file.getName() + "]保存成功!");
|
|
|
|
} catch (Exception e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
return false;
|
|
|
|
} finally {
|
|
|
|
if (stream != null) {
|
|
|
|
try {
|
|
|
|
stream.close();
|
|
|
|
} catch (IOException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch (ParserConfigurationException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
e.printStackTrace();
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|