Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/main/java/com/spirit21/swagger/converter/Regex.java
Original file line number Diff line number Diff line change
Expand Up @@ -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?)*\\))";

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
public class Parameter {

private String name;
private String defaultValue;
private String type;
private String format;
private String location;
Expand Down Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,15 @@
*
*/
public class ParameterParser extends AbstractParser {
Map<String, String> descriptionMap;

private Map<String, String> descriptionMap;

private Map<String, String> defaultValueMap;

public ParameterParser(Log log, ClassLoader loader, List<Tag> tags, List<Definition> definitions) {
super(log, loader, tags, definitions);
this.defaultValueMap = new HashMap<>();

}

/**
Expand Down Expand Up @@ -76,8 +81,7 @@ public List<Parameter> findParametersInMethodHeader(String header, List<String>
}

/**
* 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
Expand All @@ -91,10 +95,31 @@ public List<Parameter> findParametersInMethodHeader(String header, List<String>
*/
private Parameter getParameter(String paramUnformatted, List<String> 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<String> defaultValue = new ArrayList<String>();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Namensgebung: Damit man direkt sehen kann, dass es mehrere Werte sind, lieber umbenennen zu defaultValues


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];
Expand Down Expand Up @@ -132,14 +157,32 @@ private Parameter getParameter(String paramUnformatted, List<String> 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++) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ich bevorzuge for-Schleifen mit der Doppelpunkt-Schreibweise
for (String value: defaultValue) { }

parameter.setDefaultValue(defaultValue.get(i));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aktuell ist es so, wenn es mehrere defaultValues gibt, wird nur das letzte genommen.
Kann es überhaupt mehrere geben?

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;
Expand Down Expand Up @@ -185,4 +228,75 @@ private Map<String, String> 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<String> defaultValue = new ArrayList<String>();
List<String> defaultValueKey = new ArrayList<String>();
List<String> defaultValueValue = new ArrayList<String>();

List<String> queryParam = new ArrayList<String>();
List<String> queryParamKey = new ArrayList<String>();
List<String> queryParamValue = new ArrayList<String>();

Matcher m = Pattern.compile(Regex.GETMETHODHEADERPARAMETER).matcher(paramUnformatted);
while (m.find() && isDefaultValue) {
List<String> paramUnformattedTest = new ArrayList<String>();
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<String> paramUnformattedTest = new ArrayList<String>();
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("]", ""));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*
*/
public class ParameterWriter extends AbstractWriter {

public ParameterWriter(Log log) {
super(log);
}
Expand Down Expand Up @@ -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);
Expand All @@ -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();
Expand Down