|
|
|
@ -1,5 +1,8 @@
|
|
|
|
|
package xyz.wbsite.dbtool.javafx.manger;
|
|
|
|
|
|
|
|
|
|
import javafx.beans.property.BooleanProperty;
|
|
|
|
|
import javafx.beans.property.IntegerProperty;
|
|
|
|
|
import javafx.beans.property.StringProperty;
|
|
|
|
|
import org.w3c.dom.Document;
|
|
|
|
|
import org.w3c.dom.Element;
|
|
|
|
|
import org.w3c.dom.NodeList;
|
|
|
|
@ -7,10 +10,10 @@ import xyz.wbsite.dbtool.javafx.annotation.Property;
|
|
|
|
|
import xyz.wbsite.dbtool.javafx.po.DataBase;
|
|
|
|
|
import xyz.wbsite.dbtool.javafx.po.DictItem;
|
|
|
|
|
import xyz.wbsite.dbtool.javafx.po.Field;
|
|
|
|
|
import xyz.wbsite.dbtool.javafx.po.FieldType;
|
|
|
|
|
import xyz.wbsite.dbtool.javafx.po.Module;
|
|
|
|
|
import xyz.wbsite.dbtool.javafx.po.Project;
|
|
|
|
|
import xyz.wbsite.dbtool.javafx.po.Table;
|
|
|
|
|
import xyz.wbsite.dbtool.web.frame.utils.ClassUtil;
|
|
|
|
|
|
|
|
|
|
import javax.xml.parsers.DocumentBuilder;
|
|
|
|
|
import javax.xml.parsers.DocumentBuilderFactory;
|
|
|
|
@ -24,6 +27,10 @@ import java.io.File;
|
|
|
|
|
import java.io.FileInputStream;
|
|
|
|
|
import java.io.FileOutputStream;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.lang.reflect.InvocationTargetException;
|
|
|
|
|
import java.lang.reflect.Method;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
public class XmlManager {
|
|
|
|
|
|
|
|
|
@ -41,115 +48,55 @@ public class XmlManager {
|
|
|
|
|
try {
|
|
|
|
|
inputStream = new FileInputStream(xmlFile);
|
|
|
|
|
Document document = documentBuilderFactory.newDocumentBuilder().parse(inputStream);
|
|
|
|
|
Element projectElement = document.getDocumentElement();
|
|
|
|
|
|
|
|
|
|
Element dbElement = document.getDocumentElement();
|
|
|
|
|
|
|
|
|
|
if ("project".endsWith(dbElement.getNodeName())) {
|
|
|
|
|
// 获取Project信息
|
|
|
|
|
if ("project".endsWith(projectElement.getNodeName())) {
|
|
|
|
|
System.out.println("加载模型[" + xmlFile.getName() + "]");
|
|
|
|
|
|
|
|
|
|
java.lang.reflect.Field[] declaredFields = project.getClass().getDeclaredFields();
|
|
|
|
|
|
|
|
|
|
for (java.lang.reflect.Field declaredField : declaredFields) {
|
|
|
|
|
boolean annotationPresent = declaredField.isAnnotationPresent(Property.class);
|
|
|
|
|
if (annotationPresent) {
|
|
|
|
|
Property annotation = declaredField.getAnnotation(Property.class);
|
|
|
|
|
String value = annotation.value();
|
|
|
|
|
|
|
|
|
|
NodeList nodeName = dbElement.getElementsByTagName(value);
|
|
|
|
|
if (nodeName.getLength() == 1) {
|
|
|
|
|
String textContent = nodeName.item(0).getTextContent();
|
|
|
|
|
|
|
|
|
|
declaredField.setAccessible(true);
|
|
|
|
|
if (declaredField.getType() == String.class) {
|
|
|
|
|
declaredField.set(project, textContent);
|
|
|
|
|
} else if (declaredField.getType() == DataBase.class) {
|
|
|
|
|
DataBase dataBase = null;
|
|
|
|
|
try {
|
|
|
|
|
dataBase = DataBase.valueOf(textContent);
|
|
|
|
|
} catch (IllegalArgumentException e) {
|
|
|
|
|
dataBase = DataBase.MySQL;
|
|
|
|
|
}
|
|
|
|
|
declaredField.set(project, dataBase);
|
|
|
|
|
} else if (declaredField.getType() == Boolean.class || declaredField.getType() == boolean.class) {
|
|
|
|
|
declaredField.setBoolean(project, getBoolean(textContent));
|
|
|
|
|
}
|
|
|
|
|
// System.out.println("读取" + value + "=" + textContent);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 映射属性
|
|
|
|
|
map(projectElement, project);
|
|
|
|
|
|
|
|
|
|
NodeList modules = dbElement.getElementsByTagName("module");
|
|
|
|
|
//获取所有Module
|
|
|
|
|
NodeList modules = projectElement.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());
|
|
|
|
|
}
|
|
|
|
|
Module module = new Module();
|
|
|
|
|
// 映射属性
|
|
|
|
|
map(moduleElement, module);
|
|
|
|
|
project.putModule(module);
|
|
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
// 映射属性
|
|
|
|
|
map(tableElement, table);
|
|
|
|
|
|
|
|
|
|
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(getBoolean(fieldElement.getAttribute("IsSystem")));
|
|
|
|
|
field.setIsPrimaryKey(getBoolean(fieldElement.getAttribute("isPrimaryKey")));
|
|
|
|
|
field.setIsMust(getBoolean(fieldElement.getAttribute("isMust")));
|
|
|
|
|
field.setIsUnique(getBoolean(fieldElement.getAttribute("isUnique")));
|
|
|
|
|
field.setIsQuery(getBoolean(fieldElement.getAttribute("isQuery")));
|
|
|
|
|
field.setIsSearch(getBoolean(fieldElement.getAttribute("isSearch")));
|
|
|
|
|
// 映射属性
|
|
|
|
|
map(fieldElement, field);
|
|
|
|
|
table.putField(field);
|
|
|
|
|
|
|
|
|
|
NodeList dictItems = fieldElement.getElementsByTagName("dictItem");
|
|
|
|
|
for (int l = 0; l < dictItems.getLength(); l++) {
|
|
|
|
|
Element di = (Element) dictItems.item(l);
|
|
|
|
|
DictItem dictItem = new DictItem();
|
|
|
|
|
dictItem.setKey(di.getAttribute("key"));
|
|
|
|
|
dictItem.setValue(di.getAttribute("value"));
|
|
|
|
|
map(di, dictItem);
|
|
|
|
|
field.getDictItems().add(dictItem);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
table.setdBhandle(module);
|
|
|
|
|
table.setTableName(tableElement.getAttribute("tableName"));
|
|
|
|
|
table.setTableComment(tableElement.getAttribute("tableComment"));
|
|
|
|
|
table.setCreate(getBoolean(tableElement.getAttribute("create")));
|
|
|
|
|
table.setDelete(getBoolean(tableElement.getAttribute("delete")));
|
|
|
|
|
table.setUpdate(getBoolean(tableElement.getAttribute("update")));
|
|
|
|
|
table.setFind(getBoolean(tableElement.getAttribute("find")));
|
|
|
|
|
table.setGet(getBoolean(tableElement.getAttribute("get")));
|
|
|
|
|
table.setSearch(getBoolean(tableElement.getAttribute("search")));
|
|
|
|
|
table.setHtml(getBoolean(tableElement.getAttribute("html")));
|
|
|
|
|
table.setSys(getBoolean(tableElement.getAttribute("sys")));
|
|
|
|
|
|
|
|
|
|
module.putTable(table);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
project.putModule(module);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
System.out.println("模型初始化成功...");
|
|
|
|
@ -179,93 +126,45 @@ public class XmlManager {
|
|
|
|
|
builder = dbFactory.newDocumentBuilder();
|
|
|
|
|
Document doc = builder.newDocument();
|
|
|
|
|
|
|
|
|
|
Element rootProject = doc.createElement("project");
|
|
|
|
|
doc.appendChild(rootProject);
|
|
|
|
|
// 写入Project信息
|
|
|
|
|
Element projectElement = doc.createElement("project");
|
|
|
|
|
doc.appendChild(projectElement);
|
|
|
|
|
map(project, projectElement);
|
|
|
|
|
|
|
|
|
|
java.lang.reflect.Field[] declaredFields = project.getClass().getDeclaredFields();
|
|
|
|
|
|
|
|
|
|
for (java.lang.reflect.Field declaredField : declaredFields) {
|
|
|
|
|
try {
|
|
|
|
|
boolean annotationPresent = declaredField.isAnnotationPresent(Property.class);
|
|
|
|
|
if (annotationPresent) {
|
|
|
|
|
Property annotation = declaredField.getAnnotation(Property.class);
|
|
|
|
|
String value = annotation.value();
|
|
|
|
|
Element element = doc.createElement(value);
|
|
|
|
|
declaredField.setAccessible(true);
|
|
|
|
|
Object valuer = declaredField.get(project);
|
|
|
|
|
element.setTextContent(String.valueOf(valuer));
|
|
|
|
|
rootProject.appendChild(element);
|
|
|
|
|
// System.out.println("写入" + value + "=" + String.valueOf(valuer));
|
|
|
|
|
}
|
|
|
|
|
} catch (IllegalAccessException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Element modules = doc.createElement("modules");
|
|
|
|
|
rootProject.appendChild(modules);
|
|
|
|
|
|
|
|
|
|
//region Description
|
|
|
|
|
projectElement.appendChild(modules);
|
|
|
|
|
for (Module md : project.getModules()) {
|
|
|
|
|
// 写入Module信息
|
|
|
|
|
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());
|
|
|
|
|
module.appendChild(moduleComment);
|
|
|
|
|
module.appendChild(modulePrefix);
|
|
|
|
|
module.appendChild(moduleName);
|
|
|
|
|
module.appendChild(hasSysFields);
|
|
|
|
|
modules.appendChild(module);
|
|
|
|
|
map(md, module);
|
|
|
|
|
|
|
|
|
|
Element tables = doc.createElement("tables");
|
|
|
|
|
module.appendChild(tables);
|
|
|
|
|
for (Table t : md.getTables()) {
|
|
|
|
|
// 写入table信息
|
|
|
|
|
Element table = doc.createElement("table");
|
|
|
|
|
table.setAttribute("tableName", t.getTableName());
|
|
|
|
|
table.setAttribute("tableComment", t.getTableComment());
|
|
|
|
|
table.setAttribute("create", Boolean.toString(t.getCreate()));
|
|
|
|
|
table.setAttribute("delete", Boolean.toString(t.getDelete()));
|
|
|
|
|
table.setAttribute("update", Boolean.toString(t.getUpdate()));
|
|
|
|
|
table.setAttribute("find", Boolean.toString(t.getFind()));
|
|
|
|
|
table.setAttribute("get", Boolean.toString(t.getGet()));
|
|
|
|
|
table.setAttribute("search", Boolean.toString(t.getSearch()));
|
|
|
|
|
table.setAttribute("html", Boolean.toString(t.getHtml()));
|
|
|
|
|
table.setAttribute("sys", Boolean.toString(t.getSys()));
|
|
|
|
|
|
|
|
|
|
tables.appendChild(table);
|
|
|
|
|
map(t, table);
|
|
|
|
|
Element fields = doc.createElement("fields");
|
|
|
|
|
table.appendChild(fields);
|
|
|
|
|
|
|
|
|
|
for (Field f : t.getFields()) {
|
|
|
|
|
// 写入field信息
|
|
|
|
|
Element field = doc.createElement("field");
|
|
|
|
|
field.setAttribute("fieldName", f.getFieldName());
|
|
|
|
|
field.setAttribute("fieldType", f.getFieldType().name());
|
|
|
|
|
field.setAttribute("fieldLength", String.valueOf(f.getFieldLength()));
|
|
|
|
|
field.setAttribute("fieldComment", f.getFieldComment());
|
|
|
|
|
field.setAttribute("defaultValue", f.getDefaultValue());
|
|
|
|
|
field.setAttribute("isPrimaryKey", String.valueOf(f.getIsPrimaryKey()));
|
|
|
|
|
field.setAttribute("isMust", String.valueOf(f.getIsMust()));
|
|
|
|
|
field.setAttribute("isUnique", String.valueOf(f.getIsUnique()));
|
|
|
|
|
field.setAttribute("isQuery", String.valueOf(f.getIsQuery()));
|
|
|
|
|
field.setAttribute("isSearch", String.valueOf(f.getIsSearch()));
|
|
|
|
|
field.setAttribute("IsSystem", String.valueOf(f.getIsSystem()));
|
|
|
|
|
map(f, field);
|
|
|
|
|
|
|
|
|
|
if (f.getDictItems().size() > 0) {
|
|
|
|
|
for (DictItem dictItem : f.getDictItems()) {
|
|
|
|
|
// 写入dictItem信息
|
|
|
|
|
Element dict = doc.createElement("dictItem");
|
|
|
|
|
dict.setAttribute("key", dictItem.getKey());
|
|
|
|
|
dict.setAttribute("value", dictItem.getValue());
|
|
|
|
|
field.appendChild(dict);
|
|
|
|
|
map(dictItem, dict);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fields.appendChild(field);
|
|
|
|
|
}
|
|
|
|
|
tables.appendChild(table);
|
|
|
|
|
}
|
|
|
|
|
modules.appendChild(module);
|
|
|
|
|
}
|
|
|
|
|
//endregion
|
|
|
|
|
|
|
|
|
@ -308,6 +207,87 @@ public class XmlManager {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void map(Object o, Element element) {
|
|
|
|
|
List<java.lang.reflect.Field> fields = getProperties(o.getClass());
|
|
|
|
|
try {
|
|
|
|
|
for (java.lang.reflect.Field field : fields) {
|
|
|
|
|
Property annotation = field.getAnnotation(Property.class);
|
|
|
|
|
String value = annotation.value();
|
|
|
|
|
Method method = ClassUtil.getMethod(field.getName(), o.getClass());
|
|
|
|
|
Object invoke = method.invoke(o);
|
|
|
|
|
element.setAttribute(value, invoke.toString());
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void map(Element element, Object o) {
|
|
|
|
|
List<java.lang.reflect.Field> fields = getProperties(o.getClass());
|
|
|
|
|
try {
|
|
|
|
|
for (java.lang.reflect.Field field : fields) {
|
|
|
|
|
Property annotation = field.getAnnotation(Property.class);
|
|
|
|
|
String value = annotation.value();
|
|
|
|
|
String attribute = element.getAttribute(value);
|
|
|
|
|
field.setAccessible(true);
|
|
|
|
|
if (field.getType() == boolean.class || field.getType() == Boolean.class) {
|
|
|
|
|
Method method = ClassUtil.setMethod(field.getName(), o.getClass(), field.getType());
|
|
|
|
|
method.setAccessible(true);
|
|
|
|
|
method.invoke(o, getBoolean(attribute));
|
|
|
|
|
} else if (field.getType() == String.class) {
|
|
|
|
|
Method method = ClassUtil.setMethod(field.getName(), o.getClass(), field.getType());
|
|
|
|
|
method.setAccessible(true);
|
|
|
|
|
method.invoke(o, attribute);
|
|
|
|
|
} else if (field.getType() == DataBase.class) {
|
|
|
|
|
Method method = ClassUtil.setMethod(field.getName(), o.getClass(), field.getType());
|
|
|
|
|
method.setAccessible(true);
|
|
|
|
|
method.invoke(o, getDataBase(attribute));
|
|
|
|
|
} else if (field.getType() == StringProperty.class) {
|
|
|
|
|
Method method = ClassUtil.setMethod(field.getName(), o.getClass(), String.class);
|
|
|
|
|
method.setAccessible(true);
|
|
|
|
|
method.invoke(o, attribute);
|
|
|
|
|
} else if (field.getType() == IntegerProperty.class) {
|
|
|
|
|
Method method = ClassUtil.setMethod(field.getName(), o.getClass(), int.class);
|
|
|
|
|
method.setAccessible(true);
|
|
|
|
|
method.invoke(o, getInt(attribute));
|
|
|
|
|
} else if (field.getType() == BooleanProperty.class) {
|
|
|
|
|
Method method = ClassUtil.setMethod(field.getName(), o.getClass(), boolean.class);
|
|
|
|
|
method.setAccessible(true);
|
|
|
|
|
method.invoke(o, getBoolean(attribute));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} catch (IllegalAccessException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
} catch (InvocationTargetException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private List<java.lang.reflect.Field> getProperties(Class clazz) {
|
|
|
|
|
List<java.lang.reflect.Field> list = new ArrayList();
|
|
|
|
|
|
|
|
|
|
for (java.lang.reflect.Field declaredField : clazz.getDeclaredFields()) {
|
|
|
|
|
if (declaredField.isAnnotationPresent(Property.class)) {
|
|
|
|
|
list.add(declaredField);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return list;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private int getInt(String str) {
|
|
|
|
|
if (str == null || "".equals(str)) {
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
return Integer.parseInt(str);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private DataBase getDataBase(String str) {
|
|
|
|
|
if (str == null || "".equals(str)) {
|
|
|
|
|
return DataBase.MySQL;
|
|
|
|
|
}
|
|
|
|
|
return DataBase.valueOf(str);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private boolean getBoolean(String str) {
|
|
|
|
|
if (str != null && str.matches("true|1")) {
|
|
|
|
|
return true;
|
|
|
|
|