diff --git a/src/main/java/com/ly/doc/helper/FormDataBuildHelper.java b/src/main/java/com/ly/doc/helper/FormDataBuildHelper.java index 44d5bda6..dd2e9f9c 100644 --- a/src/main/java/com/ly/doc/helper/FormDataBuildHelper.java +++ b/src/main/java/com/ly/doc/helper/FormDataBuildHelper.java @@ -174,7 +174,7 @@ else if (JavaClassValidateUtil.isPrimitive(subTypeName)) { formDataList.add(formData); } else if (javaClass.isEnum()) { - Object value = JavaClassUtil.getEnumValue(javaClass, builder, Boolean.TRUE); + Object value = JavaClassUtil.getEnumValue(javaClass, builder); if (tagsMap.containsKey(DocTags.MOCK) && StringUtil.isNotEmpty(tagsMap.get(DocTags.MOCK))) { value = ParamUtil.formatMockValue(tagsMap.get(DocTags.MOCK)); } diff --git a/src/main/java/com/ly/doc/helper/JsonBuildHelper.java b/src/main/java/com/ly/doc/helper/JsonBuildHelper.java index eb18b744..b2f503d8 100644 --- a/src/main/java/com/ly/doc/helper/JsonBuildHelper.java +++ b/src/main/java/com/ly/doc/helper/JsonBuildHelper.java @@ -60,8 +60,7 @@ public static String buildReturnJson(DocJavaMethod docJavaMethod, ProjectDocConf return "File download."; } if (method.getReturns().isEnum() && Objects.isNull(responseBodyAdvice)) { - return StringUtil - .removeQuotes(String.valueOf(JavaClassUtil.getEnumValue(method.getReturns(), builder, Boolean.FALSE))); + return StringUtil.removeQuotes(String.valueOf(JavaClassUtil.getEnumValue(method.getReturns(), builder))); } if (method.getReturns().isPrimitive() && Objects.isNull(responseBodyAdvice)) { String typeName = method.getReturnType().getCanonicalName(); @@ -158,8 +157,7 @@ public static String buildJson(String typeName, String genericCanonicalName, boo // Handle enum types if (javaClass.isEnum()) { - return StringUtil - .removeQuotes(String.valueOf(JavaClassUtil.getEnumValue(javaClass, projectBuilder, Boolean.FALSE))); + return StringUtil.removeQuotes(String.valueOf(JavaClassUtil.getEnumValue(javaClass, projectBuilder))); } StringBuilder result = new StringBuilder(); @@ -389,8 +387,7 @@ else if (gicName.length() == 1) { JavaClass arraySubClass = projectBuilder.getJavaProjectBuilder() .getClassByName(gicName); if (arraySubClass.isEnum()) { - Object value = JavaClassUtil.getEnumValue(arraySubClass, projectBuilder, - Boolean.FALSE); + Object value = JavaClassUtil.getEnumValue(arraySubClass, projectBuilder); result.append("[").append(value).append("],"); continue; } @@ -463,7 +460,7 @@ else if (typeName.equals(fieldGicName)) { // if has Annotation @JsonSerialize And using // ToStringSerializer && isResp else if (toStringSerializer && isResp) { - Object value = JavaClassUtil.getEnumValue(javaClass, projectBuilder, Boolean.FALSE); + Object value = JavaClassUtil.getEnumValue(javaClass, projectBuilder); result.append(value).append(","); } // if has @JsonFormat @@ -471,7 +468,7 @@ else if (StringUtil.isNotEmpty(fieldJsonFormatValue)) { result.append(fieldJsonFormatValue).append(","); } else { - Object value = JavaClassUtil.getEnumValue(javaClass, projectBuilder, Boolean.FALSE); + Object value = JavaClassUtil.getEnumValue(javaClass, projectBuilder); result.append(value).append(","); } } diff --git a/src/main/java/com/ly/doc/helper/ParamsBuildHelper.java b/src/main/java/com/ly/doc/helper/ParamsBuildHelper.java index db354ead..4eebfc32 100644 --- a/src/main/java/com/ly/doc/helper/ParamsBuildHelper.java +++ b/src/main/java/com/ly/doc/helper/ParamsBuildHelper.java @@ -502,12 +502,13 @@ else if (JavaClassValidateUtil.isCollection(subTypeName) if (arraySubClass.isEnum()) { comment.append(handleEnumComment(arraySubClass, projectBuilder)); param.setDesc(comment.toString()); + param.setType(ParamTypeConstants.PARAM_TYPE_ARRAY); + EnumInfoAndValues enumInfoAndValue = JavaClassUtil.getEnumInfoAndValue(arraySubClass, - projectBuilder, Boolean.FALSE); + projectBuilder); if (Objects.nonNull(enumInfoAndValue)) { param.setValue("[\"" + enumInfoAndValue.getValue() + "\"]") - .setEnumInfoAndValues(enumInfoAndValue) - .setType(enumInfoAndValue.getType()); + .setEnumInfoAndValues(enumInfoAndValue); } } else if (gName.length() == 1) { diff --git a/src/main/java/com/ly/doc/model/ApiConfig.java b/src/main/java/com/ly/doc/model/ApiConfig.java index 8c0a4771..1aba6e1e 100644 --- a/src/main/java/com/ly/doc/model/ApiConfig.java +++ b/src/main/java/com/ly/doc/model/ApiConfig.java @@ -457,6 +457,13 @@ public class ApiConfig { */ private boolean addDefaultHttpStatuses; + /** + * Show enum name for example + * + * @since 3.1.0 + */ + private boolean enumNameExample = Boolean.FALSE; + public static ApiConfig getInstance() { return instance; } @@ -1138,4 +1145,12 @@ public void setAddDefaultHttpStatuses(boolean addDefaultHttpStatuses) { this.addDefaultHttpStatuses = addDefaultHttpStatuses; } + public boolean isEnumNameExample() { + return enumNameExample; + } + + public void setEnumNameExample(boolean enumNameExample) { + this.enumNameExample = enumNameExample; + } + } diff --git a/src/main/java/com/ly/doc/model/torna/Item.java b/src/main/java/com/ly/doc/model/torna/Item.java index e4675b38..008f8ca1 100644 --- a/src/main/java/com/ly/doc/model/torna/Item.java +++ b/src/main/java/com/ly/doc/model/torna/Item.java @@ -58,13 +58,6 @@ public class Item implements Serializable { */ private String description; - /** - * valueObject; A temporary variable used to store the object form of the value. This - * field will not be serialized or deserialized. - */ - @Expose(serialize = false, deserialize = false) - private Object valueObject; - public Item() { } @@ -73,7 +66,6 @@ public Item(String name, String type, String value, String description) { this.type = type; this.value = value; this.description = description; - this.valueObject = name; } public String getName() { @@ -108,12 +100,4 @@ public void setDescription(String description) { this.description = description; } - public Object getValueObject() { - return valueObject; - } - - public void setValueObject(Object valueObject) { - this.valueObject = valueObject; - } - } diff --git a/src/main/java/com/ly/doc/template/IRestDocTemplate.java b/src/main/java/com/ly/doc/template/IRestDocTemplate.java index 67e4051d..d9e827b2 100644 --- a/src/main/java/com/ly/doc/template/IRestDocTemplate.java +++ b/src/main/java/com/ly/doc/template/IRestDocTemplate.java @@ -1167,8 +1167,7 @@ else if (frameworkAnnotations.getRequestPartAnnotation() .setQueryParam(isQueryParam) .setId(paramList.size() + 1) .setType(ParamTypeConstants.PARAM_TYPE_ARRAY); - EnumInfoAndValues enumInfoAndValue = JavaClassUtil.getEnumInfoAndValue(gicJavaClass, builder, - Boolean.TRUE); + EnumInfoAndValues enumInfoAndValue = JavaClassUtil.getEnumInfoAndValue(gicJavaClass, builder); if (Objects.nonNull(enumInfoAndValue)) { param.setValue(StringUtil.removeDoubleQuotes(String.valueOf(enumInfoAndValue.getValue()))) .setEnumInfoAndValues(enumInfoAndValue); @@ -1276,8 +1275,7 @@ else if (javaClass.isEnum()) { .setRequired(required) .setVersion(DocGlobalConstants.DEFAULT_VERSION); - EnumInfoAndValues enumInfoAndValue = JavaClassUtil.getEnumInfoAndValue(javaClass, builder, - isPathVariable || isQueryParam); + EnumInfoAndValues enumInfoAndValue = JavaClassUtil.getEnumInfoAndValue(javaClass, builder); if (Objects.nonNull(enumInfoAndValue)) { param.setValue(StringUtil.removeDoubleQuotes(String.valueOf(enumInfoAndValue.getValue()))) .setEnumInfoAndValues(enumInfoAndValue) @@ -1474,7 +1472,7 @@ else if (frameworkAnnotations.getPathVariableAnnotation() .getAnnotationName() .contains(annotationName)) { if (javaClass.isEnum()) { - Object value = JavaClassUtil.getEnumValue(javaClass, configBuilder, Boolean.TRUE); + Object value = JavaClassUtil.getEnumValue(javaClass, configBuilder); mockValue = StringUtil.removeQuotes(String.valueOf(value)); } if (pathParamsMap.containsKey(paramName)) { @@ -1488,7 +1486,7 @@ else if (frameworkAnnotations.getRequestParamAnnotation() .getAnnotationName() .contains(annotationName)) { if (javaClass.isEnum()) { - Object value = JavaClassUtil.getEnumValue(javaClass, configBuilder, Boolean.TRUE); + Object value = JavaClassUtil.getEnumValue(javaClass, configBuilder); mockValue = StringUtil.removeQuotes(String.valueOf(value)); } if (queryParamsMap.containsKey(paramName)) { @@ -1565,7 +1563,7 @@ else if (JavaClassValidateUtil.isArray(fullyQualifiedName) String value; JavaClass javaClass1 = configBuilder.getClassByName(gicName); if (Objects.nonNull(javaClass1) && javaClass1.isEnum()) { - value = String.valueOf(JavaClassUtil.getEnumValue(javaClass1, configBuilder, Boolean.TRUE)); + value = String.valueOf(JavaClassUtil.getEnumValue(javaClass1, configBuilder)); } else { value = RandomUtil.randomValueByType(gicName); @@ -1583,7 +1581,7 @@ else if (JavaClassValidateUtil.isArray(fullyQualifiedName) // enum type else if (javaClass.isEnum()) { // do nothing - Object value = JavaClassUtil.getEnumValue(javaClass, configBuilder, Boolean.TRUE); + Object value = JavaClassUtil.getEnumValue(javaClass, configBuilder); String strVal = StringUtil.removeQuotes(String.valueOf(value)); FormData formData = new FormData(); formData.setKey(paramName); diff --git a/src/main/java/com/ly/doc/template/JAXRSDocBuildTemplate.java b/src/main/java/com/ly/doc/template/JAXRSDocBuildTemplate.java index 4d28c1cf..53772168 100644 --- a/src/main/java/com/ly/doc/template/JAXRSDocBuildTemplate.java +++ b/src/main/java/com/ly/doc/template/JAXRSDocBuildTemplate.java @@ -450,7 +450,7 @@ private ApiMethodReqParam requestParams(final DocJavaMethod docJavaMethod, Proje } JavaClass gicJavaClass = builder.getJavaProjectBuilder().getClassByName(gicName); if (gicJavaClass.isEnum()) { - Object value = JavaClassUtil.getEnumValue(gicJavaClass, builder, Boolean.TRUE); + Object value = JavaClassUtil.getEnumValue(gicJavaClass, builder); ApiParam param = ApiParam.of() .setField(paramName) .setDesc(comment + ",[array of enum]") @@ -560,7 +560,7 @@ else if (JavaClassValidateUtil.isFile(typeName)) { // param is enum else if (javaClass.isEnum()) { String o = JavaClassUtil.getEnumParams(javaClass); - Object value = JavaClassUtil.getEnumValue(javaClass, builder, true); + Object value = JavaClassUtil.getEnumValue(javaClass, builder); ApiParam param = ApiParam.of() .setField(paramName) .setId(paramList.size() + 1) @@ -664,7 +664,7 @@ private ApiRequestExample buildReqJson(DocJavaMethod javaMethod, ApiMethodDoc ap || JakartaJaxrsAnnotations.JAXB_REST_PATH_FULLY.equals(annotationName) || JAXRSAnnotations.JAX_PATH_PARAM_FULLY.equals(annotationName)) { if (javaClass.isEnum()) { - Object value = JavaClassUtil.getEnumValue(javaClass, configBuilder, Boolean.TRUE); + Object value = JavaClassUtil.getEnumValue(javaClass, configBuilder); mockValue = StringUtil.removeQuotes(String.valueOf(value)); } pathParamsMap.put(paramName, mockValue); @@ -715,7 +715,7 @@ else if (JavaClassValidateUtil.isArray(fullyQualifiedName) } else if (javaClass.isEnum()) { // do nothing - Object value = JavaClassUtil.getEnumValue(javaClass, configBuilder, Boolean.TRUE); + Object value = JavaClassUtil.getEnumValue(javaClass, configBuilder); String strVal = StringUtil.removeQuotes(String.valueOf(value)); FormData formData = new FormData(); formData.setDescription(comment); diff --git a/src/main/java/com/ly/doc/utils/JavaClassUtil.java b/src/main/java/com/ly/doc/utils/JavaClassUtil.java index 5b3f3dd8..c5f6c6cb 100644 --- a/src/main/java/com/ly/doc/utils/JavaClassUtil.java +++ b/src/main/java/com/ly/doc/utils/JavaClassUtil.java @@ -30,7 +30,6 @@ import com.ly.doc.constants.DocValidatorAnnotationEnum; import com.ly.doc.constants.JSRAnnotationConstants; import com.ly.doc.constants.JavaTypeConstants; -import com.ly.doc.constants.ParamTypeConstants; import com.ly.doc.model.ApiConfig; import com.ly.doc.model.ApiDataDictionary; import com.ly.doc.model.DocJavaField; @@ -352,19 +351,17 @@ public static String getSameSignatureMethodCommonFromInterface(JavaClass cls, Ja * @param javaClass The JavaClass object representing the enum class * @param builder A ProjectDocConfigBuilder object used to retrieve API configuration * and the class loader - * @param formDataEnum A boolean indicating whether it is a form data enum, which - * affects the logic for retrieving enum values * @return Object The enum value, whose type depends on the specific enum definition * @throws RuntimeException If the enum constants do not exist */ - public static Object getEnumValue(JavaClass javaClass, ProjectDocConfigBuilder builder, boolean formDataEnum) { - List javaFields = javaClass.getEnumConstants(); - if (Objects.isNull(javaFields)) { - throw new RuntimeException(javaClass.getName() + " enum not existed"); + public static Object getEnumValue(JavaClass javaClass, ProjectDocConfigBuilder builder) { + EnumInfoAndValues enumInfoAndValue = getEnumInfoAndValue(javaClass, builder); + if (enumInfoAndValue == null) { + return null; } // Default handling for enum values - return getEnumValue(javaClass, builder, formDataEnum, javaFields.get(0)); + return enumInfoAndValue.getValue(); } /** @@ -376,17 +373,15 @@ public static Object getEnumValue(JavaClass javaClass, ProjectDocConfigBuilder b * @param javaClass The JavaClass object representing the enum class * @param builder A ProjectDocConfigBuilder object used to retrieve API configuration * and the class loader - * @param formDataEnum A boolean indicating whether it is a form data enum, which - * affects the logic for retrieving enum values * @param enumConstant The JavaField object representing the enum constant * @return Object The enum value, whose type depends on the specific enum definition * @throws RuntimeException If the enum constants do not exist */ - public static Object getEnumValue(JavaClass javaClass, ProjectDocConfigBuilder builder, boolean formDataEnum, + public static Object getDefaultEnumValue(JavaClass javaClass, ProjectDocConfigBuilder builder, JavaField enumConstant) { // Try getting value from method with JsonValue annotation String methodName = findMethodWithJsonValue(javaClass); - if (Objects.nonNull(methodName) && !formDataEnum) { + if (Objects.nonNull(methodName)) { Class enumClass = loadEnumClass(javaClass, builder); if (Objects.nonNull(enumClass)) { return EnumUtil.getFieldValueByMethod(enumClass, methodName, enumConstant.getName()); @@ -399,13 +394,13 @@ public static Object getEnumValue(JavaClass javaClass, ProjectDocConfigBuilder b if (fieldWithJsonValue.isPresent()) { Class enumClass = loadEnumClass(javaClass, builder); if (Objects.nonNull(enumClass)) { - return EnumUtil.getFieldValue(enumClass, fieldWithJsonValue.get().getName()); + return EnumUtil.getFieldValue(enumClass, fieldWithJsonValue.get().getName(), enumConstant.getName()); } return null; } // Default handling for enum values - return processDefaultEnumFields(javaClass.getEnumConstants(), formDataEnum, enumConstant); + return processDefaultEnumFields(enumConstant); } /** @@ -474,32 +469,23 @@ private static Optional findFieldWithJsonValue(JavaClass javaClass) { /** * Handles the default logic for processing enum fields. - * @param javaFields The list of JavaField objects representing enum fields - * @param formDataEnum A boolean indicating if the enum is a form data enum - * @param enumConstant The JavaField object representing the enum constant + * @param javaField The JavaField object representing the enum constant * @return The value based on the enum field processing logic */ - private static Object processDefaultEnumFields(List javaFields, boolean formDataEnum, - JavaField enumConstant) { - Object value = null; - int index = 0; - for (JavaField javaField : javaFields) { - if (!javaField.equals(enumConstant)) { - continue; - } - String simpleName = javaField.getType().getSimpleName(); - StringBuilder valueBuilder = new StringBuilder(); - valueBuilder.append("\"").append(javaField.getName()).append("\""); - if (formDataEnum) { - value = valueBuilder.toString(); - return value; - } - if (!JavaClassValidateUtil.isPrimitive(simpleName) && index < 1) { - value = valueBuilder.toString(); - } - index++; + private static Object processDefaultEnumFields(JavaField javaField) { + String initializationExpression = javaField.getInitializationExpression(); + + if (StringUtils.isBlank(initializationExpression)) { + return javaField.getName(); } - return value; + + String[] result = initializationExpression.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)", -1); + if (result.length == 0) { + return javaField.getName(); + } + + String str = result[0]; + return StringUtils.isNumeric(str) ? Integer.parseInt(str) : str; } /** @@ -589,23 +575,17 @@ public static JavaClass getSeeEnum(JavaField javaField, ProjectDocConfigBuilder * get enum info by java class * @param javaClass the java class info * @param builder builder - * @param formDataEnum A boolean indicating if the enum is a form data enum * @return EnumInfo * @author chen qi * @since 1.0.0 */ - public static EnumInfo getEnumInfo(JavaClass javaClass, ProjectDocConfigBuilder builder, boolean formDataEnum) { + public static EnumInfo getEnumInfo(JavaClass javaClass, ProjectDocConfigBuilder builder) { if (Objects.isNull(javaClass) || !javaClass.isEnum()) { return null; } if (Objects.nonNull(javaClass.getTagByName(DocTags.IGNORE))) { return null; } - // todo support the field described by @see - - ApiConfig apiConfig = builder.getApiConfig(); - ClassLoader classLoader = apiConfig.getClassLoader(); - ApiDataDictionary dataDictionary = apiConfig.getDataDictionary(javaClass.getBinaryName()); EnumInfo enumInfo = new EnumInfo(); String comment = javaClass.getComment(); @@ -613,56 +593,18 @@ public static EnumInfo getEnumInfo(JavaClass javaClass, ProjectDocConfigBuilder enumInfo.setName(comment); enumInfo.setDescription(DocUtil.getEscapeAndCleanComment( Optional.ofNullable(apiNoteTag).map(DocletTag::getValue).orElse(StringUtil.EMPTY))); - List enumConstants = javaClass.getEnumConstants(); + ApiConfig apiConfig = builder.getApiConfig(); + ApiDataDictionary dataDictionary = apiConfig.getDataDictionary(javaClass.getBinaryName()); + // Default Enum Processing (values, types, descriptions) + enumInfo.setItems(getEnumItemList(javaClass, dataDictionary, builder)); // value can use invoke method to get value, desc too if (Objects.nonNull(dataDictionary)) { - Class enumClass = dataDictionary.getEnumClass(); - if (enumClass.isInterface()) { - try { - enumClass = classLoader.loadClass(javaClass.getBinaryName()); - } - catch (ClassNotFoundException e) { - return enumInfo; - } - } - List enumInformation = EnumUtil.getEnumInformation(enumClass, dataDictionary.getCodeField(), - dataDictionary.getDescField()); - List itemList = enumInformation.stream() - .map(i -> new Item(i.getName(), i.getType(), i.getValue(), i.getDesc())) - .collect(Collectors.toList()); - enumInfo.setItems(itemList); if (StringUtils.isNotEmpty(dataDictionary.getTitle())) { enumInfo.setName(dataDictionary.getTitle()); } return enumInfo; } - - // Default Enum Processing (values, types, descriptions) - List collect = enumConstants.stream().map(cons -> { - Item item = new Item(); - String name = cons.getName(); - String enumComment = cons.getComment(); - item.setName(name); - - item.setValue(StringUtil.removeDoubleQuotes(name)); - item.setType("string"); - if (!formDataEnum) { - Object enumValue = getEnumValue(javaClass, builder, false, cons); - String stringValue = StringUtil.removeQuotes(String.valueOf(enumValue)); - if (!StringUtils.equals(name, stringValue)) { - item.setValueObject(enumValue); - item.setValue(stringValue); - if (Objects.nonNull(enumValue)) { - item.setType(DocClassUtil.processTypeNameForParams(enumValue.getClass().getCanonicalName())); - } - } - } - item.setDescription(enumComment); - return item; - }).collect(Collectors.toList()); - - enumInfo.setItems(collect); return enumInfo; } @@ -1457,40 +1399,105 @@ public static List getAnnotationValues(JavaAnnotation javaAnnot * @param javaClass The Java class object representing the enum. * @param builder The project documentation configuration builder, used to access * project-specific documentation settings. - * @param formDataEnum A boolean indicating whether the enum is used in a form; true - * if so, false otherwise. * @return An EnumInfoAndValues object containing both the enum information and its * values. */ - public static EnumInfoAndValues getEnumInfoAndValue(JavaClass javaClass, ProjectDocConfigBuilder builder, - boolean formDataEnum) { + public static EnumInfoAndValues getEnumInfoAndValue(JavaClass javaClass, ProjectDocConfigBuilder builder) { // Step 1: Retrieve EnumInfo (general enum info like name, description, etc.) - EnumInfo enumInfo = getEnumInfo(javaClass, builder, formDataEnum); + EnumInfo enumInfo = getEnumInfo(javaClass, builder); // Return if the enumInfo is null if (enumInfo == null) { return null; } - // Step 2: Get the enum values based on whether it's formDataEnum or not - List enumValues = enumInfo.getItems().stream().map(Item::getValue).collect(Collectors.toList()); + return generateEnumInfoAndValues(enumInfo, builder); + } - Item item = enumInfo.getItems().get(0); - // Step 3: Create the EnumInfoAndValues result - Object valueObject = item.getValueObject(); - EnumInfoAndValues result = EnumInfoAndValues.builder() - .setEnumValues(enumValues) - // Using the same method to get default value - .setValue(Objects.isNull(valueObject) ? item.getValue() : valueObject); - - result.setType(ParamTypeConstants.PARAM_TYPE_ENUM); - if (!formDataEnum) { - if (Objects.nonNull(valueObject)) { - result.setType(DocClassUtil.processTypeNameForParams(valueObject.getClass().getCanonicalName())); - enumInfo.setName(enumInfo.getName() + " To " + result.getType()); + /** + * Gets the enum item list, either through the data dictionary or @JsonValue or the + * enumerated field defaults to the first parameter + * @param enumClass the enum class info + * @param dataDictionary data dictionary + * @param builder builder + * @return List + * @author JasonKung22 + */ + private static List getEnumItemList(JavaClass enumClass, ApiDataDictionary dataDictionary, + ProjectDocConfigBuilder builder) { + ApiConfig apiConfig = builder.getApiConfig(); + if (Objects.nonNull(dataDictionary)) { + Class dataDictionaryEnumClass = dataDictionary.getEnumClass(); + if (dataDictionaryEnumClass.isInterface()) { + try { + ClassLoader classLoader = apiConfig.getClassLoader(); + dataDictionaryEnumClass = classLoader.loadClass(enumClass.getBinaryName()); + } + catch (ClassNotFoundException e) { + return null; + } } + List enumInformation = EnumUtil.getEnumInformation(dataDictionaryEnumClass, + dataDictionary.getCodeField(), dataDictionary.getDescField()); + return enumInformation.stream() + .map(i -> new Item(i.getName(), i.getType(), i.getValue(), i.getDesc())) + .collect(Collectors.toList()); } - return result.setEnumInfo(enumInfo); + + List enumConstants = enumClass.getEnumConstants(); + return enumConstants.stream().map(cons -> { + Item item = new Item(); + String name = cons.getName(); + String enumComment = cons.getComment(); + item.setName(name); + item.setValue(name); + item.setType("string"); + item.setDescription(enumComment); + + Object defaultEnumValue = getDefaultEnumValue(enumClass, builder, cons); + if (defaultEnumValue == null) { + item.setValue(StringUtil.removeDoubleQuotes(name)); + return item; + } + String stringValue = StringUtil.removeQuotes(String.valueOf(defaultEnumValue)); + + if (!StringUtils.equals(name, stringValue)) { + item.setValue(stringValue); + item.setType(DocClassUtil.processTypeNameForParams(defaultEnumValue.getClass().getCanonicalName())); + } + return item; + }).collect(Collectors.toList()); + } + + /** + * Generate EnumInfoAndValues, and determine the enumNameExample configuration in + * apiConfig + * @param enumInfo the enum info + * @param builder builder + * @return List + * @author JasonKung22 + */ + private static EnumInfoAndValues generateEnumInfoAndValues(EnumInfo enumInfo, ProjectDocConfigBuilder builder) { + ApiConfig apiConfig = builder.getApiConfig(); + List items = enumInfo.getItems(); + String enumValue; + List enumValues; + String type; + if (apiConfig.isEnumNameExample()) { + enumValues = items.stream().map(Item::getName).collect(Collectors.toList()); + enumValue = enumValues.get(0); + type = "string"; + } + else { + enumValues = items.stream().map(Item::getValue).collect(Collectors.toList()); + enumValue = enumValues.get(0); + type = items.get(0).getType(); + } + return EnumInfoAndValues.builder() + .setEnumInfo(enumInfo) + .setEnumValues(enumValues) + .setType(type) + .setValue(enumValue); } } diff --git a/src/main/java/com/ly/doc/utils/ParamUtil.java b/src/main/java/com/ly/doc/utils/ParamUtil.java index 387b793d..cfcfd5e2 100644 --- a/src/main/java/com/ly/doc/utils/ParamUtil.java +++ b/src/main/java/com/ly/doc/utils/ParamUtil.java @@ -91,7 +91,7 @@ public static JavaClass handleSeeEnum(ApiParam param, JavaField javaField, Proje javaField.getType().getGenericFullyQualifiedName())) { param.setType(ParamTypeConstants.PARAM_TYPE_ENUM); } - EnumInfoAndValues enumInfoAndValue = JavaClassUtil.getEnumInfoAndValue(seeEnum, builder, !jsonRequest); + EnumInfoAndValues enumInfoAndValue = JavaClassUtil.getEnumInfoAndValue(seeEnum, builder); if (Objects.nonNull(enumInfoAndValue)) { param.setValue(StringUtil.removeDoubleQuotes(String.valueOf(enumInfoAndValue.getValue()))) .setEnumInfoAndValues(enumInfoAndValue) diff --git a/src/main/resources/default.json b/src/main/resources/default.json index 7b01fd16..ee7835cf 100644 --- a/src/main/resources/default.json +++ b/src/main/resources/default.json @@ -11,6 +11,7 @@ "skipTransientField": true, "requestExample": true, "responseExample": true, + "enumNameExample": false, "revisionLogs": [ { "version": "1.0",