com.github.kongchen.swagger.docgen.Utils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of swagger-maven-plugin Show documentation
Show all versions of swagger-maven-plugin Show documentation
A maven build plugin which helps you generate API document during build phase
The newest version!
package com.github.kongchen.swagger.docgen;
import com.github.jknack.handlebars.io.ClassPathTemplateLoader;
import com.github.jknack.handlebars.io.FileTemplateLoader;
import io.swagger.models.Model;
import io.swagger.models.Operation;
import io.swagger.models.Path;
import io.swagger.models.Response;
import io.swagger.models.Swagger;
import io.swagger.models.Tag;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
/**
* @author chekong on 14-11-25.
*/
public class Utils {
private static final java.lang.String CLASSPATH = "classpath:";
public static TemplatePath parseTemplateUrl(String templatePath) throws GenerateException {
if (templatePath == null) {
return null;
}
TemplatePath tp;
if (templatePath.startsWith(CLASSPATH)) {
String resPath = templatePath.substring(CLASSPATH.length());
tp = extractTemplateObject(resPath);
tp.loader = new ClassPathTemplateLoader(tp.prefix, tp.suffix);
} else {
tp = extractTemplateObject(templatePath);
tp.loader = new FileTemplateLoader(tp.prefix, tp.suffix);
}
return tp;
}
private static TemplatePath extractTemplateObject(String resPath) throws GenerateException {
TemplatePath tp = new TemplatePath();
String prefix = "";
String suffix = "";
String name = "";
int prefixidx = resPath.lastIndexOf("/");
if (prefixidx != -1) {
prefix = resPath.substring(0, prefixidx + 1);
}
int extidx = resPath.lastIndexOf(".");
if (extidx != -1) {
suffix = resPath.substring(extidx);
if (extidx < prefix.length()) {
throw new GenerateException("You have an interesting template path:" + resPath);
}
name = resPath.substring(prefix.length(), extidx);
}
tp.name = name;
tp.prefix = prefix;
tp.suffix = suffix;
return tp;
}
public static void sortSwagger(Swagger swagger) throws GenerateException {
if (swagger == null || swagger.getPaths() == null) {
return;
}
TreeMap sortedMap = new TreeMap();
if (swagger.getPaths() == null) {
return;
}
sortedMap.putAll(swagger.getPaths());
swagger.paths(sortedMap);
for (Path path : swagger.getPaths().values()) {
String methods[] = {"Get", "Delete", "Post", "Put", "Options", "Patch"};
for (String m : methods) {
sortResponses(path, m);
}
}
//reorder definitions
if (swagger.getDefinitions() != null) {
TreeMap defs = new TreeMap();
defs.putAll(swagger.getDefinitions());
swagger.setDefinitions(defs);
}
// order the tags
if (swagger.getTags() != null) {
Collections.sort(swagger.getTags(), new Comparator() {
public int compare(final Tag a, final Tag b) {
return a.toString().toLowerCase().compareTo(b.toString().toLowerCase());
}
});
}
}
private static void sortResponses(Path path, String method) throws GenerateException {
try {
Method m = Path.class.getDeclaredMethod("get" + method);
Operation op = (Operation) m.invoke(path);
if (op == null) {
return;
}
Map responses = op.getResponses();
TreeMap res = new TreeMap();
res.putAll(responses);
op.setResponses(res);
} catch (NoSuchMethodException e) {
throw new GenerateException(e);
} catch (InvocationTargetException e) {
throw new GenerateException(e);
} catch (IllegalAccessException e) {
throw new GenerateException(e);
}
}
}