package com.github.hykes.codegen; import com.github.hykes.codegen.configurable.SettingManager; import com.github.hykes.codegen.constants.CodeGenBundle; import com.github.hykes.codegen.gui.ActionOperator; import com.github.hykes.codegen.gui.SelectGroupPanel; import com.github.hykes.codegen.gui.cmt.MyDialogWrapper; import com.github.hykes.codegen.model.CodeContext; import com.github.hykes.codegen.model.CodeRoot; import com.github.hykes.codegen.model.IdeaContext; import com.github.hykes.codegen.utils.GuiUtil; import com.github.hykes.codegen.utils.PsiUtil; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; import java.util.Collections; import java.util.List; /** * Desc: 直接生成模板文件 * <p> * Mail: [email protected] * @author IceMimosa * Date: 2019-05-07 */ public class FileGeneratorAction extends AnAction implements DumbAware { @Override public void actionPerformed(@NotNull AnActionEvent e) { Project project = PsiUtil.getProject(e); DumbService dumbService = DumbService.getInstance(project); if (dumbService.isDumb()) { dumbService.showDumbModeNotification(CodeGenBundle.message("codegen.plugin.is.not.available.during.indexing")); return; } IdeaContext ideaContext = new IdeaContext(project); // 获取所有模板, 渲染选择控件 // TODO: 是否需要自定义参数的表格 List<CodeRoot> codeRoots = SettingManager.getInstance().getTemplates().getRoots(); SelectGroupPanel selectGroupPanel = new SelectGroupPanel(codeRoots, project); MyDialogWrapper frameWrapper = new MyDialogWrapper(project, selectGroupPanel.getRootPanel()); frameWrapper.setActionOperator(new FileGeneratorActionOperator(ideaContext, selectGroupPanel)); frameWrapper.setTitle("CodeGen-Files"); frameWrapper.setSize(600, 400); frameWrapper.setResizable(false); frameWrapper.show(); } class FileGeneratorActionOperator implements ActionOperator { private SelectGroupPanel selectGroupPanel; private IdeaContext ideaContext; public FileGeneratorActionOperator(IdeaContext ideaContext, SelectGroupPanel selectGroupPanel) { this.ideaContext = ideaContext; this.selectGroupPanel = selectGroupPanel; } @Override public void ok() { if (selectGroupPanel.hasSelected()) { GuiUtil.generateFile( this.ideaContext, Collections.singletonList(new CodeContext("__model__", "", "", Collections.emptyList())), this.selectGroupPanel.getGroupPathMap() ); } } @Override public void cancel() { } @Override public boolean valid() { return true; } } }