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;
|
}
|
}
|