com.github.kongchen.swagger.docgen.mavenplugin.SpringMavenDocumentSource 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 all versions of swagger-maven-plugin
A maven build plugin which helps you generate API document during build phase
package com.github.kongchen.swagger.docgen.mavenplugin;
import com.github.kongchen.swagger.docgen.AbstractDocumentSource;
import com.github.kongchen.swagger.docgen.GenerateException;
import com.github.kongchen.swagger.docgen.reader.ClassSwaggerReader;
import com.github.kongchen.swagger.docgen.reader.SpringMvcApiReader;
import com.google.common.collect.Sets;
import io.swagger.annotations.Api;
import io.swagger.config.FilterFactory;
import io.swagger.core.filter.SpecFilter;
import io.swagger.core.filter.SwaggerSpecFilter;
import io.swagger.models.auth.SecuritySchemeDefinition;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.logging.Log;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
/**
* @author tedleman
* 01/21/15
* @author chekong
* 05/13/2013
*/
public class SpringMavenDocumentSource extends AbstractDocumentSource {
private final SpecFilter specFilter = new SpecFilter();
public SpringMavenDocumentSource(ApiSource apiSource, Log log, String encoding) throws MojoFailureException {
super(log, apiSource);
if(encoding !=null) {
this.encoding = encoding;
}
}
@Override
public void loadDocuments() throws GenerateException {
if (apiSource.getSwaggerInternalFilter() != null) {
try {
LOG.info("Setting filter configuration: " + apiSource.getSwaggerInternalFilter());
FilterFactory.setFilter((SwaggerSpecFilter) Class.forName(apiSource.getSwaggerInternalFilter()).newInstance());
} catch (Exception e) {
throw new GenerateException("Cannot load: " + apiSource.getSwaggerInternalFilter(), e);
}
}
Sets.SetView> validClasses = getValidClasses();
swagger = resolveApiReader().read(validClasses);
if(apiSource.getSecurityDefinitions() != null) {
for (SecurityDefinition sd : apiSource.getSecurityDefinitions()) {
for (Map.Entry entry : sd.getDefinitions().entrySet()) {
swagger.addSecurityDefinition(entry.getKey(), entry.getValue());
}
}
// sort security defs to make output consistent
Map defs = swagger.getSecurityDefinitions();
Map sortedDefs = new TreeMap();
sortedDefs.putAll(defs);
swagger.setSecurityDefinitions(sortedDefs);
}
if (FilterFactory.getFilter() != null) {
swagger = new SpecFilter().filter(swagger, FilterFactory.getFilter(),
new HashMap>(), new HashMap(),
new HashMap>());
}
}
Sets.SetView> getValidClasses()
{
return Sets.union(
apiSource.getValidClasses(Api.class),
apiSource.getValidClasses(RestController.class));
}
private ClassSwaggerReader resolveApiReader() throws GenerateException {
String customReaderClassName = apiSource.getSwaggerApiReader();
if (customReaderClassName == null) {
SpringMvcApiReader reader = new SpringMvcApiReader(swagger, LOG);
reader.setTypesToSkip(this.typesToSkip);
return reader;
} else {
return getCustomApiReader(customReaderClassName);
}
}
}