From 29db1463ada37bfdc0ce8b055ed3d660a628d16b Mon Sep 17 00:00:00 2001 From: wangbing Date: Tue, 7 Apr 2020 23:35:18 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81youhua?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Former-commit-id: 993fa6c5b4db56bcee0c5f34006828cc4f570053 --- .../dbtool/javafx/JavaFxApplication.java | 9 +++ .../dbtool/javafx/annotation/Property.java | 17 +++++ .../javafx/ctrl/DetailProjectController.java | 21 ++++++ .../dbtool/javafx/manger/XmlManager.java | 72 ++++++++++--------- .../xyz/wbsite/dbtool/javafx/po/Project.java | 26 +++++++ src/main/resources/fxml/projectdetail.fxml | 25 ++++++- 6 files changed, 134 insertions(+), 36 deletions(-) create mode 100644 src/main/java/xyz/wbsite/dbtool/javafx/annotation/Property.java diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/JavaFxApplication.java b/src/main/java/xyz/wbsite/dbtool/javafx/JavaFxApplication.java index bf3e5add..e35bde2a 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/JavaFxApplication.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/JavaFxApplication.java @@ -5,6 +5,7 @@ import javafx.beans.property.SimpleBooleanProperty; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; +import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.event.Event; @@ -17,6 +18,7 @@ import javafx.scene.control.MenuItem; import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; +import javafx.scene.control.Toggle; import javafx.scene.control.TreeCell; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; @@ -456,6 +458,13 @@ public class JavaFxApplication extends Application { currentProject.setSysMD(newValue); } }); + detailProjectController.getCloud().selectedProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) { + currentProject.setCloud(newValue); + } + }); + detailProjectController.getDatabase().getToggles() } {//初始化表面板 diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/annotation/Property.java b/src/main/java/xyz/wbsite/dbtool/javafx/annotation/Property.java new file mode 100644 index 00000000..4b9006e3 --- /dev/null +++ b/src/main/java/xyz/wbsite/dbtool/javafx/annotation/Property.java @@ -0,0 +1,17 @@ +package xyz.wbsite.dbtool.javafx.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Property { + + String value(); + + String defautValue() default ""; +} diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/DetailProjectController.java b/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/DetailProjectController.java index fa7318b7..f8e6a6f3 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/DetailProjectController.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/ctrl/DetailProjectController.java @@ -3,6 +3,7 @@ package xyz.wbsite.dbtool.javafx.ctrl; import javafx.fxml.FXML; import javafx.scene.control.CheckBox; import javafx.scene.control.TextField; +import javafx.scene.control.ToggleGroup; public class DetailProjectController { @@ -16,6 +17,10 @@ public class DetailProjectController { private CheckBox multiDB; @FXML private CheckBox sysMD; + @FXML + private ToggleGroup database; + @FXML + private CheckBox cloud; public CheckBox getSysMD() { return sysMD; @@ -56,4 +61,20 @@ public class DetailProjectController { public void setProjectAuthor(TextField projectAuthor) { this.projectAuthor = projectAuthor; } + + public ToggleGroup getDatabase() { + return database; + } + + public void setDatabase(ToggleGroup database) { + this.database = database; + } + + public CheckBox getCloud() { + return cloud; + } + + public void setCloud(CheckBox cloud) { + this.cloud = cloud; + } } diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/manger/XmlManager.java b/src/main/java/xyz/wbsite/dbtool/javafx/manger/XmlManager.java index 7e1e209c..e549eb1b 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/manger/XmlManager.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/manger/XmlManager.java @@ -3,6 +3,7 @@ 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.annotation.Property; import xyz.wbsite.dbtool.javafx.enums.FieldType; import xyz.wbsite.dbtool.javafx.po.Field; import xyz.wbsite.dbtool.javafx.po.Module; @@ -44,30 +45,29 @@ public class XmlManager { 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()); - } + java.lang.reflect.Field[] declaredFields = project.getClass().getDeclaredFields(); - NodeList projectBasePackage = dbElement.getElementsByTagName("projectBasePackage"); - if (projectBasePackage.getLength() == 1) { - project.setProjectBasePackage(projectBasePackage.item(0).getTextContent()); - } + 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 projectAuthor = dbElement.getElementsByTagName("projectAuthor"); - if (projectAuthor.getLength() == 1) { - project.setProjectAuthor(projectAuthor.item(0).getTextContent()); - } + NodeList nodeName = dbElement.getElementsByTagName(value); + if (nodeName.getLength() == 1) { + String textContent = nodeName.item(0).getTextContent(); - NodeList multiDB = dbElement.getElementsByTagName("multiDB"); - if (multiDB.getLength() == 1) { - project.setMultiDB(getBoolean(multiDB.item(0).getTextContent())); + declaredField.setAccessible(true); + if (declaredField.getType() == String.class) { + declaredField.set(project, textContent); + } else if (declaredField.getType() == Boolean.class || declaredField.getType() == boolean.class) { + declaredField.setBoolean(project, getBoolean(textContent)); + } + System.out.println("读取" + value + "=" + textContent); + } + } } - NodeList sysMD = dbElement.getElementsByTagName("sysMD"); - if (sysMD.getLength() == 1) { - project.setSysMD(getBoolean(sysMD.item(0).getTextContent())); - } NodeList modules = dbElement.getElementsByTagName("module"); if (modules.getLength() > 0) { @@ -168,21 +168,25 @@ public class XmlManager { 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()); - Element multiDB = doc.createElement("multiDB"); - multiDB.setTextContent(String.valueOf(project.getMultiDB())); - Element sysMD = doc.createElement("sysMD"); - sysMD.setTextContent(String.valueOf(project.getSysMD())); - rootProject.appendChild(projectName); - rootProject.appendChild(projectBasePackage); - rootProject.appendChild(projectAuthor); - rootProject.appendChild(multiDB); - rootProject.appendChild(sysMD); + 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); diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/po/Project.java b/src/main/java/xyz/wbsite/dbtool/javafx/po/Project.java index 22e9c854..73833054 100644 --- a/src/main/java/xyz/wbsite/dbtool/javafx/po/Project.java +++ b/src/main/java/xyz/wbsite/dbtool/javafx/po/Project.java @@ -1,6 +1,7 @@ package xyz.wbsite.dbtool.javafx.po; import javafx.scene.control.TreeItem; +import xyz.wbsite.dbtool.javafx.annotation.Property; import java.util.ArrayList; import java.util.List; @@ -20,11 +21,20 @@ public class Project extends TreeItem { setExpanded(true); } + @Property("projectName") private String projectName; + @Property("projectBasePackage") private String projectBasePackage; + @Property("projectAuthor") private String projectAuthor; + @Property("multiDB") private boolean multiDB; + @Property("sysMD") private boolean sysMD; + @Property("cloud") + private boolean cloud; + @Property(value = "database",defautValue = "MySQL") + private String database; /** * 对象 @@ -85,4 +95,20 @@ public class Project extends TreeItem { public void setSysMD(boolean sysMD) { this.sysMD = sysMD; } + + public boolean isCloud() { + return cloud; + } + + public void setCloud(boolean cloud) { + this.cloud = cloud; + } + + public String getDatabase() { + return database; + } + + public void setDatabase(String database) { + this.database = database; + } } diff --git a/src/main/resources/fxml/projectdetail.fxml b/src/main/resources/fxml/projectdetail.fxml index 41f68c27..02f70001 100644 --- a/src/main/resources/fxml/projectdetail.fxml +++ b/src/main/resources/fxml/projectdetail.fxml @@ -4,6 +4,8 @@ + + -