diff --git a/src/main/java/com/spirit21/swagger/converter/Regex.java b/src/main/java/com/spirit21/swagger/converter/Regex.java index cfbc708..e720f79 100644 --- a/src/main/java/com/spirit21/swagger/converter/Regex.java +++ b/src/main/java/com/spirit21/swagger/converter/Regex.java @@ -18,5 +18,7 @@ public class Regex { public final static String DESCRIPTION = "([^@{]|\\{@|\\{)*"; public final static String HTTP_METHOD = "(@GET|@POST|@PUT|@DELETE|@PUT)"; public final static String IGNORE_JAVAFILE = "@swagger:ignore_javafile"; + public final static String GETMETHODHEADERPARAMETER = "@([a-zA-Z0-9])+(\\((\\s?)*\"(\\s?)*(([a-zA-Z0-9]|_|-)*)(\\s?)*\"(\\s?)*\\))|(@([a-zA-Z0-9])+(\\((\\s?)*\"?(\\s?)*(([a-zA-Z0-9]|_|-)*)(\\s?)*\"?(\\s?)*\\)|))"; + public final static String GETMETHODHEADERPARAMETERINSIDE = "(?!(@([a-zA-Z0-9])+)\\((\\s?)*\"?(\\s?)*)[a-zA-Z0-9_]*(( [ a-zA-Z0-9_]*)|([a-zA-Z0-9_]+))(?=(\\s?)*\"?(\\s?)*\\))"; } diff --git a/src/main/java/com/spirit21/swagger/converter/models/Parameter.java b/src/main/java/com/spirit21/swagger/converter/models/Parameter.java index 84d98af..168d072 100644 --- a/src/main/java/com/spirit21/swagger/converter/models/Parameter.java +++ b/src/main/java/com/spirit21/swagger/converter/models/Parameter.java @@ -8,6 +8,7 @@ public class Parameter { private String name; + private String defaultValue; private String type; private String format; private String location; @@ -70,4 +71,12 @@ public Definition getDefinition() { public void setDefinition(Definition definition) { this.definition = definition; } + + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } } diff --git a/src/main/java/com/spirit21/swagger/converter/parsers/ParameterParser.java b/src/main/java/com/spirit21/swagger/converter/parsers/ParameterParser.java index 42c76db..fb3f9af 100644 --- a/src/main/java/com/spirit21/swagger/converter/parsers/ParameterParser.java +++ b/src/main/java/com/spirit21/swagger/converter/parsers/ParameterParser.java @@ -23,10 +23,15 @@ * */ public class ParameterParser extends AbstractParser { - Map descriptionMap; + + private Map descriptionMap; + + private Map defaultValueMap; public ParameterParser(Log log, ClassLoader loader, List tags, List definitions) { super(log, loader, tags, definitions); + this.defaultValueMap = new HashMap<>(); + } /** @@ -76,8 +81,7 @@ public List findParametersInMethodHeader(String header, List } /** - * Extracts a {@link Parameter} object from a parameter declaration in a - * method header + * Extracts a {@link Parameter} object from a parameter declaration in a method header * * @param paramUnformatted * parameter with white spaces and annotations @@ -91,10 +95,31 @@ public List findParametersInMethodHeader(String header, List */ private Parameter getParameter(String paramUnformatted, List imports, String fileName, String packageName) throws ParserException { + DataTypeFactory typeHandler = new DataTypeFactory(); DefinitionParser definitionParser = new DefinitionParser(log, loader, tags, definitions); Boolean isQueryParam = paramUnformatted.matches(".*@QueryParam\\(\"[^\"]+\"\\).*"); + Boolean isDefaultValue = paramUnformatted.matches(".*@DefaultValue\\(\"[^\"]+\"\\).*"); + String param = paramUnformatted.replaceAll("[\\s]*" + Regex.ANNOTATION + "[\\s]*", "").trim(); + + List defaultValue = new ArrayList(); + + Matcher m = Pattern.compile(Regex.GETMETHODHEADERPARAMETER).matcher(paramUnformatted); + while (m.find() && isDefaultValue) { + String paramUnformattedTest = m.group(); + + if (paramUnformattedTest.contains("@DefaultValue")) { + createMapFromParameters(paramUnformatted); + defaultValue.add(paramUnformattedTest); + + } + } + Matcher matchDef = Pattern.compile(Regex.GETMETHODHEADERPARAMETERINSIDE).matcher(defaultValue.toString()); + while (matchDef.find()) { + defaultValue.removeAll(defaultValue); + defaultValue.add(matchDef.group()); + } if (!param.isEmpty()) { String[] split = param.split(" "); String className = split[0]; @@ -132,14 +157,32 @@ private Parameter getParameter(String paramUnformatted, List imports, St parameter.setLocation("body"); parameter.setType(type); parameter.setRequired(true); + } else { parameter.setLocation("query"); parameter.setName(getNameFromQueryParamAnnotation(paramUnformatted)); parameter.setType(type); } - parameter.setFormat(format); - String description = descriptionMap.get(name); - parameter.setDescription(description); + if (isDefaultValue) { + parameter.setLocation("query"); + // parameter.setType(type); + for (int i = 0; i < defaultValue.size(); i++) { + parameter.setDefaultValue(defaultValue.get(i)); + parameter.setRequired(false); + } + parameter.setFormat(format); + String description = descriptionMap.get(name); + if (this.defaultValueMap.get(name) != null) { + description = description + + ". If parameter is not set, parameter will be set to the default Value \"" + + this.defaultValueMap.get(name) + "\""; + } + parameter.setDescription(description); + } else { + parameter.setFormat(format); + String description = descriptionMap.get(name); + parameter.setDescription(description); + } return parameter; } return null; @@ -185,4 +228,75 @@ private Map getParameterDescriptionMap(String javadoc) { } return map; } + + /** + * Takes the parameter String and extracts the values of the parameter and of the default value and maps them + * together + * + * @param paramUnformatted + * @return + */ + private void createMapFromParameters(String paramUnformatted) { + + Boolean isDefaultValue = paramUnformatted.matches(".*@DefaultValue\\(\"[^\"]+\"\\).*"); + Boolean isQueryParam = paramUnformatted.matches(".*@QueryParam\\(\"[^\"]+\"\\).*"); + + List defaultValue = new ArrayList(); + List defaultValueKey = new ArrayList(); + List defaultValueValue = new ArrayList(); + + List queryParam = new ArrayList(); + List queryParamKey = new ArrayList(); + List queryParamValue = new ArrayList(); + + Matcher m = Pattern.compile(Regex.GETMETHODHEADERPARAMETER).matcher(paramUnformatted); + while (m.find() && isDefaultValue) { + List paramUnformattedTest = new ArrayList(); + paramUnformattedTest.add(m.group()); + for (int i = 0; i < paramUnformattedTest.size(); i++) { + if (paramUnformattedTest.get(i).contains("@DefaultValue")) { + + defaultValue.add(paramUnformattedTest.get(i)); + } + } + } + + Matcher matchDefKey = Pattern.compile("@([a-zA-Z0-9])+").matcher(defaultValue.toString()); + while (matchDefKey.find()) { + defaultValueKey.removeAll(defaultValueKey); + defaultValueKey.add(matchDefKey.group()); + } + + Matcher matchDefValueValue = Pattern.compile(Regex.GETMETHODHEADERPARAMETERINSIDE) + .matcher(defaultValue.toString()); + while (matchDefValueValue.find()) { + defaultValueValue.removeAll(defaultValueValue); + defaultValueValue.add(matchDefValueValue.group()); + } + Matcher m5 = Pattern.compile(Regex.GETMETHODHEADERPARAMETER).matcher(paramUnformatted); + while (m5.find() && isQueryParam) { + List paramUnformattedTest = new ArrayList(); + paramUnformattedTest.add(m5.group()); + for (int i = 0; i < paramUnformattedTest.size(); i++) { + if (paramUnformattedTest.get(i).contains("@QueryParam")) { + queryParam.add(paramUnformattedTest.get(i)); + } + } + } + Matcher matchQueryParamKey = Pattern.compile("@([a-zA-Z0-9])+").matcher(queryParam.toString()); + while (matchQueryParamKey.find()) { + queryParamKey.removeAll(queryParamKey); + queryParamKey.add(matchQueryParamKey.group()); + } + + Matcher matchQueryParamValue = Pattern.compile(Regex.GETMETHODHEADERPARAMETERINSIDE) + .matcher(queryParam.toString()); + while (matchQueryParamValue.find()) { + queryParamValue.removeAll(queryParamValue); + queryParamValue.add(matchQueryParamValue.group()); + } + + this.defaultValueMap.put(queryParamValue.toString().replace("[", "").replace("]", ""), + defaultValueValue.toString().replace("[", "").replace("]", "")); + } } diff --git a/src/main/java/com/spirit21/swagger/converter/writers/ParameterWriter.java b/src/main/java/com/spirit21/swagger/converter/writers/ParameterWriter.java index dc8a541..9041d4e 100644 --- a/src/main/java/com/spirit21/swagger/converter/writers/ParameterWriter.java +++ b/src/main/java/com/spirit21/swagger/converter/writers/ParameterWriter.java @@ -15,6 +15,7 @@ * */ public class ParameterWriter extends AbstractWriter { + public ParameterWriter(Log log) { super(log); } @@ -49,6 +50,7 @@ private JSONObject mapParameter(Parameter parameter) { String location = parameter.getLocation(); String description = parameter.getDescription(); Boolean required = parameter.getRequired(); + String defaultValue = parameter.getDefaultValue(); Definition definition = parameter.getDefinition(); if (name != null) { obj.put("name", name); @@ -61,6 +63,11 @@ private JSONObject mapParameter(Parameter parameter) { } if (required != null) { obj.put("required", required); + + } + if (defaultValue != null) { + obj.put("default", defaultValue); + } if (definition != null && format == null) { JSONObject ref = new JSONObject();