package com.github.mars05.crud.intellij.plugin.action; import com.github.mars05.crud.intellij.plugin.util.CrudUtils; import com.github.mars05.crud.intellij.plugin.util.PsiFileUtils; import com.github.mars05.crud.intellij.plugin.util.Selection; import com.github.mars05.crud.intellij.plugin.util.SelectionContext; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataKeys; import com.intellij.openapi.application.Result; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtil; import com.intellij.openapi.project.DumbAwareRunnable; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.vfs.VirtualFile; import org.apache.commons.lang3.StringUtils; import org.jetbrains.annotations.NotNull; /** * @author xiaoyu */ public class NewFileAction extends AnAction { @Override public void actionPerformed(AnActionEvent e) { Project project = e.getProject(); VirtualFile virtualFile = e.getData(DataKeys.VIRTUAL_FILE); if (!virtualFile.isDirectory()) { virtualFile = virtualFile.getParent(); } Module module = ModuleUtil.findModuleForFile(virtualFile, project); String moduleRootPath = ModuleRootManager.getInstance(module).getContentRoots()[0].getPath(); String actionDir = virtualFile.getPath(); String str = StringUtils.substringAfter(actionDir, moduleRootPath + "/src/main/java/"); String basePackage = StringUtils.replace(str, "/", "."); SelectionContext.clearAllSet(); SelectionContext.setPackage(basePackage); if (StringUtils.isNotBlank(basePackage)) { basePackage += "."; } SelectionContext.setControllerPackage(basePackage + "controller"); SelectionContext.setServicePackage(basePackage + "service"); SelectionContext.setDaoPackage(basePackage + "dao"); SelectionContext.setModelPackage(basePackage + "model"); SelectionContext.setMapperDir(moduleRootPath + "/src/main/resources/mapper"); CrudActionDialog dialog = new CrudActionDialog(project, module); if (!dialog.showAndGet()) { return; } DumbService.getInstance(project).runWhenSmart((DumbAwareRunnable) () -> new WriteCommandAction(project) { @Override protected void run(@NotNull Result result) { Selection selection = SelectionContext.copyToSelection(); SelectionContext.clearAllSet(); try { PsiFileUtils.createCrud(project, selection, moduleRootPath); } catch (Exception ex) { ex.printStackTrace(); } //优化生成的所有Java类 CrudUtils.doOptimize(project); } }.execute()); } }