Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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,11 @@ 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);
super(log, loader, tags, definitions);
this.defaultValueMap = new HashMap<>();

}

/**
Expand Down Expand Up @@ -90,60 +95,98 @@ public List<Parameter> findParametersInMethodHeader(String header, List<String>
* Error while the parsing process
*/
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\\(\"[^\"]+\"\\).*");
String param = paramUnformatted.replaceAll("[\\s]*" + Regex.ANNOTATION + "[\\s]*", "").trim();
if (!param.isEmpty()) {
String[] split = param.split(" ");
String className = split[0];
String name = split[1];
Parameter parameter = new Parameter();
parameter.setName(name);
DataType typeObject;
if (className.matches("[a-zA-Z0-9]+<[a-zA-Z0-9]+>")) {
String[] genericSplit = className.split("<");
String type = genericSplit[0];
String genericType = genericSplit[1].substring(0, genericSplit[1].length() - 1);
if (type.equals("List") || type.equals("Set") || type.equals("Collection")) {
typeObject = typeHandler.getDataType(genericType);
typeObject.setFormat("array");
} else {
throw new ParserException(
"DataType " + type + " not supported using generics! Use List, Collection or Set.");
}
} else {
typeObject = typeHandler.getDataType(className);
}
String type = typeObject.getType();
String format = typeObject.getFormat();
if (type.startsWith("#") && !isQueryParam) {
// reference -> body parameter
parameter.setLocation("body");
String title = definitionParser.createDefinitionIfNotExists(type, imports, fileName, packageName);
if (title != null) {
Definition definition = definitionParser.getDefinitionByClassName(title);
parameter.setDefinition(definition);
}
// body parameters are always required
parameter.setRequired(true);
} else if (!isQueryParam) {
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);
return parameter;
}
return null;
}
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>();

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")) {
createMapFromParameters(paramUnformatted);
defaultValue.add(paramUnformattedTest.get(i));
}
}
}
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];
String name = split[1];
Parameter parameter = new Parameter();
parameter.setName(name);
DataType typeObject;
if (className.matches("[a-zA-Z0-9]+<[a-zA-Z0-9]+>")) {
String[] genericSplit = className.split("<");
String type = genericSplit[0];
String genericType = genericSplit[1].substring(0, genericSplit[1].length() - 1);
if (type.equals("List") || type.equals("Set") || type.equals("Collection")) {
typeObject = typeHandler.getDataType(genericType);
typeObject.setFormat("array");
} else {
throw new ParserException(
"DataType " + type + " not supported using generics! Use List, Collection or Set.");
}
} else {
typeObject = typeHandler.getDataType(className);
}
String type = typeObject.getType();
String format = typeObject.getFormat();
if (type.startsWith("#") && !isQueryParam) {
// reference -> body parameter
parameter.setLocation("body");
String title = definitionParser.createDefinitionIfNotExists(type, imports, fileName, packageName);
if (title != null) {
Definition definition = definitionParser.getDefinitionByClassName(title);
parameter.setDefinition(definition);
}
// body parameters are always required
parameter.setRequired(true);
} else if (!isQueryParam) {
parameter.setLocation("body");
parameter.setType(type);
parameter.setRequired(true);

} else {
parameter.setLocation("query");
parameter.setName(getNameFromQueryParamAnnotation(paramUnformatted));
parameter.setType(type);
}
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;
}

/**
* Gets the query parameter name
Expand Down Expand Up @@ -185,4 +228,73 @@ 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 Map<String, String> 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());
}

defaultValueMap.put(queryParamValue.toString().replace("[","").replace("]", ""), defaultValueValue.toString().replace("[","").replace("]", ""));
return defaultValueMap;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,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 +62,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