diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java b/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java index 018a670f..ec4e69ec 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java +++ b/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java @@ -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 definitions) { + Map 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 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 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 getDefinitionNames(Map definitions) { + Set 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 definitions, String definitionName, Model model) { + private void buildDefinition(Map 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 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)); } /** diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/MarkupDocumentBuilder.java b/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/MarkupDocumentBuilder.java index 420f1ad1..6f4eee1f 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/MarkupDocumentBuilder.java +++ b/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/MarkupDocumentBuilder.java @@ -96,8 +96,6 @@ public abstract class MarkupDocumentBuilder { */ public abstract MarkupDocument build() throws IOException; - - /** * Build a generic property table for any ObjectType * diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java b/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java index 4a7eaec7..33118e94 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java +++ b/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java @@ -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 tags) { + if(isNotEmpty(tags)){ this.markupDocBuilder.sectionTitleLevel2(TAGS); - List tags = new ArrayList<>(); - for(Tag tag : swagger.getTags()){ + List 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 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 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); } diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/PathsDocumentBuilder.java b/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/PathsDocumentBuilder.java index 2449c998..316f4779 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/PathsDocumentBuilder.java +++ b/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/PathsDocumentBuilder.java @@ -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 paths = globalContext.getSwagger().getPaths(); + if (MapUtils.isNotEmpty(paths)) { + Set 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 sortedOperations = new TreeSet<>(config.getOperationOrdering()); + sortedOperations.addAll(pathOperations); + pathOperations = sortedOperations; + } + + for (PathOperation operation : pathOperations) { + buildOperation(operation); + } + } else { + Multimap operationsGroupedByTag = TagUtils.groupOperationsByTag(pathOperations, config.getTagOrdering(), config.getOperationOrdering()); + + Map tagsMap = convertTagsListToMap(globalContext.getSwagger().getTags()); + for (String tagName : operationsGroupedByTag.keySet()) { + this.markupDocBuilder.sectionTitleLevel2(WordUtils.capitalize(tagName)); + + Optional 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 getPathOperations(Map paths) { + Set pathOperations = new LinkedHashSet<>(); + for (Map.Entry path : paths.entrySet()) { + Map 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 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 allOperations = new LinkedHashSet<>(); - Map paths = globalContext.getSwagger().getPaths(); - - if (MapUtils.isNotEmpty(paths)) { - for (Map.Entry path : paths.entrySet()) { - Map 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 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 sortedOperations = new TreeSet<>(config.getOperationOrdering()); - sortedOperations.addAll(allOperations); - allOperations = sortedOperations; - } - - for (PathOperation operation : allOperations) { - processOperation(operation); - } - } else { - Multimap operationsGroupedByTag = TagUtils.groupOperationsByTag(allOperations, config.getTagOrdering(), config.getOperationOrdering()); - - Map tagsMap = convertTagsListToMap(globalContext.getSwagger().getTags()); - for (String tagName : operationsGroupedByTag.keySet()) { - this.markupDocBuilder.sectionTitleLevel2(WordUtils.capitalize(tagName)); - - Optional 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; diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java b/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java index 7fd184f4..6cb093e0 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java +++ b/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java @@ -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 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 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 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> cells = new ArrayList<>(); - List cols = Arrays.asList(new MarkupTableColumn(NAME_COLUMN, 1), - new MarkupTableColumn(DESCRIPTION_COLUMN, 6)); - for (Map.Entry scope : oauth2Scheme.getScopes().entrySet()) { - List content = Arrays.asList(scope.getKey(), scope.getValue()); - cells.add(content); - } - markupDocBuilder.tableWithColumnSpecs(cols, cells); - - } + private void buildSecuritySchemeDefinitionsSection(Map definitions) { + for (Map.Entry 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> cells = new ArrayList<>(); + List cols = Arrays.asList(new MarkupTableColumn(NAME_COLUMN, 1), + new MarkupTableColumn(DESCRIPTION_COLUMN, 6)); + for (Map.Entry scope : oauth2Scheme.getScopes().entrySet()) { + List 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); }