package com.alan344.controller; import com.alan344.bean.GeneratorConfig; import com.alan344.constants.StageConstants; import com.alan344.factory.FileDirChooserFactory; import com.alan344.service.ColumnService; import com.alan344.service.TableService; import com.alan344.service.generator.MapperGeneratorStrategyContext; import com.alan344.utils.TextUtils; import com.alan344happyframework.util.StringUtils; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.*; import javafx.stage.Stage; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import javax.annotation.Resource; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ResourceBundle; /** * @author AlanSun * @date 2019/8/12 15:33 */ @Slf4j @Controller public class ExportController implements Initializable { @FXML private TextField beanLocationText; @FXML private TextField beanPackageText; @FXML private TextField mapperLocationText; @FXML private TextField mapperPackageText; @FXML private TextField xmlLocationText; @FXML private TextField authorText; @FXML private TextField configNameText; @FXML private ToggleGroup targetName; @FXML private CheckBox userJava8CheckBox; @FXML private CheckBox useBigDecimalCheckBox; @FXML private CheckBox useCommentCheckBox; @FXML private CheckBox useSwaggerCheckBox; @FXML private CheckBox useTkMybatis; @Resource private MapperGeneratorStrategyContext mapperGeneratorStrategyContext; @Resource private TableService tableService; @Resource private ColumnService columnService; @Resource private ConfigController configController; @Resource private ExportSuccessAlertController exportSuccessAlertController; @Override public void initialize(URL location, ResourceBundle resources) { } /** * 应用 生成bean */ @FXML public void apply() throws IOException { Stage configStage = StageConstants.configStage; if (TextUtils.checkTextsHasEmpty(configStage, configNameText, authorText, beanLocationText, beanPackageText, mapperLocationText, mapperPackageText, xmlLocationText)) { return; } GeneratorConfig generatorConfig = new GeneratorConfig(); generatorConfig.setConfigName(configNameText.getText()); generatorConfig.setAuthor(authorText.getText()); generatorConfig.setBeanLocation(beanLocationText.getText()); generatorConfig.setBeanPackage(beanPackageText.getText()); generatorConfig.setMapperLocation(mapperLocationText.getText()); generatorConfig.setMapperPackage(mapperPackageText.getText()); generatorConfig.setMapperXmlLocation(xmlLocationText.getText()); generatorConfig.setTargetName(((RadioButton) targetName.getSelectedToggle()).getText()); generatorConfig.setUserJava8(userJava8CheckBox.isSelected()); generatorConfig.setUseBigDecimal(useBigDecimalCheckBox.isSelected()); generatorConfig.setUseComment(useCommentCheckBox.isSelected()); generatorConfig.setUseSwagger(useSwaggerCheckBox.isSelected()); generatorConfig.setUseTkMybatis(useTkMybatis.isSelected()); // generatorConfig.setUserMerge(useMergeCheckBox.isSelected()); configController.addConfig(generatorConfig); // 导出时,如果 tableNameIsOverrideRecodeMap 不为空,则把 table 配置(如 insert)文件重写 tableService.downLoadTableIfOverrideModify(); // 导出时,如果 tableNameIsOverrideRecodeMap 不为空,则把 columns 文件重写 columnService.downLoadColumnOverride(); boolean exportSuccess = true; // 调用 mybatis generator 生成文件 try { mapperGeneratorStrategyContext.getMapperGeneratorStrategy(generatorConfig).generator(generatorConfig); } catch (Throwable e) { log.error("export fail", e); exportSuccess = false; } Stage stage; if (exportSuccess) { // 导出成功,关闭 configStage configStage.close(); stage = StageConstants.primaryStage; } else { stage = StageConstants.configStage; } // 成功或失败的弹窗 exportSuccessAlertController.openTableAdvancedSetUP(stage, exportSuccess); } /** * 关闭 */ @FXML public void cancel() { StageConstants.configStage.close(); } @FXML public void useTkMybatis() { final boolean selected = useTkMybatis.isSelected(); final ObservableList<Toggle> toggles = targetName.getToggles(); if (selected) { toggles.forEach(toggle -> { if ("MyBatis3Simple".equals(((RadioButton) toggle).getText())) { toggle.setSelected(true); } ((RadioButton) toggle).setDisable(true); }); } else { toggles.forEach(toggle -> { if ("Mybatis3".equals(((RadioButton) toggle).getText())) { toggle.setSelected(true); } ((RadioButton) toggle).setDisable(false); }); } } //-------------------------文件夹浏览------------------------------------------------------------------------------// // 选择文件夹时,记录上次记录的选择的文件夹,方便用户选择 private String baseDir; /** * bean 文件夹选择器 */ @FXML public void beanDirectoryScan() { File directory = FileDirChooserFactory.createDirectoryScan(null, StringUtils.isEmpty(this.baseDir) ? null : this.baseDir); if (directory != null) { beanLocationText.setText(directory.getPath()); this.baseDir = directory.getPath(); } } /** * mapper 文件夹选择器 */ @FXML public void mapperDirectoryScan() { File directory = FileDirChooserFactory.createDirectoryScan(null, StringUtils.isEmpty(this.baseDir) ? null : this.baseDir); if (directory != null) { mapperLocationText.setText(directory.getPath()); this.baseDir = directory.getPath(); } } /** * mapper xml 文件夹选择器 */ @FXML public void xmlDirectoryScan() { File directory = FileDirChooserFactory.createDirectoryScan(null, StringUtils.isEmpty(this.baseDir) ? null : this.baseDir); if (directory != null) { xmlLocationText.setText(directory.getPath()); this.baseDir = directory.getPath(); } } /** * 展示配置信息 * * @param generatorConfig 配置信息 */ void showConfig(GeneratorConfig generatorConfig) { configNameText.setText(generatorConfig.getConfigName()); authorText.setText(generatorConfig.getAuthor()); beanLocationText.setText(generatorConfig.getBeanLocation()); beanPackageText.setText(generatorConfig.getBeanPackage()); mapperLocationText.setText(generatorConfig.getMapperLocation()); mapperPackageText.setText(generatorConfig.getMapperPackage()); xmlLocationText.setText(generatorConfig.getMapperXmlLocation()); userJava8CheckBox.setSelected(generatorConfig.isUserJava8()); useBigDecimalCheckBox.setSelected(generatorConfig.isUseBigDecimal()); useCommentCheckBox.setSelected(generatorConfig.isUseComment()); useSwaggerCheckBox.setSelected(generatorConfig.isUseSwagger()); // useMergeCheckBox.setSelected(generatorConfig.isUserMerge()); } /** * 点击新增配置时清空配置面板 */ void clearPane() { configNameText.setText(null); authorText.setText(null); beanLocationText.setText(null); beanPackageText.setText(null); mapperLocationText.setText(null); mapperPackageText.setText(null); xmlLocationText.setText(null); userJava8CheckBox.setSelected(true); useBigDecimalCheckBox.setSelected(false); useCommentCheckBox.setSelected(true); useSwaggerCheckBox.setSelected(false); // useMergeCheckBox.setSelected(false); } }