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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
package com.runt.android.actions;
 
import org.json.JSONArray;
import org.json.JSONObject;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * My father is Object, ites purpose of
 *
 * @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-11-10.
 */
 
public class CreateNormalResult extends BaseCreateApiResult {
 
 
    /**
     * 获取json中解析的变量集合
     * @param jsonStr
     * @return
     */
    @Override
    protected Map<String,Object> getFieldNormalMap(String jsonStr){
        return getFieldNormalMap(new JSONObject(jsonStr));
    }
 
 
    /**
     * 获取json中解析的变量集合
     * @param jsonObject
     * @return
     */
    @Override
    protected Map<String,Object> getFieldNormalMap(JSONObject jsonObject){
        Map<String , Object> fieldMap = new HashMap<>();
        for(String key: jsonObject.keySet()){
            Object obj = jsonObject.get(key);
            key = humpName(key);//驼峰命名
            String clssName = obj.getClass().getSimpleName();//声明变量的数据类型
            if(obj instanceof JSONArray){
                Object val = ((JSONArray)obj).get(0);
                if(val instanceof JSONObject){
                    //将声明的变量定义为变量数据类型
                    String name = replaseS(key);//去复数
                    clssName ="java.util.List<"+toUperFirst(name)+">";
                }else {
                    clssName ="java.util.List<"+val.getClass().getSimpleName()+">";
                }
            }else if(obj instanceof JSONObject){
                //将声明的变量定义为变量数据类型
                clssName = toUperFirst(key);
            }
            //将key作为声明的变量名
            if(fieldMap.get(clssName) == null){//没有同数据类型的变量
                fieldMap.put(clssName,key);
            }else if(fieldMap.get(clssName) instanceof List){//已有同数据类型的变量
                List vlus = (List) fieldMap.get(clssName);
                vlus.add(key);//追加
            }else {//已有同数据类型的变量,转变为集合
                List vlus = new ArrayList();
                String field =  fieldMap.get(clssName).toString();
                vlus.add(field);
                vlus.add(key);//追加
                fieldMap.replace(clssName,vlus);//替换为集合
            }
        }
        return fieldMap;
    }
 
 
    protected String getClassStr (String json){
        return getClassStr(new JSONObject(json));
 
    }
 
    /**
     * 遍历json 创建内部类代码
     * @param jsonObject
     * @return
     */
    protected String getClassStr ( JSONObject jsonObject){
        StringBuilder sb = new StringBuilder();
        for(String key: jsonObject.keySet()){//遍历
            Object obj = jsonObject.get(key);
            if(obj instanceof JSONArray){
                Object val = ((JSONArray)obj).get(0);
                if(val instanceof JSONObject){//判断值是否为object
                    String name = replaseS(key);//去复数
                    sb.append(getClassStr(name,(JSONObject)val));//创建类代码
                }
            }else if(obj instanceof JSONObject){//判断值是否为object
                String name = replaseS(key);//去复数
                sb.append(getClassStr(name,(JSONObject)obj));//创建类代码
            }
        }
        return sb.toString();
    }
 
    /**
     * 生成内部类
     * @param name
     * @param jsonObject
     * @return
     */
    private String getClassStr(String name,JSONObject jsonObject){
 
        Map<String, Object> fieldMap = getFieldNormalMap(jsonObject);
        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());
            }
        }
        String classStr = getClassStr(jsonObject);//是否含有内部类
 
        name = toUperFirst(name);
        String template = getTemplateString("NormalClass")
                .replace("{fields}", getFields(jsonObject))//替换写入声明变量
                .replace("{name}", name)//类名
                .replace("{class}",classStr)//内部类
                .replace("{toString}",getToString(name,list.toArray(new String[0])));
        return  template;
    }
 
    @Override
    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());
            }
        }
        createFile(filePath,object[0],getFields(object[1]),packageName,"NormalResult",list.toArray(new String[0]),getClassStr(object[1]),"");
 
    }
 
    @Override
    public void createResultFile(String filePath, String name, String fieldsStr, String packageName, String[] fields) {
        createFile(filePath,name,fieldsStr,packageName,"NormalResult",fields,"","");
    }
 
 
    /**
     * 去掉复数形式
     * @param str
     * @return
     */
    public static String replaseS(String str){
        if( replaseS(str,"ves")){
            return  str.replace("ves","f");
 
        }else  if( replaseS(str,"ies")){
            return  str.replace("ies","y");
 
        }else  if( replaseS(str,"es")){
            return  str.replace("es","");
 
        }else  if( replaseS(str,"s" )  ){
            return  str.replace("s","");
 
        }else  if( replaseS(str,"men")){
            return  str.replace("men","man");
        }
        return  str;
    }
    public static boolean replaseS(String str,String Sstr ){
        if(str.lastIndexOf(Sstr) == str.length()-Sstr.length()){
            return true;
        }
        return false;
    }
}