1、API升级

Former-commit-id: 13afd172bd3c839aa9bb98ad1a4aab2d129c3973
master
wangbing 5 years ago
parent 79ed641b71
commit a43cc1c13e

@ -20,6 +20,7 @@ import xyz.wbsite.dbtool.javafx.view.DBCheckBoxTableCell;
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -203,7 +204,7 @@ public class OptionApiController {
data.clear();
if (moduleFile.exists()) {
List<File> apiPath = Tool.find(moduleFile, "api");
List<File> apiPath = Tool.findApi(moduleFile, "api");
if (apiPath.size() == 0) {
return;
@ -238,7 +239,7 @@ public class OptionApiController {
api.setResponse(apiMethod.getResponse());
api.setMethod(apiMethod.getMethod());
List<File> reqFiles = Tool.find(moduleFile, apiMethod.getRequest() + ".java");
List<File> reqFiles = Tool.findRequest(moduleFile, apiMethod.getRequest() + ".java");
if (reqFiles.size() == 0) {
api.setError(api.getError() + "未找到请求");
} else if (reqFiles.size() > 1) {
@ -258,7 +259,7 @@ public class OptionApiController {
}
}
List<File> rspfiles = Tool.find(moduleFile, apiMethod.getResponse() + ".java");
List<File> rspfiles = Tool.findResponse(moduleFile, apiMethod.getResponse() + ".java");
if (rspfiles.size() == 0) {
api.setError(api.getError() + "未找到响应");
} else if (rspfiles.size() > 1) {

@ -14,6 +14,7 @@ import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.regex.Matcher;
@ -26,7 +27,8 @@ public class ApiCallable implements Callable {
private List<Api> apiList;
private List<String> domainList;
private Tool tool = new Tool();
File domain;
File testdomain;
private FreeMarkerManager freeMarkerManager;
public ApiCallable(File module, File apiFile, List<String> domainList, List<Api> apiList) {
@ -46,8 +48,6 @@ public class ApiCallable implements Callable {
AbstractDBmapper dBmapper = ProjectManager.dBmapper;
File domain;
File testdomain;
StringBuffer sbmain = new StringBuffer("");
sbmain.append(this.apiFile.getPath() + File.separator);
@ -82,180 +82,11 @@ public class ApiCallable implements Callable {
File entity = new File(apiModule, "ent");
entity.mkdirs();
try {
//region 生成request
RequestReader requestReader = new RequestReader(api.getRequestFile());
for (int i = 0; i < requestReader.getImportList().size(); i++) {
String s = requestReader.getImportList().get(i);
if (s.contains(".module.entity.")) {
requestReader.getImportList().set(i, s);
}
}
List<String> entNames = new ArrayList<>();
for (String s : requestReader.getDeptEntList()) {
Pattern compile = Pattern.compile("(.*\\.ent)\\.(.*)");
Matcher matcher = compile.matcher(s);
if (matcher.find()) {
String Package = matcher.group(1);
String EntName = matcher.group(2);
entNames.add(EntName);
List<File> files = Tool.find(this.module, EntName + ".java");
for (File file : files) {
EntityReader entReader = new EntityReader(file);
if (Package.equals(entReader.getModuleName())) {
HashMap<String, Object> ctx = new HashMap<String, Object>();
ctx.put("package", "package " + entReader.getDomainName() + "." + entReader.getModuleName() + "." + "req;");
ctx.put("domain", entReader.getDomainName());
ctx.put("module", entReader.getModuleName());
ctx.put("importList", entReader.getImportList());
ctx.put("annotation", entReader.getNotesList());
ctx.put("className", entReader.getClassName().replaceAll("Entity", ""));
ctx.put("body", entReader.getBody());
ctx.put("tool", tool);
File EntFile = new File(entity.getAbsolutePath(), EntName + ".java");
freeMarkerManager.outputTemp(EntFile, "Java_api/module/ent/entity.java", ctx);
System.out.println("生成文件" + EntName + "成功");
}
}
}
}
for (String reqName : requestReader.getDeptReqList()) {
List<File> files = Tool.find(this.module, reqName + ".java");
for (File file : files) {
RequestReader reqReader = new RequestReader(file);
if (requestReader.getModuleName().equals(reqReader.getModuleName())) {
boolean isTempReq = true;
for (Api api1 : apiList) {
if (api1.isCheck() && api1.getRequest().equals(reqName) && api1.getModule().equals(api.getModule())) {
isTempReq = false;
}
}
if (isTempReq){
HashMap<String, Object> ctx = new HashMap<String, Object>();
ctx.put("package", "package " + reqReader.getDomainName() + "." + reqReader.getModuleName() + "." + "req;");
ctx.put("domain", reqReader.getDomainName());
ctx.put("module", reqReader.getModuleName());
ctx.put("target", api.getTarget());
ctx.put("method", api.getMethod());
ctx.put("isTempReq", isTempReq);
ctx.put("importList", reqReader.getImportList());
ctx.put("entNames", entNames);
ctx.put("annotation", reqReader.getNotesList());
ctx.put("className", reqReader.getClassName().replaceAll("Request", ""));
ctx.put("body", reqReader.getBody());
ctx.put("tool", tool);
ctx.put("hasList", reqReader.isHasList());
ctx.put("findOrSearchflag", reqReader.getFindOrSearchflag());
File reqfile = new File(apiRequest.getAbsolutePath(), reqName + ".java");
freeMarkerManager.outputTemp(reqfile, "Java_api/module/req/request.java", ctx);
System.out.println("生成文件" + reqfile.getName() + "成功");
}
}
}
}
generateRequest(requestReader);
{
HashMap<String, Object> ctx = new HashMap<String, Object>();
ctx.put("package", "package " + requestReader.getDomainName() + "." + requestReader.getModuleName() + "." + "request;");
ctx.put("domain", requestReader.getDomainName());
ctx.put("module", requestReader.getModuleName());
ctx.put("target", api.getTarget());
ctx.put("method", api.getMethod());
ctx.put("isTempReq", false);
ctx.put("importList", requestReader.getImportList());
ctx.put("entNames", entNames);
ctx.put("annotation", requestReader.getNotesList());
ctx.put("className", requestReader.getClassName().replaceAll("Request", ""));
ctx.put("body", requestReader.getBody());
ctx.put("tool", tool);
ctx.put("hasList", requestReader.isHasList());
ctx.put("findOrSearchflag", requestReader.getFindOrSearchflag());
File file = new File(apiRequest.getAbsolutePath(), api.getRequestFile().getName());
freeMarkerManager.outputTemp(file, "Java_api/module/req/request.java", ctx);
System.out.println("生成文件" + file.getName() + "成功");
}
//endregion
} catch (IOException e) {
e.printStackTrace();
}
try {
//region 生成response
ResponseReader responseReader = new ResponseReader(api.getResponseFile());
for (int i = 0; i < responseReader.getImportList().size(); i++) {
String import_ = responseReader.getImportList().get(i);
if (import_.contains(".module.entity.")) {
responseReader.getImportList().set(i, import_);
}
}
List<String> entNames = new ArrayList<>();
for (String s : responseReader.getDeptEntList()) {
Pattern compile = Pattern.compile("(.*\\.ent)\\.(.*)");
Matcher matcher = compile.matcher(s);
if (matcher.find()) {
String Package = matcher.group(1);
String EntName = matcher.group(2);
entNames.add(EntName);
List<File> files = Tool.find(this.module, EntName + ".java");
for (File file : files) {
EntityReader entReader = new EntityReader(file);
if (Package.equals(entReader.getModuleName())) {
HashMap<String, Object> ctx = new HashMap<String, Object>();
ctx.put("package", "package " + entReader.getDomainName() + "." + entReader.getModuleName() + "." + "request;");
ctx.put("domain", entReader.getDomainName());
ctx.put("module", entReader.getModuleName());
ctx.put("importList", entReader.getImportList());
ctx.put("annotation", entReader.getNotesList());
ctx.put("className", entReader.getClassName().replaceAll("Entity", ""));
ctx.put("body", entReader.getBody());
ctx.put("tool", tool);
File EntFile = new File(entity.getAbsolutePath(), EntName + ".java");
freeMarkerManager.outputTemp(EntFile, "Java_api/module/ent/entity.java", ctx);
System.out.println("生成文件" + EntName + "成功");
}
}
}
}
{
HashMap<String, Object> ctx = new HashMap<String, Object>();
ctx.put("package", "package " + responseReader.getDomainName() + "." + responseReader.getModuleName() + "." + "request;");
ctx.put("domain", responseReader.getDomainName());
ctx.put("module", responseReader.getModuleName());
ctx.put("importList", responseReader.getImportList());
ctx.put("entNames", entNames);
ctx.put("annotation", responseReader.getNotesList());
ctx.put("className", responseReader.getClassName().replaceAll("Response", ""));
ctx.put("body", responseReader.getBody());
ctx.put("tool", tool);
ctx.put("hasList", responseReader.isHasList());
ctx.put("Tclass", responseReader.getTclass());
File file = new File(apiResponse.getAbsolutePath(), api.getResponseFile().getName().replaceAll("Request", "Response"));
freeMarkerManager.outputTemp(file, "Java_api/module/rsp/response.java", ctx);
System.out.println("生成文件" + api.getResponseFile().getName() + "成功");
}
//endregion
} catch (IOException e) {
e.printStackTrace();
}
generateResponse(responseReader);
}
}
@ -359,6 +190,12 @@ public class ApiCallable implements Callable {
HashMap<String, Object> ctx = new HashMap<String, Object>();
ctx.put("tool", tool);
ctx.put("domain", String.join(".", domainList));
HashSet<String> hashSet = new HashSet<>();
for (Api api : apiList) {
hashSet.add(api.getModule());
}
ctx.put("modules", hashSet);
ctx.put("apiList", apiList);
freeMarkerManager.outputTemp(new File(testdomain.getAbsolutePath(), "ApiTest.java"), "Java_api/ApiTest.java", ctx);
}
@ -366,4 +203,150 @@ public class ApiCallable implements Callable {
System.out.println("finish");
return true;
}
private void generateRequest(RequestReader reader) {
String reqName = reader.getClassName();
// 查找是否存在对应的Api,有则为公开的请求方法
Api api = null;
for (Api api1 : apiList) {
if (api1.isCheck() && api1.getRequest().equals(reqName)) {
api = api1;
}
}
List<String> entNames = new ArrayList<>();
for (String s : reader.getDeptEntList()) {
Pattern compile = Pattern.compile("(.*\\.ent)\\.(.*)");
Matcher matcher = compile.matcher(s);
if (matcher.find()) {
String Package = matcher.group(1);
String EntName = matcher.group(2);
entNames.add(EntName);
List<File> files = Tool.findEntity(this.module, EntName + ".java");
for (File file : files) {
try {
EntityReader entReader = new EntityReader(file);
generateEntity(entReader);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
List<String> reqNames = new ArrayList<>();
for (String depReqName : reader.getDeptReqList()) {
Pattern compile = Pattern.compile("(.*\\.req)\\.(.*)");
Matcher matcher = compile.matcher(depReqName);
if (matcher.find()) {
String Package = matcher.group(1);
String ReqName = matcher.group(2);
entNames.add(depReqName);
List<File> files = Tool.findRequest(this.module, depReqName + ".java");
for (File file : files) {
try {
RequestReader reqReader = new RequestReader(file);
generateRequest(reqReader);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
{
HashMap<String, Object> ctx = new HashMap<String, Object>();
ctx.put("domain", reader.getDomainName());
ctx.put("module", reader.getModuleName());
ctx.put("isTempReq", api == null);
if (api != null) {
ctx.put("target", api.getTarget());
ctx.put("method", api.getMethod());
} else {
ctx.put("target", "");
ctx.put("method", "");
}
ctx.put("importList", reader.getImportList());
ctx.put("entNames", entNames);
ctx.put("reqNames", reqNames);
ctx.put("annotation", reader.getNotesList());
ctx.put("className", reader.getClassName());
ctx.put("rspClassName", reader.getClassName().replaceAll("Request", "Response"));
ctx.put("body", reader.getBody());
ctx.put("tool", tool);
ctx.put("hasList", reader.isHasList());
ctx.put("findOrSearchflag", reader.getFindOrSearchflag());
File req = Tool.createPath(domain.getAbsolutePath(), reader.getModuleName(), "req");
File file = new File(req, reader.getClassName() + ".java");
freeMarkerManager.outputTemp(file, "Java_api/module/req/request.java", ctx);
System.out.println("生成文件" + file.getName() + "成功");
}
}
private void generateResponse(ResponseReader reader) {
List<String> entNames = new ArrayList<>();
for (String s : reader.getDeptEntList()) {
Pattern compile = Pattern.compile("(.*\\.ent)\\.(.*)");
Matcher matcher = compile.matcher(s);
if (matcher.find()) {
String Package = matcher.group(1);
String EntName = matcher.group(2);
entNames.add(EntName);
List<File> files = Tool.findEntity(this.module, EntName + ".java");
for (File file : files) {
try {
EntityReader entReader = new EntityReader(file);
generateEntity(entReader);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
{
HashMap<String, Object> ctx = new HashMap<String, Object>();
ctx.put("domain", reader.getDomainName());
ctx.put("module", reader.getModuleName());
ctx.put("importList", reader.getImportList());
ctx.put("entNames", entNames);
ctx.put("annotation", reader.getNotesList());
ctx.put("className", reader.getClassName());
ctx.put("body", reader.getBody());
ctx.put("tool", tool);
ctx.put("hasList", reader.isHasList());
ctx.put("Tclass", reader.getTclass());
File rsp = Tool.createPath(domain.getAbsolutePath(), reader.getModuleName(), "rsp");
File file = new File(rsp, reader.getClassName() + ".java");
freeMarkerManager.outputTemp(file, "Java_api/module/rsp/response.java", ctx);
System.out.println("生成文件" + reader.getClassName() + "成功");
}
}
private void generateEntity(EntityReader reader) {
HashMap<String, Object> ctx = new HashMap<String, Object>();
ctx.put("domain", reader.getDomainName());
ctx.put("module", reader.getModuleName());
ctx.put("importList", reader.getImportList());
ctx.put("annotation", reader.getNotesList());
ctx.put("className", reader.getClassName());
ctx.put("body", reader.getBody());
ctx.put("tool", tool);
File ent = Tool.createPath(domain.getAbsolutePath(), reader.getModuleName(), "ent");
File EntFile = new File(ent, reader.getClassName() + ".java");
freeMarkerManager.outputTemp(EntFile, "Java_api/module/ent/entity.java", ctx);
System.out.println("生成文件" + reader.getClassName() + "成功");
}
}

@ -1,7 +1,10 @@
package xyz.wbsite.dbtool.javafx.tool;
import java.io.*;
import java.util.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -38,7 +41,7 @@ public class EntityReader {
String line = null;
while ((line = bufferedReader.readLine()) != null) {
if (line.matches("\\s*package\\s(.*);")) {
Pattern compile = Pattern.compile("\\s*package\\s(.*)\\.module\\.(.*).req;");
Pattern compile = Pattern.compile("\\s*package\\s(.*)\\.module\\.(.*).ent;");
Matcher matcher = compile.matcher(line);
if (matcher.find()) {
domainName = matcher.group(1);
@ -65,7 +68,7 @@ public class EntityReader {
}
continue;
}
if (line.contains("/**") || line.contains("*") || line.contains("*/")) {
if ((line.contains("/**") || line.contains("*") || line.contains("*/")) && body.size() == 0) {
notesList.add(line);
}
@ -80,7 +83,6 @@ public class EntityReader {
continue;
}
if (className != null) {
body.add(line);
if (line.matches("\\s*private\\s+(.*Request)\\s+(.*);")) {
Pattern compile = Pattern.compile("\\s*private\\s+(.*Request)\\s+(.*);");
Matcher matcher = compile.matcher(line);
@ -90,6 +92,14 @@ public class EntityReader {
deptReqList.add(group);
}
}
if (line.contains("@ColumnName") ||
line.contains("@ColumnDescription")
) {
continue;
}
body.add(line);
}
}

@ -72,8 +72,8 @@ public class RequestReader {
notesList.add(line);
}
if (line.matches("public class (.*Request) extends (.*)Request\\s*\\{")) {
Pattern compile = Pattern.compile("public class (.*Request) extends (.*)Request\\s\\{");
if (line.matches("public\\s+class\\s+(.*Request)\\s+extends\\s+(.*)Request\\s*\\{")) {
Pattern compile = Pattern.compile("public\\s+class\\s+(.*Request)\\s+extends\\s+(.*)Request\\s*\\{");
Matcher matcher = compile.matcher(line);
if (matcher.find()) {
@ -92,7 +92,6 @@ public class RequestReader {
continue;
}
if (className != null) {
body.add(line);
if (line.matches("\\s*private\\s+(.*Request)\\s+(.*);")) {
@ -104,6 +103,14 @@ public class RequestReader {
deptReqList.add(group);
}
}
if (line.contains("@ColumnName") ||
line.contains("@ColumnDescription")
) {
continue;
}
body.add(line);
}
}

@ -1,7 +1,10 @@
package xyz.wbsite.dbtool.javafx.tool;
import java.io.*;
import java.util.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -70,7 +73,7 @@ public class ResponseReader {
notesList.add(line);
}
if (line.matches("public class (.*Response) extends (.*)Response\\s*\\{")) {
Pattern compile = Pattern.compile("public class (.*Response) extends (.*)Response\\s\\{");
Pattern compile = Pattern.compile("public class (.*Response) extends (.*)Response\\s*\\{");
Matcher matcher = compile.matcher(line);
if (matcher.find()) {
@ -84,6 +87,22 @@ public class ResponseReader {
}
continue;
}
if (line.matches("public class (.*Response) extends (.*)Response<(.*)>\\s*\\{")) {
Pattern compile = Pattern.compile("public class (.*Response) extends (.*)Response<(.*)>\\s*\\{");
Matcher matcher = compile.matcher(line);
if (matcher.find()) {
className = matcher.group(1);
fatherName = matcher.group(2);
Tclass = matcher.group(3);
if (fatherName.contains("BaseFindResponse")) {
hasList = true;
findOrSearchflag = "1";
}
}
continue;
}
if (className != null) {
body.add(line);
}

@ -3,6 +3,7 @@ package xyz.wbsite.dbtool.javafx.tool;
import java.io.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
import java.util.regex.Matcher;
@ -371,6 +372,67 @@ public class Tool {
return fileList;
}
public static List<File> findRequest(File file, String name) {
List<File> files = Tool.find(file, name);
Iterator<File> iterator = files.iterator();
while (iterator.hasNext()) {
File next = iterator.next();
if (!next.getAbsolutePath().contains("module") || !next.getAbsolutePath().contains("req")) {
iterator.remove();
}
}
return files;
}
public static List<File> findResponse(File file, String name) {
List<File> files = Tool.find(file, name);
Iterator<File> iterator = files.iterator();
while (iterator.hasNext()) {
File next = iterator.next();
if (!next.getAbsolutePath().contains("module") || !next.getAbsolutePath().contains("rsp")) {
iterator.remove();
}
}
return files;
}
public static List<File> findEntity(File file, String name) {
List<File> files = Tool.find(file, name);
Iterator<File> iterator = files.iterator();
while (iterator.hasNext()) {
File next = iterator.next();
if (!next.getAbsolutePath().contains("module") || !next.getAbsolutePath().contains("ent")) {
iterator.remove();
}
}
return files;
}
public static List<File> findApi(File file, String name) {
List<File> files = Tool.find(file, name);
Iterator<File> iterator = files.iterator();
while (iterator.hasNext()) {
File next = iterator.next();
if (!next.getAbsolutePath().contains("action") || !next.getAbsolutePath().contains("api")) {
iterator.remove();
}
}
return files;
}
public static File createPath(String... subdir) {
if (subdir.length == 0) {
return null;
}
File file = new File(subdir[0]);
for (int i = 1; i < subdir.length; i++) {
file = new File(file, subdir[i]);
}
file.mkdirs();
return file;
}
public static boolean hasChild(File file, String child) {
if (file == null || child == null || "".equals(child) || file.listFiles() == null) {
return false;

@ -1,12 +1,13 @@
package ${domain};
import ${domain}.request.*;
import ${domain}.response.*;
<#list modules as module>
import ${domain}.${module}.req.*;
import ${domain}.${module}.rsp.*;
</#list>
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

@ -7,7 +7,7 @@ ${i}
import ${domain}.${module}.ent.${entName};
</#list>
<#if !isTempReq>
import ${domain}.${module}.rsp.${className}Response;
import ${domain}.${module}.rsp.${rspClassName};
</#if>
import ${domain}.ApiRequest;
<#if findOrSearchflag=='1'>
@ -20,17 +20,17 @@ import ${domain}.ApiSearchRequest;
${i}
</#list>
<#if findOrSearchflag=='1' && !isTempReq>
public class ${className}Request extends ApiFindRequest implements ApiRequest<${className}Response> {
public class ${className} extends ApiFindRequest implements ApiRequest<${rspClassName}> {
<#elseif findOrSearchflag=='1' && isTempReq>
public class ${className}Request extends ApiFindRequest implements ApiRequest {
public class ${className} extends ApiFindRequest implements ApiRequest {
<#elseif findOrSearchflag=='2' && !isTempReq>
public class ${className}Request extends ApiSearchRequest implements ApiRequest<${className}Response> {
public class ${className} extends ApiSearchRequest implements ApiRequest<${rspClassName}> {
<#elseif findOrSearchflag=='2' && isTempReq>
public class ${className}Request extends ApiSearchRequest implements ApiRequest {
public class ${className} extends ApiSearchRequest implements ApiRequest {
<#elseif !isTempReq>
public class ${className}Request implements ApiRequest<${className}Response> {
public class ${className} implements ApiRequest<${rspClassName}> {
<#elseif isTempReq>
public class ${className}Request implements ApiRequest {
public class ${className} implements ApiRequest {
</#if>
<#list body as i>
@ -48,8 +48,8 @@ ${i}
}
<#if !isTempReq>
public Class<${className}Response> responseClass() {
return ${className}Response.class;
public Class<${rspClassName}> responseClass() {
return ${rspClassName}.class;
}
<#elseif isTempReq>
public Class responseClass() {

@ -15,7 +15,7 @@ import ${domain}.ApiResponse;
<#list annotation as i>
${i}
</#list>
public class ${className}Response extends<#if hasList> ApiFindResponse<${Tclass}><#else> ApiResponse</#if> {
public class ${className} extends<#if hasList> ApiFindResponse<${Tclass}><#else> ApiResponse</#if> {
<#list body as i>
${i}

Loading…
Cancel
Save

Powered by TurnKey Linux.