package com.runt.android.actions; import com.intellij.ide.IdeView; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.LangDataKeys; import com.intellij.openapi.project.Project; import com.intellij.openapi.wm.WindowManager; import com.intellij.psi.PsiDirectory; import com.runt.android.dialogs.DoubleInputDialog; import com.runt.android.utils.Util; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * My father is Object, ites purpose of * * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-10-28. */ public abstract class BaseCreateApiResult extends BaseAction { @Override public void actionPerformed(AnActionEvent actionEvent) { Project project = actionEvent.getProject(); //选择的路径 IdeView ideView = actionEvent.getRequiredData(LangDataKeys.IDE_VIEW); PsiDirectory directory = ideView.getOrChooseDirectory(); String packageName = Util.getPackageDir(project,directory.toString()); String filePath = directory.toString().split("PsiDirectory:")[1];//选择的路径 //根据包名截取末尾路径 String path = filePath.substring(filePath.indexOf(packageName.replace(".","\\"))+packageName.replace(".","\\").length()); //转换并合并成包名 final String packageN = packageName+ path.replace("\\","."); // TODO: insert action logic here DoubleInputDialog dialog = createDoubleDialog(filePath,packageN,actionEvent); dialog.pack(); //设置对话框跟随当前windows窗口 dialog.setLocationRelativeTo(WindowManager.getInstance().getFrame(project)); dialog.setVisible(true); } /** * 创建弹框 * @param filePath * @param packageN * @param actionEvent * @return */ protected DoubleInputDialog createDoubleDialog(String filePath,String packageN,AnActionEvent actionEvent){ return new DoubleInputDialog(new DoubleInputDialog.DialogListener() { @Override public void Ok(String[] object) { //弹框确认 /*Messages.showMessageDialog(project,packageN+" "+object[1], "文件为空", Messages.getInformationIcon());*/ //去除换行 object[1] = object[1].replace("\"\n","\"") .replace(",\n",",") .replace("\n,",",") .replace("\n}","}") .replace("}\n","}") .replace("{\n","{"); if(object[1].indexOf("{")==0){//是否为json字符串 createResultFile(filePath, packageN,object); }else{ createResultFile(filePath,object[0],getFields(object[1].split(","),"public"),packageN,object[1].split(",")); } actionEvent.getProject().getBaseDir().refresh(false, true);//刷新项目 } @Override public void cancel(Object object) { } }); } /** * 创建文件 * @param filePath 文件路径 */ public void createResultFile(String filePath, String packageName, String[] object){ Map fieldMap = getFieldNormalMap(object[1]); List list = new ArrayList<>(); for(String key: fieldMap.keySet()){ if(fieldMap.get(key) instanceof List){ list.addAll((List)fieldMap.get(key)); }else{ list.add(fieldMap.get(key).toString()); } } createResultFile(filePath,object[0],getFields(object[1],"public"),packageName,list.toArray(new String[0])); } /** * 创建文件 * @param filePath 文件路径 * @param name 文件名称 * @param fieldsStr 声明变量代码 * @param packageName 包名 * @param fields 变量名称集合 */ public abstract void createResultFile(String filePath, String name, String fieldsStr, String packageName, String[] fields ); }