package com.zzg.mybatis.generator.controller; import com.zzg.mybatis.generator.model.DatabaseConfig; import com.zzg.mybatis.generator.model.UITableColumnVO; import javafx.application.Platform; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.*; import javafx.scene.control.cell.CheckBoxTableCell; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.control.cell.TextFieldTableCell; import org.mybatis.generator.config.ColumnOverride; import org.mybatis.generator.config.IgnoredColumn; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.ResourceBundle; /** * Created by Owen on 6/20/16. */ public class SelectTableColumnController extends BaseFXController { @FXML private TableView<UITableColumnVO> columnListView; @FXML private TableColumn<UITableColumnVO, Boolean> checkedColumn; @FXML private TableColumn<UITableColumnVO, String> columnNameColumn; @FXML private TableColumn<UITableColumnVO, String> jdbcTypeColumn; @FXML private TableColumn<UITableColumnVO, String> javaTypeColumn; @FXML private TableColumn<UITableColumnVO, String> propertyNameColumn; @FXML private TableColumn<UITableColumnVO, String> typeHandlerColumn; private MainUIController mainUIController; private String tableName; @Override public void initialize(URL location, ResourceBundle resources) { // cellvaluefactory checkedColumn.setCellValueFactory(new PropertyValueFactory<>("checked")); columnNameColumn.setCellValueFactory(new PropertyValueFactory<>("columnName")); jdbcTypeColumn.setCellValueFactory(new PropertyValueFactory<>("jdbcType")); propertyNameColumn.setCellValueFactory(new PropertyValueFactory<>("propertyName")); typeHandlerColumn.setCellValueFactory(new PropertyValueFactory<>("typeHandler")); // Cell Factory that customize how the cell should render checkedColumn.setCellFactory(CheckBoxTableCell.forTableColumn(checkedColumn)); javaTypeColumn.setCellFactory(TextFieldTableCell.forTableColumn()); // handle commit event to save the user input data javaTypeColumn.setOnEditCommit(event -> { event.getTableView().getItems().get(event.getTablePosition().getRow()).setJavaType(event.getNewValue()); }); propertyNameColumn.setCellFactory(TextFieldTableCell.forTableColumn()); propertyNameColumn.setOnEditCommit(event -> { event.getTableView().getItems().get(event.getTablePosition().getRow()).setPropertyName(event.getNewValue()); }); typeHandlerColumn.setCellFactory(TextFieldTableCell.forTableColumn()); typeHandlerColumn.setOnEditCommit(event -> { event.getTableView().getItems().get(event.getTablePosition().getRow()).setTypeHandle(event.getNewValue()); }); } @FXML public void ok() { ObservableList<UITableColumnVO> items = columnListView.getItems(); if (items != null && items.size() > 0) { List<IgnoredColumn> ignoredColumns = new ArrayList<>(); List<ColumnOverride> columnOverrides = new ArrayList<>(); items.stream().forEach(item -> { if (!item.getChecked()) { IgnoredColumn ignoredColumn = new IgnoredColumn(item.getColumnName()); ignoredColumns.add(ignoredColumn); } else if (item.getTypeHandle() != null || item.getJavaType() != null || item.getPropertyName() != null) { // unchecked and have typeHandler value ColumnOverride columnOverride = new ColumnOverride(item.getColumnName()); columnOverride.setTypeHandler(item.getTypeHandle()); columnOverride.setJavaProperty(item.getPropertyName()); columnOverride.setJavaType(item.getJavaType()); columnOverrides.add(columnOverride); } }); mainUIController.setIgnoredColumns(ignoredColumns); mainUIController.setColumnOverrides(columnOverrides); } getDialogStage().close(); } @FXML public void cancel() { getDialogStage().close(); } public void setColumnList(ObservableList<UITableColumnVO> columns) { columnListView.setItems(columns); } public void setMainUIController(MainUIController mainUIController) { this.mainUIController = mainUIController; } public String getTableName() { return tableName; } public void setTableName(String tableName) { this.tableName = tableName; } }