项目树展示重构

master
wangbing 5 years ago
parent 87ccfde736
commit 02911dbe4d

@ -7,7 +7,6 @@ import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.event.Event;
import javafx.event.EventHandler; import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.scene.Node; import javafx.scene.Node;
@ -58,13 +57,18 @@ import xyz.wbsite.dbtool.javafx.po.Project;
import xyz.wbsite.dbtool.javafx.po.SelectItem; import xyz.wbsite.dbtool.javafx.po.SelectItem;
import xyz.wbsite.dbtool.javafx.po.Table; import xyz.wbsite.dbtool.javafx.po.Table;
import xyz.wbsite.dbtool.javafx.po.TableMethod; import xyz.wbsite.dbtool.javafx.po.TableMethod;
import xyz.wbsite.dbtool.javafx.tool.ContextMenuBuilder;
import xyz.wbsite.dbtool.javafx.tool.Dialog; import xyz.wbsite.dbtool.javafx.tool.Dialog;
import xyz.wbsite.dbtool.javafx.tool.Tool; import xyz.wbsite.dbtool.javafx.tool.Tool;
import xyz.wbsite.dbtool.javafx.view.DBCheckBoxTableCell; import xyz.wbsite.dbtool.javafx.view.DBCheckBoxTableCell;
import xyz.wbsite.dbtool.web.frame.utils.ResourceUtil; import xyz.wbsite.dbtool.web.frame.utils.ResourceUtil;
import java.net.URL; import java.net.URL;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Set;
public class JavaFxApplication extends Application { public class JavaFxApplication extends Application {
@ -83,12 +87,8 @@ public class JavaFxApplication extends Application {
private DetailModuleController detailModuleController; private DetailModuleController detailModuleController;
private DetailTableController detailTableController; private DetailTableController detailTableController;
private Project currentProject; private Project currentProject;
private Module currentMD; private Module currentModule;
private Table currentTable; private Table currentTable;
private ContextMenu project_menu;
private ContextMenu md_right_menu;
private ContextMenu table_right_menu;
private XEventHandler xEventHandler = new XEventHandler();
private boolean dragMD = false; private boolean dragMD = false;
public static Stage primaryStage; public static Stage primaryStage;
@ -156,69 +156,46 @@ public class JavaFxApplication extends Application {
return; return;
} }
Field field = currentTable.getFields().get(selectedIndex); Field field = currentTable.getFields().get(selectedIndex);
ContextMenu con = null; ContextMenuBuilder builder = new ContextMenuBuilder();
if (field.getFieldType().equals(FieldType.Dict.name())) { builder.add("新增", new EventHandler<ActionEvent>() {
con = new ContextMenu( @Override
new MenuItem("新增"), public void handle(ActionEvent event) {
new MenuItem("删除"), addField();
new MenuItem("编辑字典"),
new MenuItem("向上调整"),
new MenuItem("向下调整"));
} else if (field.getFieldType().equals(FieldType.Select.name())) {
con = new ContextMenu(
new MenuItem("新增"),
new MenuItem("删除"),
new MenuItem("编辑选项"),
new MenuItem("向上调整"),
new MenuItem("向下调整"));
} else if (field.getFieldType().equals(FieldType.Boolean.name())) {
con = new ContextMenu(
new MenuItem("新增"),
new MenuItem("删除"),
new MenuItem("编辑是否"),
new MenuItem("向上调整"),
new MenuItem("向下调整"));
} else {
con = new ContextMenu(
new MenuItem("新增"),
new MenuItem("删除"),
new MenuItem("向上调整"),
new MenuItem("向下调整"));
} }
});
con.setOnAction(new EventHandler<ActionEvent>() { builder.add("删除", new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
subField();
}
});
if (field.getFieldType().equals(FieldType.Dict.name())) {
builder.add("编辑字典", new EventHandler<ActionEvent>() {
@Override @Override
public void handle(ActionEvent event) { public void handle(ActionEvent event) {
MenuItem target = (MenuItem) event.getTarget(); MenuItem target = (MenuItem) event.getTarget();
int index = mFields.getSelectionModel().getSelectedIndex(); int index = mFields.getSelectionModel().getSelectedIndex();
List<Field> fields = currentTable.getFields(); List<Field> fields = currentTable.getFields();
Field field = fields.get(index);
if ("新增".equals(target.getText())) { Dialog.showSelectEdit(field);
addField();
}
if (index != -1) {
switch (target.getText()) {
case "删除":
subField();
break;
case "向上调整":
if (index > 0) {
fields.add(index - 1, fields.get(index));
fields.add(index + 1, fields.get(index));
fields.remove(index);
fields.remove(index + 1);
} }
break; });
case "向下调整": } else if (field.getFieldType().equals(FieldType.Select.name())) {
if (index < fields.size() - 1) { builder.add("编辑选项", new EventHandler<ActionEvent>() {
fields.add(index, fields.get(index + 1)); @Override
fields.add(index + 2, fields.get(index + 1)); public void handle(ActionEvent event) {
fields.remove(index + 1); int index = mFields.getSelectionModel().getSelectedIndex();
fields.remove(index + 2); List<Field> fields = currentTable.getFields();
Field field = fields.get(index);
Dialog.showSelectEdit(field);
} }
break; });
case "编辑是否": { } else if (field.getFieldType().equals(FieldType.Boolean.name())) {
builder.add("编辑是否", new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
int index = mFields.getSelectionModel().getSelectedIndex();
List<Field> fields = currentTable.getFields();
Field field = fields.get(index); Field field = fields.get(index);
if (field.getSelectItems().size() == 2) { if (field.getSelectItems().size() == 2) {
@ -239,34 +216,39 @@ public class JavaFxApplication extends Application {
} }
Dialog.showSelectEdit(field); Dialog.showSelectEdit(field);
} }
break; });
case "编辑字典": {
Field field = fields.get(index);
Dialog.showSelectEdit(field);
} }
break; builder.add("向上调整", new EventHandler<ActionEvent>() {
case "编辑选项": { @Override
Field field = fields.get(index); public void handle(ActionEvent event) {
Dialog.showSelectEdit(field); int index = mFields.getSelectionModel().getSelectedIndex();
List<Field> fields = currentTable.getFields();
if (index > 0) {
fields.add(index - 1, fields.get(index));
fields.add(index + 1, fields.get(index));
fields.remove(index);
fields.remove(index + 1);
} }
break;
} }
JavaFxApplication.this.mFields.getSelectionModel().clearSelection(); });
builder.add("向下调整", new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
int index = mFields.getSelectionModel().getSelectedIndex();
List<Field> fields = currentTable.getFields();
if (index < fields.size() - 1) {
fields.add(index, fields.get(index + 1));
fields.add(index + 2, fields.get(index + 1));
fields.remove(index + 1);
fields.remove(index + 2);
} }
} }
}); });
ContextMenu con = builder.build();
mFields.setContextMenu(con); mFields.setContextMenu(con);
} }
}); });
project_menu = new ContextMenu(new MenuItem("新增模块"));
md_right_menu = new ContextMenu(new MenuItem("新增对象"), new MenuItem("删除模块"), new MenuItem("向上调整"), new MenuItem("向下调整"));
table_right_menu = new ContextMenu(new MenuItem("删除对象"));
project_menu.setOnAction(xEventHandler);
md_right_menu.setOnAction(xEventHandler);
table_right_menu.setOnAction(xEventHandler);
URL projectdetail = JavaFxApplication.class.getClassLoader().getResource("fxml/DetailProject.fxml"); URL projectdetail = JavaFxApplication.class.getClassLoader().getResource("fxml/DetailProject.fxml");
if (projectdetail == null) { if (projectdetail == null) {
projectdetail = getClass().getResource("../../../fxml/DetailProject.fxml"); projectdetail = getClass().getResource("../../../fxml/DetailProject.fxml");
@ -384,20 +366,19 @@ public class JavaFxApplication extends Application {
} else if (event.getTransferMode().equals(TransferMode.MOVE)) {//交换 } else if (event.getTransferMode().equals(TransferMode.MOVE)) {//交换
Tool.exchange(mds, i1, i2); Tool.exchange(mds, i1, i2);
Tool.exchange(currentProject.getChildren(), i1, i2);
} }
} else { } else {
if (currentMD != null) { if (currentModule != null) {
int i1 = 0, i2 = 0; int i1 = 0, i2 = 0;
Table t1 = null, t2 = null; Table t1 = null, t2 = null;
for (int i = 0; i < currentMD.getTables().size(); i++) { for (int i = 0; i < currentModule.getTables().size(); i++) {
if (currentMD.getTables().get(i).getTableName().equals(m1)) { if (currentModule.getTables().get(i).getTableName().equals(m1)) {
i1 = i; i1 = i;
t1 = currentMD.getTables().get(i); t1 = currentModule.getTables().get(i);
} }
if (currentMD.getTables().get(i).getTableName().equals(m2)) { if (currentModule.getTables().get(i).getTableName().equals(m2)) {
i2 = i; i2 = i;
t2 = currentMD.getTables().get(i); t2 = currentModule.getTables().get(i);
} }
} }
if (t1 == null || t2 == null) { if (t1 == null || t2 == null) {
@ -408,23 +389,18 @@ public class JavaFxApplication extends Application {
double y = event.getY(); double y = event.getY();
double height = textFieldTreeCell.getHeight(); double height = textFieldTreeCell.getHeight();
if (y < height / 2) { if (y < height / 2) {
currentMD.getTables().add(i2, t1); currentModule.getTables().add(i2, t1);
currentMD.getChildren().add(i2, t1);
} else { } else {
currentMD.getTables().add(i2 + 1, t1); currentModule.getTables().add(i2 + 1, t1);
currentMD.getChildren().add(i2 + 1, t1);
} }
if (i1 < i2) { if (i1 < i2) {
currentMD.getTables().remove(i1); currentModule.getTables().remove(i1);
currentMD.getChildren().remove(i1);
} else { } else {
currentMD.getTables().remove(i1 + 1); currentModule.getTables().remove(i1 + 1);
currentMD.getChildren().remove(i1 + 1);
} }
} else if (event.getTransferMode().equals(TransferMode.MOVE)) {//交换 } else if (event.getTransferMode().equals(TransferMode.MOVE)) {//交换
Tool.exchange(currentMD.getTables(), i1, i2); Tool.exchange(currentModule.getTables(), i1, i2);
Tool.exchange(currentMD.getChildren(), i1, i2);
} }
} }
} }
@ -438,54 +414,13 @@ public class JavaFxApplication extends Application {
return textFieldTreeCell; return textFieldTreeCell;
} }
}); });
mTree.setOnEditCommit(new YEventHandler());
mTree.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
TreeItem targetItem = (TreeItem) mTree.getSelectionModel().getSelectedItem();
if (targetItem == null)
return;
int level = getLevel(targetItem);
switch (level) {
case 0: {//查看模块
mTree.setContextMenu(project_menu);
loadProject();
}
break;
case 1: {//查看模块
mTree.setContextMenu(md_right_menu);
currentMD = projectManager.findDBByDBName((String) targetItem.getValue());
currentTable = null;
loadingModule();
}
break;
case 2: {//查看对象
mTree.setContextMenu(table_right_menu);
TreeItem parent = targetItem.getParent();
currentMD = projectManager.findDBByDBName((String) parent.getValue());
if (currentMD != null) {
currentTable = projectManager.findTableByTableName(currentMD, (String) targetItem.getValue());
}
initTable();
break;
}
default:
break;
}
}
});
{//初始化模块面板 {//初始化模块面板
detailModuleController.getModuleComment().textProperty().addListener(new ChangeListener<String>() { detailModuleController.getModuleComment().textProperty().addListener(new ChangeListener<String>() {
@Override @Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
if (currentMD != null) { if (currentModule != null) {
currentMD.setModuleComment(newValue); currentModule.setModuleComment(newValue);
} }
} }
}); });
@ -493,8 +428,8 @@ public class JavaFxApplication extends Application {
detailModuleController.getModulePrefix().textProperty().addListener(new ChangeListener<String>() { detailModuleController.getModulePrefix().textProperty().addListener(new ChangeListener<String>() {
@Override @Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
if (currentMD != null) { if (currentModule != null) {
currentMD.setModulePrefix(newValue); currentModule.setModulePrefix(newValue);
} }
} }
}); });
@ -502,8 +437,8 @@ public class JavaFxApplication extends Application {
detailModuleController.getModuleName().textProperty().addListener(new ChangeListener<String>() { detailModuleController.getModuleName().textProperty().addListener(new ChangeListener<String>() {
@Override @Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
if (currentMD != null) { if (currentModule != null) {
currentMD.setModuleName(newValue); currentModule.setModuleName(newValue);
} }
} }
}); });
@ -511,8 +446,8 @@ public class JavaFxApplication extends Application {
detailModuleController.getIsGenerate().selectedProperty().addListener(new ChangeListener<Boolean>() { detailModuleController.getIsGenerate().selectedProperty().addListener(new ChangeListener<Boolean>() {
@Override @Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
if (currentMD != null) { if (currentModule != null) {
currentMD.setNeedGenerate(newValue); currentModule.setNeedGenerate(newValue);
} }
} }
}); });
@ -735,7 +670,7 @@ public class JavaFxApplication extends Application {
} }
ManagerFactory.getReflashManager(this).start(); ManagerFactory.getReflashManager(this).start();
loadProjectTree(); initProjectTree();
super.init(); super.init();
} }
@ -761,48 +696,208 @@ public class JavaFxApplication extends Application {
} }
} }
public void loadProjectTree() { public void initProjectTree() {
currentProject = projectManager.getProject(); currentProject = projectManager.getProject();
currentProject.setValue(currentProject.getName()); TreeItem<Project> projectTreeItem = new TreeItem<Project>(currentProject);
currentProject.setExpanded(true); mTree.setRoot(projectTreeItem);
projectTreeItem.setExpanded(true);
for (Module module : currentProject.getModules()) {
TreeItem moduleTreeItem = new TreeItem(module);
moduleTreeItem.setExpanded(true);
projectTreeItem.getChildren().add(moduleTreeItem);
for (Table table : module.getTables()) {
TreeItem tableTreeItem = new TreeItem(table);
moduleTreeItem.getChildren().add(tableTreeItem);
tableTreeItem.setExpanded(true);
}
}
mTree.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
Object value = ((TreeItem) mTree.getSelectionModel().getSelectedItem()).getValue();
if (value instanceof Project) {
loadProject();
} else if (value instanceof Module) {
currentModule = (Module) value;
loadingModule();
} else if (value instanceof Table) {
currentTable = (Table) value;
initTable();
}
}
});
mTree.setRoot(currentProject); mTree.setCellFactory(new Callback<TreeView, TreeCell>() {
@Override
public TreeCell call(TreeView param) {
return new TreeCell() {
for (int i = 0; i < currentProject.getModules().size(); i++) {
Module module = currentProject.getModules().get(i);
module.setExpanded(true);
for (Table table : module.getTables()) { @Override
table.setExpanded(true); protected void updateItem(Object item, boolean empty) {
module.getChildren().add(table); super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
return;
} }
if (isEditing()) {
return;
} }
if (item instanceof Project) {
Project ex = (Project) item;
setText(ex.getName());
ex.nameProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
setText(ex.getName());
} }
});
private int getLevel(TreeItem treeItem) { setContextMenu(new ContextMenuBuilder()
TreeItem root = mTree.getRoot(); .add("新增模块", new EventHandler<ActionEvent>() {
int level = 0; @Override
if (treeItem == root) { public void handle(ActionEvent event) {
level = 0; Module module = projectManager.newModule();
} else if (treeItem.getParent() == root) { TreeItem moduleTreeItem = new TreeItem(module);
level = 1; moduleTreeItem.setExpanded(true);
} else if (treeItem.getParent().getParent() == root) { getTreeItem().getChildren().add(moduleTreeItem);
level = 2; System.out.println("新增模块" + module.getModuleName());
}
}).build());
} else if (item instanceof Module) {
Module mo = (Module) item;
setText(mo.getModuleName());
mo.moduleNameProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
setText(mo.getModuleName());
}
});
//region 模块右击菜单
setContextMenu(new ContextMenuBuilder()
.add("新增对象", new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Module module = (Module) getTreeItem().getValue();
Table table = projectManager.newTable(module);
TreeItem tableTreeItem = new TreeItem(table);
tableTreeItem.setExpanded(true);
getTreeItem().getChildren().add(tableTreeItem);
System.out.println("新增对象" + table.getTableName());
}
})
.add("删除模块", new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
TreeItem projectTreeItem = getTreeItem().getParent();
Project project = (Project) getTreeItem().getParent().getValue();
TreeItem moduleTreeItem = getTreeItem();
Module module = (Module) getTreeItem().getValue();
projectTreeItem.getChildren().remove(moduleTreeItem);
project.getChildren().remove(module);
System.out.println("删除模块" + mo.getModuleName());
}
})
.add("向上调整", new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
TreeItem projectTreeItem = getTreeItem().getParent();
Project project = (Project) getTreeItem().getParent().getValue();
Module module = (Module) getTreeItem().getValue();
int indexOf = project.getModules().indexOf(module);
if (indexOf > 0) {
Tool.exchange(projectTreeItem.getChildren(), indexOf - 1, indexOf);
Tool.exchange(project.getModules(), indexOf - 1, indexOf);
System.out.println("向上调整" + mo.getModuleName());
}
}
})
.add("向下调整", new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
TreeItem projectTreeItem = getTreeItem().getParent();
Project project = (Project) getTreeItem().getParent().getValue();
Module module = (Module) getTreeItem().getValue();
int indexOf = project.getModules().indexOf(module);
if (indexOf < project.getModules().size() - 1) {
Tool.exchange(projectTreeItem.getChildren(), indexOf, indexOf + 1);
Tool.exchange(project.getModules(), indexOf, indexOf + 1);
System.out.println("向下调整" + mo.getModuleName());
}
}
}).build());
//endregion
} else if (item instanceof Table) {
Table ta = (Table) item;
setText(ta.getTableName());
ta.tableNameProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
setText(ta.getTableName());
}
});
setContextMenu(new ContextMenuBuilder()
.add("删除对象", new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Module module = (Module) getTreeItem().getParent().getValue();
Table table = (Table) getTreeItem().getValue();
int indexOf = module.getTables().indexOf(table);
getTreeItem().getParent().getChildren().remove(indexOf);
module.getTables().remove(indexOf);
System.out.println("删除对象" + table.getTableName());
}
})
.add("向上调整", new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
TreeItem moduleTreeItem = getTreeItem().getParent();
Module module = (Module) getTreeItem().getParent().getValue();
Table table = (Table) getTreeItem().getValue();
int indexOf = module.getTables().indexOf(table);
if (indexOf > 0) {
Tool.exchange(moduleTreeItem.getChildren(), indexOf - 1, indexOf);
Tool.exchange(module.getTables(), indexOf - 1, indexOf);
System.out.println("向上调整" + table.getTableName());
}
}
})
.add("向下调整", new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
TreeItem moduleTreeItem = getTreeItem().getParent();
Module module = (Module) getTreeItem().getParent().getValue();
Table table = (Table) getTreeItem().getValue();
int indexOf = module.getTables().indexOf(table);
if (indexOf < module.getTables().size() - 1) {
Tool.exchange(moduleTreeItem.getChildren(), indexOf, indexOf + 1);
Tool.exchange(module.getTables(), indexOf, indexOf + 1);
System.out.println("向下调整" + table.getTableName());
} }
return level; }
}).build());
}
}
};
}
});
} }
private void loadingModule() { private void loadingModule() {
if (currentMD == null) { if (currentModule == null) {
return; return;
} }
GridPane gridPane = mModuleLoader.getRoot(); GridPane gridPane = mModuleLoader.getRoot();
detailModuleController.getModuleComment().setText(currentMD.getModuleComment()); detailModuleController.getModuleComment().setText(currentModule.getModuleComment());
detailModuleController.getModulePrefix().setText(currentMD.getModulePrefix()); detailModuleController.getModulePrefix().setText(currentModule.getModulePrefix());
detailModuleController.getModuleName().setText(currentMD.getModuleName()); detailModuleController.getModuleName().setText(currentModule.getModuleName());
detailModuleController.getIsGenerate().setSelected(currentMD.getNeedGenerate()); detailModuleController.getIsGenerate().setSelected(currentModule.getNeedGenerate());
if (gridPane != null) { if (gridPane != null) {
mDetail.getChildren().clear(); mDetail.getChildren().clear();
@ -813,9 +908,6 @@ public class JavaFxApplication extends Application {
} }
} }
/**
*
*/
public void loadProject() { public void loadProject() {
GridPane gridPane = mProjectLoader.getRoot(); GridPane gridPane = mProjectLoader.getRoot();
detailProjectController.getName().setText(currentProject.getName()); detailProjectController.getName().setText(currentProject.getName());
@ -902,36 +994,52 @@ public class JavaFxApplication extends Application {
mDetail.getChildren().add(gridPane); mDetail.getChildren().add(gridPane);
} }
ObservableList<TableColumn> columns = mFields.getColumns(); ObservableList<TableColumn> columns = mFields.getColumns();
columns.get(0).setCellValueFactory(new PropertyValueFactory<Field, String>("fieldName")); columns.get(0).setCellValueFactory(new PropertyValueFactory<Field, String>("fieldName"));
columns.get(0).setCellFactory(new Callback<TableColumn, TableCell>() { columns.get(0).setCellFactory(new Callback<TableColumn, TableCell>() {
@Override @Override
public TableCell call(TableColumn param) { public TableCell call(TableColumn param) {
TextFieldTableCell textFieldTableCell = new TextFieldTableCell(new DefaultStringConverter()) {
param.setOnEditCommit(new EventHandler<TableColumn.CellEditEvent>() {
@Override @Override
public void handle(TableColumn.CellEditEvent event) { public void commitEdit(Object newValue) {
int row = event.getTablePosition().getRow(); int row = this.getTableRow().getIndex();
Field field = currentTable.getFields().get(row); Field field = currentTable.getFields().get(row);
String newValue = (String) event.getNewValue(); // 驼峰转下划线
String newValue_ = (String) newValue;
if (mainController.getMcdx().isSelected()) { if (mainController.getMcdx().isSelected()) {
newValue = Tool.any2Underline(newValue); newValue_ = Tool.any2Underline(newValue_);
}
// 检查是否重复
List<Integer> integers = new ArrayList<>();
for (int i = 0; i < currentTable.getFields().size(); i++) {
if (currentTable.getFields().get(i).getFieldName().equals(newValue)) {
integers.add(i);
}
}
if (integers.size() > 1) {
Dialog.showYesNo("警告", String.format(Locale.CHINA, "存在多个[%s]", newValue));
return;
} else if (integers.size() == 1 && row != integers.get(0)) {
Dialog.showYesNo("警告", String.format(Locale.CHINA, "已经存在[%s]", newValue));
return;
} }
field.setFieldName(newValue); // 字典类型智能关联
if (newValue.toUpperCase().endsWith("_ID")) { field.setFieldName(newValue_);
if (newValue_.toUpperCase().endsWith("_ID")) {
field.setFieldType(FieldType.Long.name()); field.setFieldType(FieldType.Long.name());
} }
if (newValue.toUpperCase().endsWith("_TIME") || newValue.toUpperCase().endsWith("_DATE")) { if (newValue_.toUpperCase().endsWith("_TIME") || newValue_.toUpperCase().endsWith("_DATE")) {
field.setFieldType(FieldType.Date.name()); field.setFieldType(FieldType.Date.name());
} }
if (newValue.toUpperCase().endsWith("_TYPE")) { if (newValue_.toUpperCase().endsWith("_TYPE")) {
field.setFieldType(FieldType.Select.name()); field.setFieldType(FieldType.Select.name());
} }
super.commitEdit(newValue_);
} }
});
TextFieldTableCell textFieldTableCell = new TextFieldTableCell(new DefaultStringConverter()) {
@Override @Override
public void updateItem(Object item, boolean empty) { public void updateItem(Object item, boolean empty) {
@ -951,7 +1059,6 @@ public class JavaFxApplication extends Application {
} }
} }
}; };
textFieldTableCell.setOnDragDetected(new EventHandler<MouseEvent>() { textFieldTableCell.setOnDragDetected(new EventHandler<MouseEvent>() {
@Override @Override
public void handle(MouseEvent event) { public void handle(MouseEvent event) {
@ -960,7 +1067,6 @@ public class JavaFxApplication extends Application {
ClipboardContent content = new ClipboardContent(); ClipboardContent content = new ClipboardContent();
content.putString((String) source.getItem()); content.putString((String) source.getItem());
md.setContent(content); md.setContent(content);
// System.out.println("Dragging: " + db.getString());
event.consume(); event.consume();
} }
}); });
@ -979,8 +1085,6 @@ public class JavaFxApplication extends Application {
event.acceptTransferModes(TransferMode.COPY); event.acceptTransferModes(TransferMode.COPY);
} }
} }
// System.out.println("DragOver: " + db.getString());
event.consume(); event.consume();
} }
}); });
@ -1097,7 +1201,12 @@ public class JavaFxApplication extends Application {
public void handle(TableColumn.CellEditEvent event) { public void handle(TableColumn.CellEditEvent event) {
int row = event.getTablePosition().getRow(); int row = event.getTablePosition().getRow();
Field field = currentTable.getFields().get(row); Field field = currentTable.getFields().get(row);
if ("String_var".equals(field.getFieldType().toString()) || "String_super".equals(field.getFieldType().toString())) { Set<String> set = new HashSet<>();
set.add("String_var");
set.add("String_super");
set.add("Dict");
set.add("Select");
if (set.contains(field.getFieldType())) {
try { try {
field.setFieldLength((Integer) event.getNewValue()); field.setFieldLength((Integer) event.getNewValue());
} catch (Exception e) { } catch (Exception e) {
@ -1118,6 +1227,9 @@ public class JavaFxApplication extends Application {
if (field.getIsSystem()) { if (field.getIsSystem()) {
ignoreField(this); ignoreField(this);
this.setDisable(true); this.setDisable(true);
} else if (FieldType.parse(field.getFieldType()).isFix()) {
ignoreField(this);
this.setDisable(true);
} else { } else {
recoveryField(this); recoveryField(this);
this.setDisable(false); this.setDisable(false);
@ -1388,182 +1500,6 @@ public class JavaFxApplication extends Application {
tableCell.setTextFill(Color.BLACK); tableCell.setTextFill(Color.BLACK);
} }
/**
*
*/
private class YEventHandler implements EventHandler<TreeView.EditEvent> {
@Override
public void handle(TreeView.EditEvent event) {
TreeItem treeItem = event.getTreeItem();
int level = getLevel(treeItem);
System.out.println("原值:" + event.getOldValue());
System.out.println("现值:" + event.getNewValue());
switch (level) {
case 0: {//编辑项目名称
projectManager.getProject().setName((String) event.getNewValue());
loadProject();
}
break;
case 1: {//编辑模块
Module md = projectManager.findDBByDBName((String) event.getOldValue());
md.setModuleName((String) event.getNewValue());
loadingModule();
}
break;
case 2: {//编辑对象
TreeItem parent = treeItem.getParent();
Module md = projectManager.findDBByDBName((String) parent.getValue());
Table table = projectManager.findTableByTableName(md, (String) event.getOldValue());
if (table != null) {
table.setTableName((String) event.getNewValue());
initTable();
}
break;
}
default:
break;
}
}
}
/**
*
*/
private class XEventHandler implements EventHandler {
@Override
public void handle(Event event) {
MenuItem target = (MenuItem) event.getTarget();
String text = target.getText();
Project project = (Project) mTree.getRoot();
TreeItem targetItem = (TreeItem) mTree.getFocusModel().getFocusedItem();
int index = -1;
index = mTree.getFocusModel().getFocusedIndex();
if (targetItem == null) {
targetItem = (TreeItem) mTree.getSelectionModel().getSelectedItem();
}
if (index == -1) {
index = mTree.getSelectionModel().getSelectedIndex();
}
if (text != null && targetItem != null) {
switch (text) {
case "向上调整":
if (index > 0) {
Tool.exchange(projectManager.getProject().getModules(), index - 1, index);
Tool.exchange(projectManager.getProject().getChildren(), index - 1, index);
}
break;
case "向下调整":
List<Module> mds = projectManager.getMds();
if (index < mds.size() - 1) {
Tool.exchange(projectManager.getProject().getModules(), index, index + 1);
Tool.exchange(projectManager.getProject().getChildren(), index, index + 1);
}
break;
case "新增模块":
projectManager.getNewModuleName();
break;
case "删除模块":
if (targetItem != null && targetItem.getParent() == project) {
currentProject.getChildren().remove(targetItem);
boolean b = projectManager.removeDBByDBName((String) targetItem.getValue());
if (b) {
System.out.println("删除模块" + targetItem.getValue() + "成功!");
}
}
break;
case "新增对象":
int level = getLevel(targetItem);
switch (level) {
case 1: {//对模块右击
System.out.println("模块:" + targetItem.getValue());
Module md = projectManager.findDBByDBName((String) targetItem.getValue());
if (md != null) {
Table newTableName = projectManager.getNewTableName(md);
targetItem.getChildren().add(newTableName);
}
}
break;
case 2: {//对对象右击
TreeItem parent = targetItem.getParent();
System.out.println("对象:" + parent.getValue());
Module md = projectManager.findDBByDBName((String) parent.getValue());
Table newTableName = projectManager.getNewTableName(md);
parent.getChildren().add(new TreeItem<>(newTableName.getTableName()));
break;
}
default:
break;
}
break;
case "删除对象":
level = 0;
if (targetItem != null && targetItem.getParent() == project) {
level = 0;
} else if (targetItem != null && targetItem.getParent().getParent() == project) {
level = 1;
}
switch (level) {
case 0: {//对模块右击
System.out.println("模块:" + targetItem.getValue());
Module md = projectManager.findDBByDBName((String) targetItem.getValue());
Table newTableName = projectManager.getNewTableName(md);
targetItem.getChildren().add(new TreeItem<>(newTableName.getTableName()));
}
break;
case 1: {//对对象右击
TreeItem parent = targetItem.getParent();
System.out.println("对象:" + parent.getValue());
Module md = projectManager.findDBByDBName((String) parent.getValue());
for (Table table : md.getTables()) {
if (table.getTableName().equals(targetItem.getValue())) {
md.getTables().remove(table);
md.getChildren().remove(targetItem);
System.out.println("移除'" + targetItem.getValue() + "'对象成功!");
break;
}
}
break;
}
default:
break;
}
default:
}
} else if (text != null && targetItem == null) {
switch (text) {
case "新增模块":
projectManager.getNewModuleName();
break;
default:
break;
}
}
}
}
private void updateDbTree(List<Module> mds) {
TreeItem root = mTree.getRoot();
for (Module md : mds) {
TreeItem<String> treeItem = new TreeItem<>(md.getModuleName());
treeItem.setExpanded(true);
for (Table table : md.getTables()) {
TreeItem<String> tree = new TreeItem<>(table.getTableName());
treeItem.getChildren().add(tree);
}
root.getChildren().add(treeItem);
}
}
public static void main(String[] args) { public static void main(String[] args) {
launch(args); launch(args);
} }

@ -1,15 +1,12 @@
package xyz.wbsite.dbtool.javafx.ctrl; package xyz.wbsite.dbtool.javafx.ctrl;
import javafx.event.ActionEvent; import javafx.event.ActionEvent;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.CheckBox; import javafx.scene.control.CheckBox;
import javafx.scene.control.TableView; import javafx.scene.control.TableView;
import javafx.scene.control.TreeView; import javafx.scene.control.TreeView;
import javafx.scene.layout.Pane; import javafx.scene.layout.Pane;
import javafx.stage.DirectoryChooser;
import javafx.stage.FileChooser; import javafx.stage.FileChooser;
import javafx.stage.Stage; import javafx.stage.Stage;
import xyz.wbsite.dbtool.javafx.JavaFxApplication; import xyz.wbsite.dbtool.javafx.JavaFxApplication;
@ -106,7 +103,7 @@ public class MainController {
if (file != null && file.exists()) { if (file != null && file.exists()) {
dBmanger.invalidate(file);//初始化模型树 - 到内容 dBmanger.invalidate(file);//初始化模型树 - 到内容
main.loadProjectTree();//加载模型树 - 到组件 main.initProjectTree();//加载模型树 - 到组件
main.loadProject(); main.loadProject();
} }
} }
@ -137,7 +134,7 @@ public class MainController {
@FXML @FXML
public void modelCreate(ActionEvent actionEvent) { public void modelCreate(ActionEvent actionEvent) {
dBmanger.modelCreate(); dBmanger.modelCreate();
main.loadProjectTree(); main.initProjectTree();
main.loadProject(); main.loadProject();
} }
@ -149,7 +146,7 @@ public class MainController {
if (result){ if (result){
dBmanger.delete(); dBmanger.delete();
dBmanger.invalidate(); dBmanger.invalidate();
main.loadProjectTree(); main.initProjectTree();
main.loadProject(); main.loadProject();
} }
} }

@ -102,38 +102,6 @@ public class ProjectManager {
return null; return null;
} }
public Table getNewTableName(Module md) {
String base = "NEW_TABLE";
String name = base;
int k = 0;
do {
int i;
for (i = 0; i < md.getTables().size(); i++) {
if (name.equals(md.getTables().get(i).getTableName())) {
break;
}
}
if (i < md.getTables().size()) {
k++;
name = base + "_" + k;
} else {
Table table = new Table(name);
table.setTableComment("注释");
table.setCreate(true);
table.setDelete(true);
table.setUpdate(true);
table.setFind(true);
table.setGet(false);
table.setSearch(false);
table.setAjax(true);
table.setHtml(true);
checkSysFields(table);// 检查或移除系统字段
md.putTable(table);
return table;
}
} while (true);
}
public void checkSysFields(Table table) { public void checkSysFields(Table table) {
if (table != null) { if (table != null) {
if (table.getSys()) { if (table.getSys()) {
@ -214,7 +182,7 @@ public class ProjectManager {
table.putField(last_update_time); table.putField(last_update_time);
} }
public String getNewModuleName() { public Module newModule() {
String base = "example"; String base = "example";
String name = base; String name = base;
int k = 0; int k = 0;
@ -234,7 +202,39 @@ public class ProjectManager {
md.setModuleComment("注释"); md.setModuleComment("注释");
md.setNeedGenerate(true); md.setNeedGenerate(true);
project.putModule(md); project.putModule(md);
return name; return md;
}
} while (true);
}
public Table newTable(Module md) {
String base = "NEW_TABLE";
String name = base;
int k = 0;
do {
int i;
for (i = 0; i < md.getTables().size(); i++) {
if (name.equals(md.getTables().get(i).getTableName())) {
break;
}
}
if (i < md.getTables().size()) {
k++;
name = base + "_" + k;
} else {
Table table = new Table(name);
table.setTableComment("注释");
table.setCreate(true);
table.setDelete(true);
table.setUpdate(true);
table.setFind(true);
table.setGet(false);
table.setSearch(false);
table.setAjax(true);
table.setHtml(true);
checkSysFields(table);// 检查或移除系统字段
md.putTable(table);
return table;
} }
} while (true); } while (true);
} }

@ -18,7 +18,7 @@ public class ReflashManager extends Thread {
e.printStackTrace(); e.printStackTrace();
} }
if (ProjectManager.isUpdate) { if (ProjectManager.isUpdate) {
main.loadProjectTree(); main.initProjectTree();
ProjectManager.isUpdate = false; ProjectManager.isUpdate = false;
} }
} }

@ -2,6 +2,7 @@ package xyz.wbsite.dbtool.javafx.manger;
import javafx.beans.property.BooleanProperty; import javafx.beans.property.BooleanProperty;
import javafx.beans.property.IntegerProperty; import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty; import javafx.beans.property.StringProperty;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
@ -266,6 +267,10 @@ public class XmlManager {
Method method = ClassUtil.setMethod(field.getName(), o.getClass(), String.class); Method method = ClassUtil.setMethod(field.getName(), o.getClass(), String.class);
method.setAccessible(true); method.setAccessible(true);
method.invoke(o, attribute); method.invoke(o, attribute);
} else if (field.getType() == SimpleStringProperty.class) {
Method method = ClassUtil.setMethod(field.getName(), o.getClass(), String.class);
method.setAccessible(true);
method.invoke(o, attribute);
} else if (field.getType() == IntegerProperty.class) { } else if (field.getType() == IntegerProperty.class) {
Method method = ClassUtil.setMethod(field.getName(), o.getClass(), int.class); Method method = ClassUtil.setMethod(field.getName(), o.getClass(), int.class);
method.setAccessible(true); method.setAccessible(true);

@ -136,7 +136,6 @@ public class Field extends Table {
this.isUnique.set(isUnique); this.isUnique.set(isUnique);
} }
//9查询 //9查询
@Property("isQuery") @Property("isQuery")
private BooleanProperty isQuery = new SimpleBooleanProperty(); private BooleanProperty isQuery = new SimpleBooleanProperty();

@ -12,8 +12,8 @@ public enum FieldType {
Double(0),// Double(0),//
Date(0),//日期时间 Date(0),//日期时间
BigDecimal(0),//高精度 BigDecimal(0),//高精度
Dict(20),//字典 Dict(20,false),//字典
Select(20),//选项 Select(20,false),//选项
String_1(1),//字符1 String_1(1),//字符1
String_10(10),//字符10 String_10(10),//字符10
String_var(20, false),//字符20 String_var(20, false),//字符20

@ -1,23 +1,22 @@
package xyz.wbsite.dbtool.javafx.po; package xyz.wbsite.dbtool.javafx.po;
import javafx.scene.control.TreeItem; import javafx.beans.property.SimpleStringProperty;
import xyz.wbsite.dbtool.javafx.annotation.Property; import xyz.wbsite.dbtool.javafx.annotation.Property;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class Module extends TreeItem { public class Module {
public Module() { public Module() {
setExpanded(true);
} }
public Module(String moduleName) { public Module(String moduleName) {
setModuleName(moduleName); setModuleName(moduleName);
setExpanded(true);
} }
@Property("name") @Property("name")
private String moduleName; private SimpleStringProperty moduleName = new SimpleStringProperty();
@Property("note") @Property("note")
private String moduleComment; private String moduleComment;
@Property("prefix") @Property("prefix")
@ -31,14 +30,16 @@ public class Module extends TreeItem {
private List<Table> tables = new ArrayList(); private List<Table> tables = new ArrayList();
public String getModuleName() { public String getModuleName() {
return moduleName.get();
}
public SimpleStringProperty moduleNameProperty() {
return moduleName; return moduleName;
} }
public void setModuleName(String moduleName) { public void setModuleName(String moduleName) {
this.moduleName = moduleName; this.moduleName.set(moduleName);
this.setValue(moduleName);
} }
public boolean putTable(Table table) { public boolean putTable(Table table) {

@ -1,15 +1,15 @@
package xyz.wbsite.dbtool.javafx.po; package xyz.wbsite.dbtool.javafx.po;
import javafx.scene.control.TreeItem; import javafx.beans.property.SimpleStringProperty;
import xyz.wbsite.dbtool.javafx.annotation.Property; import xyz.wbsite.dbtool.javafx.annotation.Property;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class Project extends TreeItem { public class Project {
public Project() { public Project() {
this.name = "example-web"; setName("example-web");
this.domain = "com.example"; this.domain = "com.example";
this.author = "author"; this.author = "author";
this.frame = Frame.; this.frame = Frame.;
@ -19,13 +19,11 @@ public class Project extends TreeItem {
} }
public Project(String name) { public Project(String name) {
this.name = name; setName(name);
setValue(name);
setExpanded(true);
} }
@Property("name") @Property("name")
private String name; private SimpleStringProperty name = new SimpleStringProperty();
@Property("domain") @Property("domain")
private String domain; private String domain;
@Property("author") @Property("author")
@ -47,20 +45,31 @@ public class Project extends TreeItem {
* *
*/ */
private List<Module> modules = new ArrayList(); private List<Module> modules = new ArrayList();
private List<Project> children = new ArrayList();
public List<Project> getChildren() {
return children;
}
public void setChildren(List<Project> children) {
this.children = children;
}
public boolean putModule(Module module) { public boolean putModule(Module module) {
modules.add(module); modules.add(module);
this.getChildren().add(module);
return true; return true;
} }
public String getName() { public String getName() {
return name.get();
}
public SimpleStringProperty nameProperty() {
return name; return name;
} }
public void setName(String name) { public void setName(String name) {
this.name = name; this.name.set(name);
this.setValue(name);
} }
public String getDomain() { public String getDomain() {

@ -1,5 +1,6 @@
package xyz.wbsite.dbtool.javafx.po; package xyz.wbsite.dbtool.javafx.po;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.scene.control.TreeItem; import javafx.scene.control.TreeItem;
@ -11,27 +12,23 @@ import xyz.wbsite.dbtool.javafx.tool.Tool;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class Table extends TreeItem { public class Table {
private Module dBhandle; private Module dBhandle;
public Table() { public Table() {
} }
public Table(String tableName) { public Table(String tableName) {
this.tableName = tableName; setTableName(tableName);
setValue(tableName);
setExpanded(true);
} }
public Table(String tableName, String tableComment) { public Table(String tableName, String tableComment) {
this.tableName = tableName; setTableName(tableName);
this.tableComment = tableComment; this.tableComment = tableComment;
setValue(tableName);
setExpanded(true);
} }
@Property("tableName") @Property("tableName")
private String tableName; private SimpleStringProperty tableName = new SimpleStringProperty();
@Property("tableComment") @Property("tableComment")
private String tableComment; private String tableComment;
@Property("create") @Property("create")
@ -99,24 +96,27 @@ public class Table extends TreeItem {
} }
public String getCName() { public String getCName() {
return Tool.ABB2Abb(this.tableName); return Tool.ABB2Abb(getTableName());
} }
public String getFName() { public String getFName() {
return Tool.lineToFieldName(this.tableName); return Tool.lineToFieldName(getTableName());
} }
public String getLName() { public String getLName() {
return Tool.lineToLPoint(this.tableName); return Tool.lineToLPoint(getTableName());
} }
public String getTableName() { public String getTableName() {
return tableName.get();
}
public SimpleStringProperty tableNameProperty() {
return tableName; return tableName;
} }
public void setTableName(String tableName) { public void setTableName(String tableName) {
this.tableName = tableName; this.tableName.set(tableName);
setValue(tableName);
} }
public String getTableComment() { public String getTableComment() {

@ -0,0 +1,26 @@
package xyz.wbsite.dbtool.javafx.tool;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
import java.util.ArrayList;
import java.util.List;
public class ContextMenuBuilder {
private List<MenuItem> menuItemList = new ArrayList<>();
public ContextMenuBuilder add(String text, EventHandler<ActionEvent> eventHandler) {
MenuItem menuItem = new MenuItem(text);
menuItem.setOnAction(eventHandler);
menuItemList.add(menuItem);
return this;
}
public ContextMenu build() {
MenuItem[] menuItems = new MenuItem[menuItemList.size()];
menuItemList.toArray(menuItems);
return new ContextMenu(menuItems);
}
}
Loading…
Cancel
Save

Powered by TurnKey Linux.