package com.sjhy.plugin.ui;
import com.intellij.openapi.fileChooser.FileChooser;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.ExceptionUtil;
import com.sjhy.plugin.constants.StrState;
import com.sjhy.plugin.dict.GlobalDict;
import com.sjhy.plugin.dto.GenerateOptions;
import com.sjhy.plugin.dto.SettingsStorageDTO;
import com.sjhy.plugin.entity.TableInfo;
import com.sjhy.plugin.entity.Template;
import com.sjhy.plugin.service.CodeGenerateService;
import com.sjhy.plugin.service.SettingsStorageService;
import com.sjhy.plugin.service.TableInfoSettingsService;
import com.sjhy.plugin.tool.CacheDataUtils;
import com.sjhy.plugin.tool.ModuleUtils;
import com.sjhy.plugin.tool.ProjectUtils;
import com.sjhy.plugin.tool.StringUtils;
import com.sjhy.plugin.ui.component.TemplateSelectComponent;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.awt.*;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.LinkedList;
import java.util.List;
/**
* 选择保存路径
*
* @author makejava
* @version 1.0.0
* @since 2018/07/17 13:10
*/
public class SelectSavePath extends DialogWrapper {
/**
* 主面板
*/
private JPanel contentPane;
/**
* 模型下拉框
*/
private JComboBox<String> moduleComboBox;
/**
* 包字段
*/
private JTextField packageField;
/**
* 路径字段
*/
private JTextField pathField;
/**
* 前缀字段
*/
private JTextField preField;
/**
* 包选择按钮
*/
private JButton packageChooseButton;
/**
* 路径选择按钮
*/
private JButton pathChooseButton;
/**
* 模板面板
*/
private JPanel templatePanel;
/**
* 统一配置复选框
*/
private JCheckBox unifiedConfigCheckBox;
/**
* 弹框选是复选框
*/
private JCheckBox titleSureCheckBox;
/**
* 格式化代码复选框
*/
private JCheckBox reFormatCheckBox;
/**
* 弹框全否复选框
*/
private JCheckBox titleRefuseCheckBox;
/**
* 数据缓存工具类
*/
private CacheDataUtils cacheDataUtils = CacheDataUtils.getInstance();
/**
* 表信息服务
*/
private TableInfoSettingsService tableInfoService;
/**
* 项目对象
*/
private Project project;
/**
* 代码生成服务
*/
private CodeGenerateService codeGenerateService;
/**
* 当前项目中的module
*/
private List<Module> moduleList;
/**
* 实体模式生成代码
*/
private boolean entityMode;
/**
* 模板选择组件
*/
private TemplateSelectComponent templateSelectComponent;
/**
* 构造方法
*/
public SelectSavePath(Project project) {
this(project, false);
}
@Override
protected @Nullable JComponent createCenterPanel() {
return this.contentPane;
}
/**
* 构造方法
*/
public SelectSavePath(Project project, boolean entityMode) {
super(project);
this.entityMode = entityMode;
this.project = project;
this.tableInfoService = TableInfoSettingsService.getInstance();
this.codeGenerateService = CodeGenerateService.getInstance(project);
// 初始化module,存在资源路径的排前面
this.moduleList = new LinkedList<>();
for (Module module : ModuleManager.getInstance(project).getModules()) {
// 存在源代码文件夹放前面,否则放后面
if (ModuleUtils.existsSourcePath(module)) {
this.moduleList.add(0, module);
} else {
this.moduleList.add(module);
}
}
this.initPanel();
this.refreshData();
this.initEvent();
init();
setTitle(GlobalDict.TITLE_INFO);
//初始化路径
refreshPath();
}
private void initEvent() {
//监听module选择事件
moduleComboBox.addActionListener(e -> {
// 刷新路径
refreshPath();
});
try {
Class<?> cls = Class.forName("com.intellij.ide.util.PackageChooserDialog");
//添加包选择事件
packageChooseButton.addActionListener(e -> {
try {
Constructor<?> constructor = cls.getConstructor(String.class, Project.class);
Object dialog = constructor.newInstance("Package Chooser", project);
// 显示窗口
Method showMethod = cls.getMethod("show");
showMethod.invoke(dialog);
// 获取选中的包名
Method getSelectedPackageMethod = cls.getMethod("getSelectedPackage");
Object psiPackage = getSelectedPackageMethod.invoke(dialog);
if (psiPackage != null) {
Method getQualifiedNameMethod = psiPackage.getClass().getMethod("getQualifiedName");
String packageName = (String) getQualifiedNameMethod.invoke(psiPackage);
packageField.setText(packageName);
// 刷新路径
refreshPath();
}
} catch (NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e1) {
ExceptionUtil.rethrow(e1);
}
});
// 添加包编辑框失去焦点事件
packageField.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
// 刷新路径
refreshPath();
}
});
} catch (ClassNotFoundException e) {
// 没有PackageChooserDialog,并非支持Java的IDE,禁用相关UI组件
packageField.setEnabled(false);
packageChooseButton.setEnabled(false);
}
//选择路径
pathChooseButton.addActionListener(e -> {
//将当前选中的model设置为基础路径
VirtualFile path = ProjectUtils.getBaseDir(project);
Module module = getSelectModule();
if (module != null) {
path = ModuleUtils.getSourcePath(module);
}
VirtualFile virtualFile = FileChooser.chooseFile(FileChooserDescriptorFactory.createSingleFolderDescriptor(), project, path);
if (virtualFile != null) {
pathField.setText(virtualFile.getPath());
}
});
}
private void refreshData() {
// 获取选中的表信息(鼠标右键的那张表),并提示未知类型
TableInfo tableInfo;
if(entityMode) {
tableInfo = tableInfoService.getTableInfo(cacheDataUtils.getSelectPsiClass());
} else {
tableInfo = tableInfoService.getTableInfo(cacheDataUtils.getSelectDbTable());
}
// 设置默认配置信息
if (!StringUtils.isEmpty(tableInfo.getSaveModelName())) {
moduleComboBox.setSelectedItem(tableInfo.getSaveModelName());
}
if (!StringUtils.isEmpty(tableInfo.getSavePackageName())) {
packageField.setText(tableInfo.getSavePackageName());
}
if (!StringUtils.isEmpty(tableInfo.getPreName())) {
preField.setText(tableInfo.getPreName());
}
SettingsStorageDTO settings = S
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
EasyCode是基于IntelliJ IDEA开发的代码生成插件,支持自定义任意模板(Java,html,js,xml)。只要是与数据库相关的代码都可以通过自定义模板来生成。支持数据库类型与java类型映射关系配置。支持同时生成生成多张表的代码。每张表有独立的配置信息。完全的个性化定义,规则由你设置
资源推荐
资源详情
资源评论
收起资源包目录
基于IntelliJ IDEA Ultimate版开发的一个代码生成插件,主要通过自定义模板来生成各种你想要的代码 (156个子文件)
gradlew.bat 2KB
MainSettingForm.form 12KB
SelectSavePath.form 9KB
自定义附加属性.gif 2.1MB
单表生成.gif 1.88MB
动态调试.gif 1.62MB
自定义扩展属性.gif 1.31MB
单表代码生成.gif 1.04MB
自定义附加列.gif 1003KB
在线安装.gif 988KB
自定义模板.gif 813KB
多表生成.gif 728KB
多表代码生成.gif 685KB
安装教程.gif 615KB
添加数据源.gif 504KB
本地安装.gif 484KB
添加类型映射.gif 474KB
在线导出导入模板.gif 463KB
添加类型映射.gif 414KB
导出配置至本地.gif 374KB
.gitignore 157B
build.gradle 2KB
settings.gradle 30B
gradlew 5KB
templateDescription.html 4KB
globalConfigDescription.html 744B
gradle-wrapper.jar 58KB
SelectSavePath.java 13KB
TableInfoDTO.java 11KB
GlobalTool.java 11KB
ExportImportComponent.java 11KB
CodeGenerateServiceImpl.java 10KB
SaveFile.java 10KB
SettingsStorageDTO.java 9KB
EditListComponent.java 8KB
RealtimeDebugComponent.java 7KB
FileUtils.java 6KB
MainSettingForm.java 6KB
GroupNameComponent.java 6KB
TypeMapperSettingForm.java 6KB
GlobalConfigSettingForm.java 6KB
ColumnConfigSettingForm.java 6KB
GenerateDefaultConfigTest.java 6KB
TemplateSettingForm.java 6KB
MainAction.java 6KB
ConfigTableModel.java 5KB
ConfigTableDialog.java 5KB
EditorComponent.java 5KB
TableInfoSettingsDTO.java 5KB
CloneUtils.java 4KB
HttpUtils.java 4KB
TemplateSelectComponent.java 4KB
TableComponent.java 4KB
JSON.java 4KB
NameUtils.java 4KB
LocalFileExportImportSettingsServiceImpl.java 4KB
MainActionGroup.java 4KB
ModuleUtils.java 4KB
EasyCodeEntityAction.java 3KB
NetworkExportImportSettingsServiceImpl.java 3KB
ReflectionUtils.java 3KB
ProjectUtils.java 3KB
TemplateUtils.java 3KB
CompareFileUtils.java 3KB
TableInfoSettingsService.java 3KB
VelocityUtils.java 2KB
TableInfoSettingsServiceImpl.java 2KB
ColumnInfoDTO.java 2KB
CurrGroupUtils.java 2KB
StringUtils.java 2KB
ListRadioComponent.java 2KB
CellEditorFactory.java 2KB
ListCheckboxComponent.java 2KB
ExtraCodeGenerateUtils.java 2KB
PsiClassGenerateUtils.java 2KB
MessageDialogUtils.java 2KB
GlobalToolTest.java 1KB
LeftRightComponent.java 1KB
ClipboardExportImportSettingsServiceImpl.java 1KB
TableInfo.java 1KB
AbstractGroup.java 1KB
CompatibleUtils.java 1KB
GlobalDict.java 1KB
SettingsStorageServiceImpl.java 1KB
CodeGenerateService.java 1KB
BaseSettings.java 1KB
TimeUtils.java 1KB
CacheDataUtils.java 1KB
EditorSettingsInit.java 1KB
ColumnConfig.java 955B
DocCommentUtils.java 953B
GlobalConfig.java 915B
ConfigAction.java 911B
Template.java 908B
SettingsStorageService.java 848B
TypeMapper.java 808B
ColumnInfo.java 769B
TemplateUtilsTest.java 757B
InputExistsValidator.java 737B
AbstractItemFactory.java 688B
共 156 条
- 1
- 2
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6651
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功