package com.runt.android.actions;
|
|
import com.intellij.openapi.actionSystem.AnAction;
|
|
import org.json.JSONArray;
|
import org.json.JSONObject;
|
|
import java.io.BufferedWriter;
|
import java.io.ByteArrayOutputStream;
|
import java.io.File;
|
import java.io.FileWriter;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Properties;
|
|
/**
|
* My father is Object, ites purpose of
|
*
|
* @purpose Created by Runt (qingingrunt2010@qq.com) on 2020-10-27.
|
*/
|
|
public abstract class BaseAction extends AnAction {
|
|
protected final SimpleDateFormat dateFormat = new SimpleDateFormat ("yyyy-MM-dd");
|
|
/**
|
* 生成参数变量代码
|
* @param args
|
* @return
|
*/
|
public String getFields(String[] args, String keyWord){
|
StringBuilder fieldStr = new StringBuilder();
|
for(String field : args){
|
fieldStr.append(keyWord+" String "+humpName(field)+";\n");//创建参数变量,默认string
|
}
|
return fieldStr.toString();
|
}
|
/**
|
* 生成参数变量代码
|
* @param jsonStr json格式对象
|
* @return
|
*/
|
public String getFields(String jsonStr ){
|
return getFields(new JSONObject(jsonStr),"public");
|
|
}
|
|
/**
|
* 生成参数变量代码
|
* @param jsonStr json格式对象
|
* @param keyWord 关键字 public,private,protect等
|
* @return
|
*/
|
public String getFields(String jsonStr , String keyWord){
|
return getFields(new JSONObject(jsonStr),keyWord);
|
|
}
|
|
public String getFields(JSONObject jsonObject ) {
|
return getFields(jsonObject,"public");
|
}
|
public String getFields(JSONObject jsonObject , String keyWord){
|
StringBuilder fieldStr = new StringBuilder();
|
Map<String , Object> fieldMap = getFieldNormalMap(jsonObject);
|
for(String clssName : fieldMap.keySet()){
|
if(fieldMap.get(clssName) instanceof List){
|
//创建参数变量,
|
fieldStr.append(keyWord+" " + (clssName.toLowerCase().equals("null") ? "String":clssName) + " " );
|
List<String> fields= (List<String>) fieldMap.get(clssName);
|
for(String field : fields){
|
if(fields.indexOf(field) == fields.size() -1 ){
|
fieldStr.append( field + ";\n");
|
}else{
|
fieldStr.append( field + ",");
|
}
|
}
|
}else {
|
//创建参数变量,
|
fieldStr.append(keyWord+" " + (clssName.toLowerCase().equals("null") ? "String":clssName) + " " + fieldMap.get(clssName) + " ;\n");
|
}
|
}
|
return fieldStr.toString();
|
|
}
|
/**
|
* 获取json中解析的普通变量集合
|
* @param jsonStr
|
* @return
|
*/
|
protected Map<String,Object> getFieldNormalMap(String jsonStr){
|
return getFieldNormalMap(new JSONObject(jsonStr));
|
}
|
|
/**
|
* 获取json中解析的普通变量集合
|
* @param jsonObject
|
* @return
|
*/
|
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){
|
clssName = "List";
|
}else if(obj instanceof JSONObject){
|
clssName = "Map";
|
}
|
//将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;
|
}
|
|
|
/**
|
* 创建api返回类文件
|
*/
|
protected void createApiFile(String filePath,String name, String fieldsStr,String packageName,String fileName,String[] fields ){
|
createApiFile(filePath,name,fieldsStr,packageName,fileName,fields,"");
|
}
|
|
/**
|
*
|
* 创建api返回类文件
|
* @param filePath 文件路径
|
* @param name 文件名称
|
* @param fieldsStr 声明变量字符串
|
* @param packageName 包名
|
* @param fileName 模版文件
|
* @param fields 变量名集合
|
* @param classStr 内部类代码字符
|
*/
|
protected void createApiFile(String filePath,String name, String fieldsStr,String packageName,String fileName,String[] fields,String classStr){
|
createFile(filePath,name,fieldsStr,packageName,fileName,fields,classStr,"Result");
|
}
|
|
/**
|
* 创建数据类文件
|
* @param suffix 文件名后缀
|
*/
|
protected void createFile(String filePath,String name, String fieldsStr,String packageName,String fileName,String[] fields,String classStr,String suffix){
|
try {
|
String desc = name;
|
if(name.indexOf(",")>-1){
|
desc = name.split(",")[1];
|
name = name.split(",")[0];
|
}
|
name = toUperFirst(name);
|
Properties prop = System.getProperties();
|
String template = getTemplateString(fileName)
|
.replace("{desc}", desc)
|
.replace("{date}", dateFormat.format(new Date()))
|
.replace("{author}", prop.getProperty( "user.name" )+" "+prop.getProperty("os.name"))
|
.replace("{fields}", fieldsStr)
|
.replace("{name}", name)
|
.replace("{class}",classStr)
|
.replace("{package}",packageName)
|
.replace("{toString}",getToString(name,fields));
|
File viewFile = new File(filePath, name+suffix+".java");
|
if (!viewFile.exists()) {
|
viewFile.createNewFile();
|
}
|
FileWriter fw = new FileWriter(viewFile.getAbsoluteFile());
|
BufferedWriter bw = new BufferedWriter(fw);
|
bw.write(template);
|
bw.close();
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
|
}
|
|
|
|
/**
|
* 重写 toString
|
* @param name
|
* @param fields
|
* @return
|
*/
|
protected String getToString(String name,String[] fields){
|
StringBuilder sb = new StringBuilder();
|
sb.append("@Override\n");
|
sb.append("public String toString() {\n");
|
sb.append("return \""+name+"{\" + \n");
|
for(String field : fields){
|
sb.append(" \""+humpName(field)+"=\" + "+humpName(field)+(field.equals(fields[fields.length-1])?"+":"+\",\"+")+"\n");
|
}
|
sb.append("'}';\n");
|
sb.append("}\n");
|
return sb.toString();
|
}
|
|
/**
|
* 驼峰命名
|
* @param name
|
* @return
|
*/
|
public String humpName(String name){
|
String[] strings = name.split("_");
|
StringBuilder sb = new StringBuilder();
|
sb.append(strings[0]);
|
for(int i = 1 ; i < strings.length ; i ++){
|
sb.append(toUperFirst(strings[i]));
|
}
|
return sb.toString();
|
}
|
|
|
/**
|
* 首字母大写
|
* @param name
|
* @return
|
*/
|
public String toUperFirst(String name){
|
return name.substring(0,1).toUpperCase()+name.substring(1);
|
}
|
|
|
/**
|
* 获取模板字符串
|
*/
|
public String getTemplateString(String fileName) {
|
InputStream in = null;
|
in = this.getClass().getResourceAsStream("/template/" + fileName);
|
String content = "";
|
try {
|
content = new String(readStream(in));
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
return content;
|
}
|
private byte[] readStream(InputStream inputStream) throws IOException {
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
byte[] buffer = new byte[1024];
|
int len;
|
try {
|
while ((len = inputStream.read(buffer)) != -1){
|
outputStream.write(buffer, 0, len);
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
}finally {
|
outputStream.close();
|
inputStream.close();
|
}
|
return outputStream.toByteArray();
|
}
|
}
|