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<String, Object> fieldMap = getFieldNormalMap(object[1]);
|
List<String> 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 );
|
|
}
|