001/** 002 * Copyright (c) 2015-2022, Michael Yang 杨福海 (fuhai999@gmail.com). 003 * <p> 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * <p> 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * <p> 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package io.jboot.apidoc; 017 018import com.jfinal.kit.Ret; 019import com.jfinal.plugin.activerecord.Page; 020import io.jboot.utils.ClassType; 021 022import java.lang.reflect.Method; 023import java.util.ArrayList; 024import java.util.HashMap; 025import java.util.List; 026import java.util.Map; 027 028public class ApiMockBuilders { 029 030 static ApiMockBuilder retBuilder = new ApiMockBuilder() { 031 @Override 032 public Object build(ClassType classType, Method method, int level) { 033 Ret ret = Ret.ok(); 034 if (classType.isGeneric()) { 035 ClassType[] genericTypes = classType.getGenericTypes(); 036 if (genericTypes.length == 1) { 037 Class<?> type = genericTypes[0].getMainClass(); 038 if (List.class.isAssignableFrom(type)) { 039 ret.set("list", getMockObject(genericTypes[0], method, level)); 040 } else if (Map.class.isAssignableFrom(type)) { 041 ret.set("map", getMockObject(genericTypes[0], method, level)); 042 } else if (Page.class.isAssignableFrom(type)) { 043 ret.set("page", getMockObject(genericTypes[0], method, level)); 044 } else { 045 ret.set("object", getMockObject(genericTypes[0], method, level)); 046 } 047 } 048 } 049 List<ApiResponse> responses = ApiDocUtil.getApiResponseInMethod(method); 050 for (ApiResponse response : responses) { 051 Object mockObject = null; 052 if (level == 0 && !response.isType(Map.class) && !response.isType(Ret.class)) { 053 mockObject = getMockObject(response.getClassType(), method, level); 054 } 055 if (mockObject == null || "".equals(mockObject)) { 056 mockObject = response.getMockObject(); 057 } 058 ret.put(response.getField(), mockObject); 059 } 060 return ret; 061 } 062 }; 063 064 065 static ApiMockBuilder mapBuilder = new ApiMockBuilder() { 066 @Override 067 public Object build(ClassType classType, Method method, int level) { 068 // ret 让给 retBuilder 去构建 069 if (Ret.class.isAssignableFrom(classType.getMainClass())) { 070 return null; 071 } 072 073 Map map = new HashMap(); 074 if (classType.isGeneric()) { 075 Object key = getMockObject(classType.getGenericTypes()[0], method, level); 076 if (key == null) { 077 key = "key"; 078 } 079 Object value = getMockObject(classType.getGenericTypes()[1], method, level); 080 map.put(key, value); 081 } 082 083 List<ApiResponse> responses = ApiDocUtil.getApiResponseInMethod(method); 084 for (ApiResponse response : responses) { 085 Object mockObject = null; 086 if (level == 0 && !response.isType(Map.class) && !response.isType(Ret.class)) { 087 mockObject = getMockObject(response.getClassType(), method, level); 088 } 089 if (mockObject == null || "".equals(mockObject)) { 090 mockObject = response.getMockObject(); 091 } 092 map.put(response.getField(), mockObject); 093 } 094 return map; 095 } 096 }; 097 098 099 static ApiMockBuilder listBuilder = new ApiMockBuilder() { 100 @Override 101 public Object build(ClassType classType, Method method, int level) { 102 List list = new ArrayList(); 103 if (classType.isGeneric()) { 104 Object value = getMockObject(classType.getGenericTypes()[0], method, level); 105 list.add(value); 106 Object value2 = getMockObject(classType.getGenericTypes()[0], method, level); 107 list.add(value2); 108 } 109 return list; 110 } 111 }; 112 113 114 static ApiMockBuilder pageBuilder = new ApiMockBuilder() { 115 @Override 116 public Object build(ClassType classType, Method method, int level) { 117 Page page = new Page(); 118 page.setPageNumber(1); 119 page.setPageSize(10); 120 page.setTotalPage(1); 121 page.setTotalRow(2); 122 123 List list = new ArrayList(); 124 list.add(getMockObject(classType.getGenericTypes()[0], method, level)); 125 list.add(getMockObject(classType.getGenericTypes()[0], method, level)); 126 127 page.setList(list); 128 return page; 129 } 130 }; 131 132 133 static ApiMockBuilder stringBuilder = new ApiMockBuilder() { 134 @Override 135 public Object build(ClassType classType, Method method, int level) { 136 return ""; 137 } 138 }; 139 140 141}