Renamed and refactored some methods in the document builder.

This commit is contained in:
Robert Winkler
2016-03-08 09:54:30 +01:00
parent 916d2515b0
commit 1c1eb106d6
5 changed files with 202 additions and 196 deletions

View File

@@ -85,41 +85,21 @@ public class DefinitionsDocumentBuilder extends MarkupDocumentBuilder {
/**
* Builds the definitions MarkupDocument.
*
* @return the built MarkupDocument
* @return the definitions MarkupDocument
*/
@Override
public MarkupDocument build() {
definitions(globalContext.getSwagger().getDefinitions());
return new MarkupDocument(markupDocBuilder);
}
private void addDefinitionsTitle(String title) {
this.markupDocBuilder.sectionTitleWithAnchorLevel1(title, DEFINITIONS_ANCHOR);
}
/**
* Builds the Swagger definitions.
*
* @param definitions the Swagger definitions
*/
private void definitions(Map<String, Model> definitions) {
Map<String, Model> definitions = globalContext.getSwagger().getDefinitions();
if (MapUtils.isNotEmpty(definitions)) {
applyDefinitionExtension(new DefinitionsDocumentExtension.Context(DefinitionsDocumentExtension.Position.DOC_BEFORE, this.markupDocBuilder));
addDefinitionsTitle(DEFINITIONS);
applyDefinitionExtension(new DefinitionsDocumentExtension.Context(DefinitionsDocumentExtension.Position.DOC_BEGIN, this.markupDocBuilder));
Set<String> definitionNames;
if (config.getDefinitionOrdering() == null)
definitionNames = new LinkedHashSet<>();
else
definitionNames = new TreeSet<>(config.getDefinitionOrdering());
definitionNames.addAll(definitions.keySet());
applyDefinitionsDocumentExtension(new DefinitionsDocumentExtension.Context(DefinitionsDocumentExtension.Position.DOC_BEFORE, this.markupDocBuilder));
buildDefinitionsTitle(DEFINITIONS);
applyDefinitionsDocumentExtension(new DefinitionsDocumentExtension.Context(DefinitionsDocumentExtension.Position.DOC_BEGIN, this.markupDocBuilder));
Set<String> definitionNames = getDefinitionNames(definitions);
for (String definitionName : definitionNames) {
Model model = definitions.get(definitionName);
if (isNotBlank(definitionName)) {
if (checkThatDefinitionIsNotInIgnoreList(definitionName)) {
processDefinition(definitions, definitionName, model);
buildDefinition(definitions, definitionName, model);
if (logger.isInfoEnabled()) {
logger.info("Definition processed: {}", definitionName);
}
@@ -130,10 +110,24 @@ public class DefinitionsDocumentBuilder extends MarkupDocumentBuilder {
}
}
}
applyDefinitionExtension(new DefinitionsDocumentExtension.Context(DefinitionsDocumentExtension.Position.DOC_END, this.markupDocBuilder));
applyDefinitionExtension(new DefinitionsDocumentExtension.Context(DefinitionsDocumentExtension.Position.DOC_AFTER, this.markupDocBuilder));
applyDefinitionsDocumentExtension(new DefinitionsDocumentExtension.Context(DefinitionsDocumentExtension.Position.DOC_END, this.markupDocBuilder));
applyDefinitionsDocumentExtension(new DefinitionsDocumentExtension.Context(DefinitionsDocumentExtension.Position.DOC_AFTER, this.markupDocBuilder));
}
return new MarkupDocument(markupDocBuilder);
}
private Set<String> getDefinitionNames(Map<String, Model> definitions) {
Set<String> definitionNames;
if (config.getDefinitionOrdering() == null)
definitionNames = new LinkedHashSet<>();
else
definitionNames = new TreeSet<>(config.getDefinitionOrdering());
definitionNames.addAll(definitions.keySet());
return definitionNames;
}
private void buildDefinitionsTitle(String title) {
this.markupDocBuilder.sectionTitleWithAnchorLevel1(title, DEFINITIONS_ANCHOR);
}
/**
@@ -141,7 +135,7 @@ public class DefinitionsDocumentBuilder extends MarkupDocumentBuilder {
*
* @param context context
*/
private void applyDefinitionExtension(DefinitionsDocumentExtension.Context context) {
private void applyDefinitionsDocumentExtension(DefinitionsDocumentExtension.Context context) {
for (DefinitionsDocumentExtension extension : globalContext.getExtensionRegistry().getExtensions(DefinitionsDocumentExtension.class)) {
extension.apply(context);
}
@@ -167,7 +161,7 @@ public class DefinitionsDocumentBuilder extends MarkupDocumentBuilder {
* @param definitionName definition name to process
* @param model definition model to process
*/
private void processDefinition(Map<String, Model> definitions, String definitionName, Model model) {
private void buildDefinition(Map<String, Model> definitions, String definitionName, Model model) {
if (config.isSeparatedDefinitionsEnabled()) {
MarkupDocBuilder defDocBuilder = this.markupDocBuilder.copy();
@@ -209,11 +203,11 @@ public class DefinitionsDocumentBuilder extends MarkupDocumentBuilder {
* @param docBuilder the docbuilder do use for output
*/
private void definition(Map<String, Model> definitions, String definitionName, Model model, MarkupDocBuilder docBuilder) {
applyDefinitionExtension(new DefinitionsDocumentExtension.Context(DefinitionsDocumentExtension.Position.DEF_BEGIN, docBuilder, definitionName));
applyDefinitionsDocumentExtension(new DefinitionsDocumentExtension.Context(DefinitionsDocumentExtension.Position.DEF_BEGIN, docBuilder, definitionName));
addDefinitionTitle(definitionName, null, docBuilder);
descriptionSection(definitionName, model, docBuilder);
inlineDefinitions(propertiesSection(definitions, definitionName, model, docBuilder), definitionName, config.getInlineSchemaDepthLevel(), docBuilder);
applyDefinitionExtension(new DefinitionsDocumentExtension.Context(DefinitionsDocumentExtension.Position.DEF_END, docBuilder, definitionName));
applyDefinitionsDocumentExtension(new DefinitionsDocumentExtension.Context(DefinitionsDocumentExtension.Position.DEF_END, docBuilder, definitionName));
}
/**

View File

@@ -96,8 +96,6 @@ public abstract class MarkupDocumentBuilder {
*/
public abstract MarkupDocument build() throws IOException;
/**
* Build a generic property table for any ObjectType
*

View File

@@ -69,39 +69,51 @@ public class OverviewDocumentBuilder extends MarkupDocumentBuilder {
/**
* Builds the overview MarkupDocument.
*
* @return the built MarkupDocument
* @return the overview MarkupDocument
*/
@Override
public MarkupDocument build(){
overview();
Swagger swagger = globalContext.getSwagger();
Info info = swagger.getInfo();
buildDocumentTitle(info.getTitle());
applyOverviewDocumentExtension(new OverviewDocumentExtension.Context(OverviewDocumentExtension.Position.DOC_BEFORE, this.markupDocBuilder));
buildOverviewTitle(OVERVIEW);
applyOverviewDocumentExtension(new OverviewDocumentExtension.Context(OverviewDocumentExtension.Position.DOC_BEGIN, this.markupDocBuilder));
buildDescription(info.getDescription());
buildVersionInfoSection(info.getVersion());
buildContactInfoSection(info.getContact());
buildLicenseInfoSection(info.getLicense(), info.getTermsOfService());
buildUriSchemeSection(swagger);
buildTagsSection(swagger.getTags());
buildConsumesSection(swagger.getConsumes());
buildProducesSection(swagger.getProduces());
applyOverviewDocumentExtension(new OverviewDocumentExtension.Context(OverviewDocumentExtension.Position.DOC_END, this.markupDocBuilder));
applyOverviewDocumentExtension(new OverviewDocumentExtension.Context(OverviewDocumentExtension.Position.DOC_AFTER, this.markupDocBuilder));
return new MarkupDocument(markupDocBuilder);
}
private void addOverviewTitle(String title) {
private void buildDocumentTitle(String title) {
this.markupDocBuilder.documentTitle(title);
}
private void buildOverviewTitle(String title) {
this.markupDocBuilder.sectionTitleWithAnchorLevel1(title, OVERVIEW_ANCHOR);
}
/**
* Builds the document header of the swagger model
*/
private void overview() {
Swagger swagger = globalContext.getSwagger();
Info info = swagger.getInfo();
this.markupDocBuilder.documentTitle(info.getTitle());
applyOverviewExtension(new OverviewDocumentExtension.Context(OverviewDocumentExtension.Position.DOC_BEFORE, this.markupDocBuilder));
addOverviewTitle(OVERVIEW);
applyOverviewExtension(new OverviewDocumentExtension.Context(OverviewDocumentExtension.Position.DOC_BEGIN, this.markupDocBuilder));
if(isNotBlank(info.getDescription())){
this.markupDocBuilder.textLine(info.getDescription());
}
if(isNotBlank(info.getVersion())){
private void buildVersionInfoSection(String version) {
if(isNotBlank(version)){
this.markupDocBuilder.sectionTitleLevel2(CURRENT_VERSION);
this.markupDocBuilder.textLine(VERSION + " : " + info.getVersion());
this.markupDocBuilder.textLine(VERSION + " : " + version);
}
Contact contact = info.getContact();
}
private void buildDescription(String description) {
if(isNotBlank(description)){
this.markupDocBuilder.textLine(description);
}
}
private void buildContactInfoSection(Contact contact) {
if(contact != null){
this.markupDocBuilder.sectionTitleLevel2(CONTACT_INFORMATION);
if(isNotBlank(contact.getName())){
@@ -111,8 +123,9 @@ public class OverviewDocumentBuilder extends MarkupDocumentBuilder {
this.markupDocBuilder.textLine(CONTACT_EMAIL + " : " + contact.getEmail());
}
}
}
License license = info.getLicense();
private void buildLicenseInfoSection(License license, String termOfService) {
if(license != null && (isNotBlank(license.getName()) || isNotBlank(license.getUrl()))) {
this.markupDocBuilder.sectionTitleLevel2(LICENSE_INFORMATION);
if (isNotBlank(license.getName())) {
@@ -122,10 +135,12 @@ public class OverviewDocumentBuilder extends MarkupDocumentBuilder {
this.markupDocBuilder.textLine(LICENSE_URL + " : " + license.getUrl());
}
}
if(isNotBlank(info.getTermsOfService())){
this.markupDocBuilder.textLine(TERMS_OF_SERVICE + " : " + info.getTermsOfService());
if(isNotBlank(termOfService)){
this.markupDocBuilder.textLine(TERMS_OF_SERVICE + " : " + termOfService);
}
}
private void buildUriSchemeSection(Swagger swagger) {
if(isNotBlank(swagger.getHost()) || isNotBlank(swagger.getBasePath()) || isNotEmpty(swagger.getSchemes())) {
this.markupDocBuilder.sectionTitleLevel2(URI_SCHEME);
if (isNotBlank(swagger.getHost())) {
@@ -142,35 +157,37 @@ public class OverviewDocumentBuilder extends MarkupDocumentBuilder {
this.markupDocBuilder.textLine(SCHEMES + " : " + join(schemes, ", "));
}
}
}
if(isNotEmpty(swagger.getTags())){
private void buildTagsSection(List<Tag> tags) {
if(isNotEmpty(tags)){
this.markupDocBuilder.sectionTitleLevel2(TAGS);
List<String> tags = new ArrayList<>();
for(Tag tag : swagger.getTags()){
List<String> tagsList = new ArrayList<>();
for(Tag tag : tags){
String name = tag.getName();
String description = tag.getDescription();
if(isNoneBlank(description)){
tags.add(name + " : " + description);
tagsList.add(name + " : " + description);
}else{
tags.add(name);
tagsList.add(name);
}
}
this.markupDocBuilder.unorderedList(tags);
this.markupDocBuilder.unorderedList(tagsList);
}
}
if(isNotEmpty(swagger.getConsumes())){
private void buildConsumesSection(List<String> consumes) {
if (isNotEmpty(consumes)) {
this.markupDocBuilder.sectionTitleLevel2(CONSUMES);
this.markupDocBuilder.unorderedList(swagger.getConsumes());
this.markupDocBuilder.unorderedList(consumes);
}
}
if(isNotEmpty(swagger.getProduces())){
private void buildProducesSection(List<String> consumes) {
if (isNotEmpty(consumes)) {
this.markupDocBuilder.sectionTitleLevel2(PRODUCES);
this.markupDocBuilder.unorderedList(swagger.getProduces());
this.markupDocBuilder.unorderedList(consumes);
}
applyOverviewExtension(new OverviewDocumentExtension.Context(OverviewDocumentExtension.Position.DOC_END, this.markupDocBuilder));
applyOverviewExtension(new OverviewDocumentExtension.Context(OverviewDocumentExtension.Position.DOC_AFTER, this.markupDocBuilder));
}
/**
@@ -178,7 +195,7 @@ public class OverviewDocumentBuilder extends MarkupDocumentBuilder {
*
* @param context context
*/
private void applyOverviewExtension(OverviewDocumentExtension.Context context) {
private void applyOverviewDocumentExtension(OverviewDocumentExtension.Context context) {
for (OverviewDocumentExtension extension : globalContext.getExtensionRegistry().getExtensions(OverviewDocumentExtension.class)) {
extension.apply(context);
}

View File

@@ -137,80 +137,77 @@ public class PathsDocumentBuilder extends MarkupDocumentBuilder {
/**
* Builds the paths MarkupDocument.
*
* @return the built MarkupDocument
* @return the paths MarkupDocument
*/
@Override
public MarkupDocument build() {
operations();
Map<String, Path> paths = globalContext.getSwagger().getPaths();
if (MapUtils.isNotEmpty(paths)) {
Set<PathOperation> pathOperations = getPathOperations(paths);
if (CollectionUtils.isNotEmpty(pathOperations)) {
applyPathsDocumentExtension(new PathsDocumentExtension.Context(PathsDocumentExtension.Position.DOC_BEFORE, this.markupDocBuilder));
if (config.getOperationsGroupedBy() == GroupBy.AS_IS) {
buildPathsTitle(PATHS);
} else {
buildPathsTitle(RESOURCES);
}
applyPathsDocumentExtension(new PathsDocumentExtension.Context(PathsDocumentExtension.Position.DOC_BEGIN, this.markupDocBuilder));
if (config.getOperationsGroupedBy() == GroupBy.AS_IS) {
if (config.getOperationOrdering() != null) {
Set<PathOperation> sortedOperations = new TreeSet<>(config.getOperationOrdering());
sortedOperations.addAll(pathOperations);
pathOperations = sortedOperations;
}
for (PathOperation operation : pathOperations) {
buildOperation(operation);
}
} else {
Multimap<String, PathOperation> operationsGroupedByTag = TagUtils.groupOperationsByTag(pathOperations, config.getTagOrdering(), config.getOperationOrdering());
Map<String, Tag> tagsMap = convertTagsListToMap(globalContext.getSwagger().getTags());
for (String tagName : operationsGroupedByTag.keySet()) {
this.markupDocBuilder.sectionTitleLevel2(WordUtils.capitalize(tagName));
Optional<String> tagDescription = getTagDescription(tagsMap, tagName);
if (tagDescription.isPresent()) {
this.markupDocBuilder.paragraph(tagDescription.get());
}
for (PathOperation operation : operationsGroupedByTag.get(tagName)) {
buildOperation(operation);
}
}
}
}
applyPathsDocumentExtension(new PathsDocumentExtension.Context(PathsDocumentExtension.Position.DOC_END, this.markupDocBuilder));
applyPathsDocumentExtension(new PathsDocumentExtension.Context(PathsDocumentExtension.Position.DOC_AFTER, this.markupDocBuilder));
}
return new MarkupDocument(markupDocBuilder);
}
private void addPathsTitle(String title) {
this.markupDocBuilder.sectionTitleWithAnchorLevel1(title, PATHS_ANCHOR);
/**
* Converts the Swagger paths into a list PathOperations.
*
* @param paths the Swagger paths
* @return the path operations
*/
private Set<PathOperation> getPathOperations(Map<String, Path> paths) {
Set<PathOperation> pathOperations = new LinkedHashSet<>();
for (Map.Entry<String, Path> path : paths.entrySet()) {
Map<HttpMethod, Operation> operations = path.getValue().getOperationMap(); // TODO AS_IS does not work because of https://github.com/swagger-api/swagger-core/issues/1696
if (MapUtils.isNotEmpty(operations)) {
for (Map.Entry<HttpMethod, Operation> operation : operations.entrySet()) {
pathOperations.add(new PathOperation(operation.getKey(), path.getKey(), operation.getValue()));
}
}
}
return pathOperations;
}
/**
* Builds all operations of the Swagger model. Either grouped as-is or by tags.
*/
private void operations() {
Set<PathOperation> allOperations = new LinkedHashSet<>();
Map<String, Path> paths = globalContext.getSwagger().getPaths();
if (MapUtils.isNotEmpty(paths)) {
for (Map.Entry<String, Path> path : paths.entrySet()) {
Map<HttpMethod, Operation> operations = path.getValue().getOperationMap(); // TODO AS_IS does not work because of https://github.com/swagger-api/swagger-core/issues/1696
if (operations != null) {
for (Map.Entry<HttpMethod, Operation> operation : operations.entrySet()) {
allOperations.add(new PathOperation(operation.getKey(), path.getKey(), operation.getValue()));
}
}
}
}
if (CollectionUtils.isNotEmpty(allOperations)) {
applyOperationExtension(new PathsDocumentExtension.Context(PathsDocumentExtension.Position.DOC_BEFORE, this.markupDocBuilder));
if (config.getOperationsGroupedBy() == GroupBy.AS_IS) {
addPathsTitle(PATHS);
applyOperationExtension(new PathsDocumentExtension.Context(PathsDocumentExtension.Position.DOC_BEGIN, this.markupDocBuilder));
} else {
addPathsTitle(RESOURCES);
applyOperationExtension(new PathsDocumentExtension.Context(PathsDocumentExtension.Position.DOC_BEGIN, this.markupDocBuilder));
}
if (config.getOperationsGroupedBy() == GroupBy.AS_IS) {
if (config.getOperationOrdering() != null) {
Set<PathOperation> sortedOperations = new TreeSet<>(config.getOperationOrdering());
sortedOperations.addAll(allOperations);
allOperations = sortedOperations;
}
for (PathOperation operation : allOperations) {
processOperation(operation);
}
} else {
Multimap<String, PathOperation> operationsGroupedByTag = TagUtils.groupOperationsByTag(allOperations, config.getTagOrdering(), config.getOperationOrdering());
Map<String, Tag> tagsMap = convertTagsListToMap(globalContext.getSwagger().getTags());
for (String tagName : operationsGroupedByTag.keySet()) {
this.markupDocBuilder.sectionTitleLevel2(WordUtils.capitalize(tagName));
Optional<String> tagDescription = getTagDescription(tagsMap, tagName);
if (tagDescription.isPresent()) {
this.markupDocBuilder.paragraph(tagDescription.get());
}
for (PathOperation operation : operationsGroupedByTag.get(tagName)) {
processOperation(operation);
}
}
}
applyOperationExtension(new PathsDocumentExtension.Context(PathsDocumentExtension.Position.DOC_END, this.markupDocBuilder));
applyOperationExtension(new PathsDocumentExtension.Context(PathsDocumentExtension.Position.DOC_AFTER, this.markupDocBuilder));
}
private void buildPathsTitle(String title) {
this.markupDocBuilder.sectionTitleWithAnchorLevel1(title, PATHS_ANCHOR);
}
/**
@@ -218,7 +215,7 @@ public class PathsDocumentBuilder extends MarkupDocumentBuilder {
*
* @param context context
*/
private void applyOperationExtension(PathsDocumentExtension.Context context) {
private void applyPathsDocumentExtension(PathsDocumentExtension.Context context) {
for (PathsDocumentExtension extension : globalContext.getExtensionRegistry().getExtensions(PathsDocumentExtension.class)) {
extension.apply(context);
}
@@ -242,10 +239,10 @@ public class PathsDocumentBuilder extends MarkupDocumentBuilder {
*
* @param operation operation
*/
private void processOperation(PathOperation operation) {
private void buildOperation(PathOperation operation) {
if (config.isSeparatedOperationsEnabled()) {
MarkupDocBuilder pathDocBuilder = this.markupDocBuilder.copy();
operation(operation, pathDocBuilder);
buildOperation(operation, pathDocBuilder);
java.nio.file.Path operationFile = outputPath.resolve(resolveOperationDocument(operation));
try {
@@ -259,10 +256,10 @@ public class PathsDocumentBuilder extends MarkupDocumentBuilder {
logger.info("Separate operation file produced: {}", operationFile);
}
operationRef(operation, this.markupDocBuilder);
buildOperationRef(operation, this.markupDocBuilder);
} else {
operation(operation, this.markupDocBuilder);
buildOperation(operation, this.markupDocBuilder);
}
if (logger.isInfoEnabled()) {
@@ -287,9 +284,9 @@ public class PathsDocumentBuilder extends MarkupDocumentBuilder {
* @param operation the Swagger Operation
* @param docBuilder the docbuilder do use for output
*/
private void operation(PathOperation operation, MarkupDocBuilder docBuilder) {
private void buildOperation(PathOperation operation, MarkupDocBuilder docBuilder) {
if (operation != null) {
applyOperationExtension(new PathsDocumentExtension.Context(PathsDocumentExtension.Position.OP_BEGIN, docBuilder, operation));
applyPathsDocumentExtension(new PathsDocumentExtension.Context(PathsDocumentExtension.Position.OP_BEGIN, docBuilder, operation));
deprecatedSection(operation, docBuilder);
operationTitle(operation, docBuilder);
descriptionSection(operation, docBuilder);
@@ -301,7 +298,7 @@ public class PathsDocumentBuilder extends MarkupDocumentBuilder {
tagsSection(operation, docBuilder);
securitySchemeSection(operation, docBuilder);
examplesSection(operation, docBuilder);
applyOperationExtension(new PathsDocumentExtension.Context(PathsDocumentExtension.Position.OP_END, docBuilder, operation));
applyPathsDocumentExtension(new PathsDocumentExtension.Context(PathsDocumentExtension.Position.OP_END, docBuilder, operation));
}
}
@@ -311,7 +308,7 @@ public class PathsDocumentBuilder extends MarkupDocumentBuilder {
* @param operation the Swagger Operation
* @param docBuilder the docbuilder do use for output
*/
private void operationRef(PathOperation operation, MarkupDocBuilder docBuilder) {
private void buildOperationRef(PathOperation operation, MarkupDocBuilder docBuilder) {
String document = null;
if (!config.isInterDocumentCrossReferencesEnabled() || outputPath == null)
document = null;

View File

@@ -59,62 +59,62 @@ public class SecurityDocumentBuilder extends MarkupDocumentBuilder {
/**
* Builds the security MarkupDocument.
*
* @return the built MarkupDocument
* @return the security MarkupDocument
*/
@Override
public MarkupDocument build(){
security();
Map<String, SecuritySchemeDefinition> definitions = globalContext.getSwagger().getSecurityDefinitions();
if (MapUtils.isNotEmpty(definitions)) {
applySecurityDocumentExtension(new SecurityDocumentExtension.Context(SecurityDocumentExtension.Position.DOC_BEFORE, this.markupDocBuilder));
buildSecurityTitle(SECURITY);
applySecurityDocumentExtension(new SecurityDocumentExtension.Context(SecurityDocumentExtension.Position.DOC_BEGIN, this.markupDocBuilder));
buildSecuritySchemeDefinitionsSection(definitions);
applySecurityDocumentExtension(new SecurityDocumentExtension.Context(SecurityDocumentExtension.Position.DOC_END, this.markupDocBuilder));
applySecurityDocumentExtension(new SecurityDocumentExtension.Context(SecurityDocumentExtension.Position.DOC_AFTER, this.markupDocBuilder));
}
return new MarkupDocument(markupDocBuilder);
}
private void addSecurityTitle(String title) {
private void buildSecurityTitle(String title) {
this.markupDocBuilder.sectionTitleWithAnchorLevel1(title, SECURITY_ANCHOR);
}
/**
* Builds all security definition of the Swagger model.
*/
private void security() {
Map<String, SecuritySchemeDefinition> definitions = globalContext.getSwagger().getSecurityDefinitions();
if (MapUtils.isNotEmpty(definitions)) {
applyOverviewExtension(new SecurityDocumentExtension.Context(SecurityDocumentExtension.Position.DOC_BEFORE, this.markupDocBuilder));
addSecurityTitle(SECURITY);
applyOverviewExtension(new SecurityDocumentExtension.Context(SecurityDocumentExtension.Position.DOC_BEGIN, this.markupDocBuilder));
for (Map.Entry<String, SecuritySchemeDefinition> entry : definitions.entrySet()) {
markupDocBuilder.sectionTitleLevel2(entry.getKey());
SecuritySchemeDefinition securityScheme = entry.getValue();
String type = securityScheme.getType();
markupDocBuilder.textLine(TYPE + " : " + type);
if (securityScheme instanceof ApiKeyAuthDefinition) {
markupDocBuilder.textLine(NAME + " : " + ((ApiKeyAuthDefinition) securityScheme).getName());
markupDocBuilder.textLine(IN + " : " + ((ApiKeyAuthDefinition) securityScheme).getIn());
} else if (securityScheme instanceof OAuth2Definition) {
OAuth2Definition oauth2Scheme = (OAuth2Definition) securityScheme;
String flow = oauth2Scheme.getFlow();
markupDocBuilder.textLine(FLOW + " : " + flow);
if (isNotBlank(oauth2Scheme.getAuthorizationUrl())) {
markupDocBuilder.textLine(AUTHORIZATION_URL + " : " + oauth2Scheme.getAuthorizationUrl());
}
if (isNotBlank(oauth2Scheme.getTokenUrl())) {
markupDocBuilder.textLine(TOKEN_URL + " : " + oauth2Scheme.getTokenUrl());
}
List<List<String>> cells = new ArrayList<>();
List<MarkupTableColumn> cols = Arrays.asList(new MarkupTableColumn(NAME_COLUMN, 1),
new MarkupTableColumn(DESCRIPTION_COLUMN, 6));
for (Map.Entry<String, String> scope : oauth2Scheme.getScopes().entrySet()) {
List<String> content = Arrays.asList(scope.getKey(), scope.getValue());
cells.add(content);
}
markupDocBuilder.tableWithColumnSpecs(cols, cells);
}
private void buildSecuritySchemeDefinitionsSection(Map<String, SecuritySchemeDefinition> definitions) {
for (Map.Entry<String, SecuritySchemeDefinition> entry : definitions.entrySet()) {
markupDocBuilder.sectionTitleLevel2(entry.getKey());
SecuritySchemeDefinition securityScheme = entry.getValue();
buildSecurityScheme(securityScheme);
if (logger.isInfoEnabled()) {
logger.info("SecuritySchemeDefinition processed: {}", securityScheme.getType());
}
}
}
applyOverviewExtension(new SecurityDocumentExtension.Context(SecurityDocumentExtension.Position.DOC_END, this.markupDocBuilder));
applyOverviewExtension(new SecurityDocumentExtension.Context(SecurityDocumentExtension.Position.DOC_AFTER, this.markupDocBuilder));
private void buildSecurityScheme(SecuritySchemeDefinition securityScheme) {
String type = securityScheme.getType();
markupDocBuilder.textLine(TYPE + " : " + type);
if (securityScheme instanceof ApiKeyAuthDefinition) {
markupDocBuilder.textLine(NAME + " : " + ((ApiKeyAuthDefinition) securityScheme).getName());
markupDocBuilder.textLine(IN + " : " + ((ApiKeyAuthDefinition) securityScheme).getIn());
} else if (securityScheme instanceof OAuth2Definition) {
OAuth2Definition oauth2Scheme = (OAuth2Definition) securityScheme;
String flow = oauth2Scheme.getFlow();
markupDocBuilder.textLine(FLOW + " : " + flow);
if (isNotBlank(oauth2Scheme.getAuthorizationUrl())) {
markupDocBuilder.textLine(AUTHORIZATION_URL + " : " + oauth2Scheme.getAuthorizationUrl());
}
if (isNotBlank(oauth2Scheme.getTokenUrl())) {
markupDocBuilder.textLine(TOKEN_URL + " : " + oauth2Scheme.getTokenUrl());
}
List<List<String>> cells = new ArrayList<>();
List<MarkupTableColumn> cols = Arrays.asList(new MarkupTableColumn(NAME_COLUMN, 1),
new MarkupTableColumn(DESCRIPTION_COLUMN, 6));
for (Map.Entry<String, String> scope : oauth2Scheme.getScopes().entrySet()) {
List<String> content = Arrays.asList(scope.getKey(), scope.getValue());
cells.add(content);
}
markupDocBuilder.tableWithColumnSpecs(cols, cells);
}
}
@@ -123,7 +123,7 @@ public class SecurityDocumentBuilder extends MarkupDocumentBuilder {
*
* @param context context
*/
private void applyOverviewExtension(SecurityDocumentExtension.Context context) {
private void applySecurityDocumentExtension(SecurityDocumentExtension.Context context) {
for (SecurityDocumentExtension extension : globalContext.getExtensionRegistry().getExtensions(SecurityDocumentExtension.class)) {
extension.apply(context);
}