Runt的android项目开发插件
Runt
2021-06-08 5a56af922a4e0f5743073f4636ab64c6dc0bd4b9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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 );
 
}