From a85b695c80cfd67379477df4707cbb4cf9c676c8 Mon Sep 17 00:00:00 2001 From: Robert Winkler Date: Mon, 14 Mar 2016 15:00:17 +0100 Subject: [PATCH 01/17] Changed artifact group from group = 'io.github.robwin' to 'io.github.swagger2markup'. Refactored gradle scripts. --- build.gradle | 107 ++-------------------------- gradle/coverage.gradle | 13 ++++ gradle/documentation.gradle | 34 +++++++++ gradle/publishing.gradle | 134 +++++++++++++++++++++++++----------- 4 files changed, 144 insertions(+), 144 deletions(-) create mode 100644 gradle/coverage.gradle create mode 100644 gradle/documentation.gradle diff --git a/build.gradle b/build.gradle index 95ef8503..d04c3fb8 100644 --- a/build.gradle +++ b/build.gradle @@ -14,17 +14,12 @@ buildscript { } description = 'swagger2markup Build' version = '1.0.0-SNAPSHOT' -group = 'io.github.robwin' +group = 'io.github.swagger2markup' apply plugin: 'java' -apply plugin: 'maven-publish' -apply plugin: 'org.asciidoctor.convert' -apply plugin: 'jacoco' -apply plugin: 'com.github.kt3k.coveralls' -apply plugin: 'com.jfrog.bintray' -apply plugin: "com.jfrog.artifactory" apply from: 'gradle/publishing.gradle' -apply plugin: 'org.ajoberstar.github-pages' +apply from: 'gradle/coverage.gradle' +apply from: 'gradle/documentation.gradle' tasks.withType(JavaCompile) { sourceCompatibility = "1.7" @@ -50,102 +45,10 @@ dependencies { testCompile 'org.asciidoctor:asciidoctorj:1.5.4' testCompile 'ch.qos.logback:logback-classic:1.1.2' testCompile 'org.assertj:assertj-core:2.2.0' - testCompile 'com.sksamuel.diff:diff:1.1.11' + testCompile 'io.github.robwin:assertj-diff:0.1.1' } -task sourcesJar(type: Jar, dependsOn: classes) { - classifier = 'sources' - from sourceSets.main.allSource -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir -} - -artifacts { - archives sourcesJar - archives javadocJar -} - -ext { - generatedDocumentation = file('build/docs/asciidoc/generated') -} - -asciidoctor { - sources { - include 'index.adoc' - } - backends = ['html5', 'pdf'] - attributes = [ - doctype: 'book', - toc: 'left', - toclevels: '3', - numbered: '', - sectlinks: '', - sectanchors: '', - hardbreaks: '', - generated: generatedDocumentation - ] -} - -artifactory { - contextUrl = 'https://oss.jfrog.org' - resolve { - repository { - repoKey = 'libs-release' - } - } - publish { - repository { - repoKey = 'oss-snapshot-local' //The Artifactory repository key to publish to - //when using oss.jfrog.org the credentials are from Bintray. For local build we expect them to be found in - //~/.gradle/gradle.properties, otherwise to be set in the build server - username = project.hasProperty('bintrayUsername') ? project.bintrayUsername : System.getenv('BINTRAY_USER') - password = project.hasProperty('bintrayApiKey') ? project.bintrayApiKey : System.getenv('BINTRAY_KEY') - } - defaults { - publications('mavenJava') - } - } - if (System.properties['https.proxyHost']) { - clientConfig.proxy.host = System.properties['https.proxyHost'] - clientConfig.proxy.port = System.properties['https.proxyPort'].toInteger() - } - -} - -jacocoTestReport { - reports { - xml.enabled = true // coveralls plugin depends on xml format report - html.enabled = true - } -} - -tasks.coveralls { - dependsOn 'check' -} - -tasks.artifactoryPublish { - dependsOn 'check' -} - -publishGhPages.dependsOn asciidoctor - -githubPages { - repoUri = 'https://github.com/Swagger2Markup/swagger2markup.git' - - credentials { - username = project.hasProperty('githubUser') ? project.githubUser : System.getenv('GITHUB_USER') - password = project.hasProperty('githubPassword') ? project.githubPassword : System.getenv('GITHUB_PASSWORD') - } - - pages { - from file(asciidoctor.outputDir.path + '/html5') - into project.version - } -} task wrapper(type: Wrapper) { - gradleVersion = '2.10' + gradleVersion = '2.11' } diff --git a/gradle/coverage.gradle b/gradle/coverage.gradle new file mode 100644 index 00000000..d8a32f80 --- /dev/null +++ b/gradle/coverage.gradle @@ -0,0 +1,13 @@ +apply plugin: 'jacoco' +apply plugin: 'com.github.kt3k.coveralls' + +jacocoTestReport { + reports { + xml.enabled = true // coveralls plugin depends on xml format report + html.enabled = true + } +} + +tasks.coveralls { + dependsOn 'check' +} \ No newline at end of file diff --git a/gradle/documentation.gradle b/gradle/documentation.gradle new file mode 100644 index 00000000..770bec36 --- /dev/null +++ b/gradle/documentation.gradle @@ -0,0 +1,34 @@ +apply plugin: 'org.asciidoctor.convert' +apply plugin: 'org.ajoberstar.github-pages' + +asciidoctor { + sources { + include 'index.adoc' + } + backends = ['html5', 'pdf'] + attributes = [ + doctype: 'book', + toc: 'left', + toclevels: '3', + numbered: '', + sectlinks: '', + sectanchors: '', + hardbreaks: '', + ] +} + +publishGhPages.dependsOn asciidoctor + +githubPages { + repoUri = 'https://github.com/Swagger2Markup/swagger2markup.git' + + credentials { + username = project.hasProperty('githubUser') ? project.githubUser : System.getenv('GITHUB_USER') + password = project.hasProperty('githubPassword') ? project.githubPassword : System.getenv('GITHUB_PASSWORD') + } + + pages { + from file(asciidoctor.outputDir.path + '/html5') + into project.version + } +} \ No newline at end of file diff --git a/gradle/publishing.gradle b/gradle/publishing.gradle index 10b0c22a..edf6fe0a 100644 --- a/gradle/publishing.gradle +++ b/gradle/publishing.gradle @@ -1,24 +1,44 @@ import java.text.SimpleDateFormat +apply plugin: 'maven-publish' +apply plugin: 'com.jfrog.bintray' +apply plugin: "com.jfrog.artifactory" + Date buildTimeAndDate = new Date() ext { buildDate = new SimpleDateFormat('yyyy-MM-dd').format(buildTimeAndDate) buildTime = new SimpleDateFormat('HH:mm:ss.SSSZ').format(buildTimeAndDate) + projectUrl = 'https://github.com/Swagger2Markup/swagger2markup' + licenseUrl = 'https://github.com/Swagger2Markup/swagger2markup/blob/master/LICENSE.txt' + scmUrl = 'https://github.com/Swagger2Markup/swagger2markup.git' + issuesUrl = 'https://github.com/Swagger2Markup/swagger2markup/issues' } -def projectArtifactId = 'swagger2markup' +task sourcesJar(type: Jar, dependsOn: classes) { + classifier = 'sources' + from sourceSets.main.allSource +} + +task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = 'javadoc' + from javadoc.destinationDir +} + +artifacts { + archives sourcesJar + archives javadocJar +} jar { manifest { attributes( - 'Built-By': 'Robert Winkler', 'Created-By': System.properties['java.version'] + " (" + System.properties['java.vendor'] + " " + System.properties['java.vm.version'] + ")", - 'Build-Date': project.buildDate, - 'Build-Time': project.buildTime, - 'Specification-Title': projectArtifactId, - 'Specification-Version': project.version, - 'Implementation-Title': projectArtifactId, - 'Implementation-Version': project.version + 'Built-With': "gradle-${project.getGradle().getGradleVersion()}, groovy-${GroovySystem.getVersion()}", + 'Build-Time': "${new Date().format("yyyy-MM-dd'T'HH:mm:ssZ")}", + 'Specification-Title': "${project.name}", + 'Specification-Version': project.version.toString(), + 'Implementation-Title': "${project.name}", + 'Implementation-Version': project.version.toString() ) } } @@ -29,35 +49,6 @@ if (!project.hasProperty('gpgPassphrase')) ext.gpgPassphrase = '' if (!project.hasProperty('ossUser')) ext.ossUser = '' if (!project.hasProperty('ossPassword')) ext.ossPassword = '' -bintray { - user = project.bintrayUsername - key = project.bintrayApiKey - dryRun = false //Whether to run this as dry-run, without deploying - publish = true //If version should be auto published after an upload - publications = ['mavenJava'] - pkg { - repo = 'maven' - name = 'swagger2markup' - websiteUrl = 'https://github.com/Swagger2Markup/swagger2markup' - issueTrackerUrl = 'https://github.com/Swagger2Markup/swagger2markup/issues' - vcsUrl = 'https://github.com/Swagger2Markup/swagger2markup.git' - desc = 'A Swagger to Markup (AsciiDoc and Markdown) converter.' - licenses = ['Apache-2.0'] - version { - vcsTag = project.version - gpg { - sign = true //Determines whether to GPG sign the files. The default is false - passphrase = project.gpgPassphrase //Optional. The passphrase for GPG signing' - } - mavenCentralSync { - sync = true //Optional (true by default). Determines whether to sync the version to Maven Central. - user = ossUser //OSS user token - password = ossPassword //OSS user password - } - } - } -} - publishing { publications { mavenJava(MavenPublication) { @@ -74,17 +65,17 @@ publishing { it.scope*.value = 'compile' } - root.appendNode('name', 'swagger2markup') + root.appendNode('name', project.name) root.appendNode('packaging', 'jar') - root.appendNode('url', 'https://github.com/Swagger2Markup/swagger2markup') - root.appendNode('description', 'A Swagger to Markup (AsciiDoc and Markdown) converter.') + root.appendNode('url', projectUrl) + root.appendNode('description', project.description) def license = root.appendNode('licenses').appendNode('license') license.appendNode('name', 'Apache-2.0') - license.appendNode('url', 'https://github.com/Swagger2Markup/swagger2markup/blob/master/LICENSE.txt') + license.appendNode('url', licenseUrl) license.appendNode('distribution', 'repo') - root.appendNode('scm').appendNode('url', 'https://github.com/Swagger2Markup/swagger2markup.git') + root.appendNode('scm').appendNode('url', scmUrl) def developers = root.appendNode('developers') devs.each { @@ -97,4 +88,63 @@ publishing { artifact javadocJar } } +} + +bintray { + user = project.bintrayUsername + key = project.bintrayApiKey + dryRun = false //Whether to run this as dry-run, without deploying + publish = true //If version should be auto published after an upload + publications = ['mavenJava'] + pkg { + repo = 'maven' + name = 'swagger2markup' + websiteUrl = projectUrl + issueTrackerUrl = issuesUrl + vcsUrl = scmUrl + desc = rootProject.description + licenses = ['Apache-2.0'] + version { + vcsTag = rootProject.version + gpg { + sign = true //Determines whether to GPG sign the files. The default is false + passphrase = project.gpgPassphrase //Optional. The passphrase for GPG signing' + } + mavenCentralSync { + sync = true //Optional (true by default). Determines whether to sync the version to Maven Central. + user = ossUser //OSS user token + password = ossPassword //OSS user password + } + } + } +} + +artifactory { + contextUrl = 'https://oss.jfrog.org' + resolve { + repository { + repoKey = 'libs-release' + } + } + publish { + repository { + repoKey = 'oss-snapshot-local' //The Artifactory repository key to publish to + //when using oss.jfrog.org the credentials are from Bintray. For local build we expect them to be found in + //~/.gradle/gradle.properties, otherwise to be set in the build server + username = project.hasProperty('bintrayUsername') ? project.bintrayUsername : System.getenv('BINTRAY_USER') + password = project.hasProperty('bintrayApiKey') ? project.bintrayApiKey : System.getenv('BINTRAY_KEY') + } + defaults { + publications('mavenJava') + } + } + if (System.properties['https.proxyHost']) { + clientConfig.proxy.host = System.properties['https.proxyHost'] + clientConfig.proxy.port = System.properties['https.proxyPort'].toInteger() + } + +} + +tasks.artifactoryPublish { + dependsOn 'check' } \ No newline at end of file From fe0fa8a9cee76a8aed397e3f00796f1b3d5f33ec Mon Sep 17 00:00:00 2001 From: Robert Winkler Date: Mon, 14 Mar 2016 15:01:32 +0100 Subject: [PATCH 02/17] Moved classes from 'io.github.robwin.swagger2markup' to 'io.github.swagger2markup' --- .../{robwin => }/swagger2markup/GroupBy.java | 2 +- .../{robwin => }/swagger2markup/Language.java | 2 +- .../{robwin => }/swagger2markup/OrderBy.java | 2 +- .../swagger2markup/Swagger2MarkupConfig.java | 38 ++++---- .../Swagger2MarkupConverter.java | 14 +-- .../Swagger2MarkupExtensionRegistry.java | 14 +-- .../internal/document/MarkupDocument.java | 2 +- .../builder/DefinitionsDocumentBuilder.java | 20 ++-- .../builder/MarkupDocumentBuilder.java | 22 ++--- .../builder/OverviewDocumentBuilder.java | 10 +- .../builder/PathsDocumentBuilder.java | 40 ++++---- .../builder/SecurityDocumentBuilder.java | 12 +-- .../internal/model/PathOperation.java | 4 +- .../internal/type/ArrayType.java | 2 +- .../internal/type/BasicType.java | 2 +- .../type/DefinitionDocumentResolver.java | 2 +- .../internal/type/EnumType.java | 2 +- .../internal/type/ObjectType.java | 2 +- .../swagger2markup/internal/type/RefType.java | 2 +- .../swagger2markup/internal/type/Type.java | 2 +- .../internal/utils/ExamplesUtil.java | 20 +++- .../internal/utils/ListUtils.java | 2 +- .../internal/utils/MapUtils.java | 2 +- .../internal/utils/ModelUtils.java | 11 ++- .../internal/utils/ParameterUtils.java | 5 +- .../internal/utils/PropertyUtils.java | 6 +- .../internal/utils/TagUtils.java | 4 +- .../swagger2markup/spi/AbstractExtension.java | 4 +- .../swagger2markup/spi/ContentContext.java | 2 +- .../spi/DefinitionsDocumentExtension.java | 2 +- .../swagger2markup/spi/Extension.java | 4 +- .../spi/OverviewDocumentExtension.java | 2 +- .../spi/PathsDocumentExtension.java | 6 +- .../spi/SecurityDocumentExtension.java | 2 +- .../spi/SwaggerModelExtension.java | 2 +- .../utils/IOUtils.java | 10 +- .../swagger2markup/assertions/DiffAssert.java | 88 ------------------ .../assertions/DiffAssertions.java | 43 --------- .../swagger2markup/AsciidocConverterTest.java | 91 +------------------ .../swagger2markup/GeneralConverterTest.java | 5 +- .../swagger2markup/MarkdownConverterTest.java | 35 +------ .../Swagger2MarkupConfigTest.java | 2 +- .../swagger2markup/assertions/DiffUtils.java | 3 +- .../spi/MySwaggerModelExtension.java | 2 +- .../Swagger2MarkupExtensionRegistryTest.java | 9 +- 45 files changed, 159 insertions(+), 399 deletions(-) rename src/main/java/io/github/{robwin => }/swagger2markup/GroupBy.java (94%) rename src/main/java/io/github/{robwin => }/swagger2markup/Language.java (95%) rename src/main/java/io/github/{robwin => }/swagger2markup/OrderBy.java (94%) rename src/main/java/io/github/{robwin => }/swagger2markup/Swagger2MarkupConfig.java (96%) rename src/main/java/io/github/{robwin => }/swagger2markup/Swagger2MarkupConverter.java (95%) rename src/main/java/io/github/{robwin => }/swagger2markup/Swagger2MarkupExtensionRegistry.java (80%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/document/MarkupDocument.java (96%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java (95%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/document/builder/MarkupDocumentBuilder.java (91%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java (95%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/document/builder/PathsDocumentBuilder.java (96%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java (93%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/model/PathOperation.java (94%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/type/ArrayType.java (96%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/type/BasicType.java (95%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/type/DefinitionDocumentResolver.java (93%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/type/EnumType.java (95%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/type/ObjectType.java (96%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/type/RefType.java (95%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/type/Type.java (96%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/utils/ExamplesUtil.java (93%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/utils/ListUtils.java (95%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/utils/MapUtils.java (95%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/utils/ModelUtils.java (83%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/utils/ParameterUtils.java (96%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/utils/PropertyUtils.java (96%) rename src/main/java/io/github/{robwin => }/swagger2markup/internal/utils/TagUtils.java (96%) rename src/main/java/io/github/{robwin => }/swagger2markup/spi/AbstractExtension.java (92%) rename src/main/java/io/github/{robwin => }/swagger2markup/spi/ContentContext.java (95%) rename src/main/java/io/github/{robwin => }/swagger2markup/spi/DefinitionsDocumentExtension.java (98%) rename src/main/java/io/github/{robwin => }/swagger2markup/spi/Extension.java (89%) rename src/main/java/io/github/{robwin => }/swagger2markup/spi/OverviewDocumentExtension.java (97%) rename src/main/java/io/github/{robwin => }/swagger2markup/spi/PathsDocumentExtension.java (95%) rename src/main/java/io/github/{robwin => }/swagger2markup/spi/SecurityDocumentExtension.java (98%) rename src/main/java/io/github/{robwin => }/swagger2markup/spi/SwaggerModelExtension.java (95%) rename src/main/java/io/github/{robwin/swagger2markup/internal => swagger2markup}/utils/IOUtils.java (86%) delete mode 100644 src/test/java/io/github/robwin/swagger2markup/assertions/DiffAssert.java delete mode 100644 src/test/java/io/github/robwin/swagger2markup/assertions/DiffAssertions.java rename src/test/java/io/github/{robwin => }/swagger2markup/AsciidocConverterTest.java (78%) rename src/test/java/io/github/{robwin => }/swagger2markup/GeneralConverterTest.java (94%) rename src/test/java/io/github/{robwin => }/swagger2markup/MarkdownConverterTest.java (84%) rename src/test/java/io/github/{robwin => }/swagger2markup/Swagger2MarkupConfigTest.java (99%) rename src/test/java/io/github/{robwin => }/swagger2markup/assertions/DiffUtils.java (95%) rename src/test/java/io/github/{robwin => }/swagger2markup/spi/MySwaggerModelExtension.java (95%) rename src/test/java/io/github/{robwin => }/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java (79%) diff --git a/src/main/java/io/github/robwin/swagger2markup/GroupBy.java b/src/main/java/io/github/swagger2markup/GroupBy.java similarity index 94% rename from src/main/java/io/github/robwin/swagger2markup/GroupBy.java rename to src/main/java/io/github/swagger2markup/GroupBy.java index 211026e9..ba098429 100644 --- a/src/main/java/io/github/robwin/swagger2markup/GroupBy.java +++ b/src/main/java/io/github/swagger2markup/GroupBy.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup; +package io.github.swagger2markup; public enum GroupBy { AS_IS, diff --git a/src/main/java/io/github/robwin/swagger2markup/Language.java b/src/main/java/io/github/swagger2markup/Language.java similarity index 95% rename from src/main/java/io/github/robwin/swagger2markup/Language.java rename to src/main/java/io/github/swagger2markup/Language.java index 51ef2398..bd2cb3b7 100644 --- a/src/main/java/io/github/robwin/swagger2markup/Language.java +++ b/src/main/java/io/github/swagger2markup/Language.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup; +package io.github.swagger2markup; import java.util.Locale; diff --git a/src/main/java/io/github/robwin/swagger2markup/OrderBy.java b/src/main/java/io/github/swagger2markup/OrderBy.java similarity index 94% rename from src/main/java/io/github/robwin/swagger2markup/OrderBy.java rename to src/main/java/io/github/swagger2markup/OrderBy.java index 11e6f07b..b2428a2b 100644 --- a/src/main/java/io/github/robwin/swagger2markup/OrderBy.java +++ b/src/main/java/io/github/swagger2markup/OrderBy.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup; +package io.github.swagger2markup; public enum OrderBy { AS_IS, diff --git a/src/main/java/io/github/robwin/swagger2markup/Swagger2MarkupConfig.java b/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java similarity index 96% rename from src/main/java/io/github/robwin/swagger2markup/Swagger2MarkupConfig.java rename to src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java index 4e4898ae..5e4f5742 100644 --- a/src/main/java/io/github/robwin/swagger2markup/Swagger2MarkupConfig.java +++ b/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java @@ -13,14 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup; +package io.github.swagger2markup; import com.google.common.base.Function; import com.google.common.collect.Ordering; import io.github.robwin.markup.builder.LineSeparator; import io.github.robwin.markup.builder.MarkupLanguage; -import io.github.robwin.swagger2markup.internal.model.PathOperation; -import io.github.robwin.swagger2markup.internal.utils.IOUtils; +import io.github.swagger2markup.internal.model.PathOperation; +import io.github.swagger2markup.utils.IOUtils; import io.swagger.models.HttpMethod; import io.swagger.models.parameters.Parameter; import org.apache.commons.lang3.StringUtils; @@ -93,8 +93,8 @@ public class Swagger2MarkupConfig { } /** - * Automatically set default path for external content files based on specified {@code swaggerLocation}.
- * If {@code swaggerLocation} is null, default path can't be set and features are disabled.
+ * Automatically set default path for external content files based on specified {@code swaggerLocation}.
+ * If {@code swaggerLocation} is null, default path can't be set and features are disabled.
* Paths have to be explicitly set when swaggerLocation.scheme != 'file' to limit the number of URL requests. * * @param swaggerLocation base path to set default paths @@ -428,7 +428,7 @@ public class Swagger2MarkupConfig { } /** - * Include hand-written descriptions into the Paths document.
+ * Include hand-written descriptions into the Paths document.
* Use default URI. * * @return this builder @@ -463,7 +463,7 @@ public class Swagger2MarkupConfig { } /** - * Include hand-written descriptions into the Definitions document.
+ * Include hand-written descriptions into the Definitions document.
* Use default URI. * * @return this builder @@ -532,8 +532,8 @@ public class Swagger2MarkupConfig { } /** - * Specifies tag ordering.
- * By default tag ordering == {@link io.github.robwin.swagger2markup.OrderBy#NATURAL}.
+ * Specifies tag ordering.
+ * By default tag ordering == {@link io.github.swagger2markup.OrderBy#NATURAL}.
* Use {@link #withTagOrdering(Comparator)} to set a custom ordering. * * @param orderBy tag ordering @@ -560,8 +560,8 @@ public class Swagger2MarkupConfig { } /** - * Specifies operation ordering.
- * By default operation ordering == {@link io.github.robwin.swagger2markup.OrderBy#AS_IS}.
+ * Specifies operation ordering.
+ * By default operation ordering == {@link io.github.swagger2markup.OrderBy#AS_IS}.
* Use {@link #withOperationOrdering(Comparator)} to set a custom ordering. * * @param orderBy operation ordering @@ -588,8 +588,8 @@ public class Swagger2MarkupConfig { } /** - * Specifies definition ordering.
- * By default definition ordering == {@link io.github.robwin.swagger2markup.OrderBy#NATURAL}.
+ * Specifies definition ordering.
+ * By default definition ordering == {@link io.github.swagger2markup.OrderBy#NATURAL}.
* Use {@link #withDefinitionOrdering(Comparator)} to set a custom ordering. * * @param orderBy definition ordering @@ -616,8 +616,8 @@ public class Swagger2MarkupConfig { } /** - * Specifies parameter ordering.
- * By default parameter ordering == {@link io.github.robwin.swagger2markup.OrderBy#NATURAL}.
+ * Specifies parameter ordering.
+ * By default parameter ordering == {@link OrderBy#NATURAL}.
* Use {@link #withParameterOrdering(Comparator)} to set a custom ordering. * * @param orderBy parameter ordering @@ -645,8 +645,8 @@ public class Swagger2MarkupConfig { } /** - * Specifies property ordering.
- * By default property ordering == {@link io.github.robwin.swagger2markup.OrderBy#NATURAL}.
+ * Specifies property ordering.
+ * By default property ordering == {@link io.github.swagger2markup.OrderBy#NATURAL}.
* Use {@link #withPropertyOrdering(Comparator)} to set a custom ordering. * * @param orderBy property ordering @@ -674,8 +674,8 @@ public class Swagger2MarkupConfig { } /** - * Specifies response ordering.
- * By default response ordering == {@link io.github.robwin.swagger2markup.OrderBy#NATURAL}.
+ * Specifies response ordering.
+ * By default response ordering == {@link io.github.swagger2markup.OrderBy#NATURAL}.
* Use {@link #withResponseOrdering(Comparator)} to set a custom ordering. * * @param orderBy response ordering diff --git a/src/main/java/io/github/robwin/swagger2markup/Swagger2MarkupConverter.java b/src/main/java/io/github/swagger2markup/Swagger2MarkupConverter.java similarity index 95% rename from src/main/java/io/github/robwin/swagger2markup/Swagger2MarkupConverter.java rename to src/main/java/io/github/swagger2markup/Swagger2MarkupConverter.java index 722bdba8..ac11d620 100644 --- a/src/main/java/io/github/robwin/swagger2markup/Swagger2MarkupConverter.java +++ b/src/main/java/io/github/swagger2markup/Swagger2MarkupConverter.java @@ -13,15 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup; +package io.github.swagger2markup; import com.google.common.annotations.VisibleForTesting; -import io.github.robwin.swagger2markup.internal.document.builder.DefinitionsDocumentBuilder; -import io.github.robwin.swagger2markup.internal.document.builder.OverviewDocumentBuilder; -import io.github.robwin.swagger2markup.internal.document.builder.PathsDocumentBuilder; -import io.github.robwin.swagger2markup.internal.document.builder.SecurityDocumentBuilder; -import io.github.robwin.swagger2markup.spi.Extension; -import io.github.robwin.swagger2markup.spi.SwaggerModelExtension; +import io.github.swagger2markup.internal.document.builder.DefinitionsDocumentBuilder; +import io.github.swagger2markup.internal.document.builder.OverviewDocumentBuilder; +import io.github.swagger2markup.internal.document.builder.PathsDocumentBuilder; +import io.github.swagger2markup.internal.document.builder.SecurityDocumentBuilder; +import io.github.swagger2markup.spi.Extension; +import io.github.swagger2markup.spi.SwaggerModelExtension; import io.swagger.models.Swagger; import io.swagger.parser.SwaggerParser; import org.apache.commons.io.IOUtils; diff --git a/src/main/java/io/github/robwin/swagger2markup/Swagger2MarkupExtensionRegistry.java b/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java similarity index 80% rename from src/main/java/io/github/robwin/swagger2markup/Swagger2MarkupExtensionRegistry.java rename to src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java index 47c40e5d..44ff861a 100644 --- a/src/main/java/io/github/robwin/swagger2markup/Swagger2MarkupExtensionRegistry.java +++ b/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java @@ -14,15 +14,11 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup; +package io.github.swagger2markup; import com.google.common.collect.Multimap; import com.google.common.collect.MultimapBuilder; -import io.github.robwin.swagger2markup.internal.extensions.DynamicDefinitionsDocumentExtension; -import io.github.robwin.swagger2markup.internal.extensions.DynamicPathsDocumentExtension; -import io.github.robwin.swagger2markup.internal.extensions.DynamicOverviewDocumentExtension; -import io.github.robwin.swagger2markup.internal.extensions.DynamicSecurityDocumentExtension; -import io.github.robwin.swagger2markup.spi.*; +import io.github.swagger2markup.spi.*; import java.util.ArrayList; import java.util.Arrays; @@ -59,12 +55,6 @@ public class Swagger2MarkupExtensionRegistry { Builder(boolean useDefaults) { extensions = MultimapBuilder.hashKeys().arrayListValues().build(); - if (useDefaults) { - withExtension(new DynamicOverviewDocumentExtension()); - withExtension(new DynamicSecurityDocumentExtension()); - withExtension(new DynamicPathsDocumentExtension()); - withExtension(new DynamicDefinitionsDocumentExtension()); - } } public Swagger2MarkupExtensionRegistry build() { diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/document/MarkupDocument.java b/src/main/java/io/github/swagger2markup/internal/document/MarkupDocument.java similarity index 96% rename from src/main/java/io/github/robwin/swagger2markup/internal/document/MarkupDocument.java rename to src/main/java/io/github/swagger2markup/internal/document/MarkupDocument.java index bb9a9a99..6d5ec10c 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/document/MarkupDocument.java +++ b/src/main/java/io/github/swagger2markup/internal/document/MarkupDocument.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.document; +package io.github.swagger2markup.internal.document; import io.github.robwin.markup.builder.MarkupDocBuilder; diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java b/src/main/java/io/github/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java similarity index 95% rename from src/main/java/io/github/robwin/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java rename to src/main/java/io/github/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java index ce59abc4..c2d37f31 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java +++ b/src/main/java/io/github/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java @@ -13,16 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.document.builder; +package io.github.swagger2markup.internal.document.builder; import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; import io.github.robwin.markup.builder.MarkupDocBuilder; -import io.github.robwin.swagger2markup.Swagger2MarkupConverter; -import io.github.robwin.swagger2markup.internal.document.MarkupDocument; -import io.github.robwin.swagger2markup.spi.DefinitionsDocumentExtension; -import io.github.robwin.swagger2markup.internal.type.ObjectType; -import io.github.robwin.swagger2markup.internal.type.Type; +import io.github.swagger2markup.Swagger2MarkupConverter; +import io.github.swagger2markup.internal.document.MarkupDocument; +import io.github.swagger2markup.spi.DefinitionsDocumentExtension; +import io.github.swagger2markup.internal.type.ObjectType; +import io.github.swagger2markup.internal.type.Type; import io.swagger.models.ComposedModel; import io.swagger.models.Model; import io.swagger.models.RefModel; @@ -42,11 +42,11 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.util.*; -import static io.github.robwin.swagger2markup.internal.utils.IOUtils.normalizeName; -import static io.github.robwin.swagger2markup.spi.DefinitionsDocumentExtension.*; +import static io.github.swagger2markup.utils.IOUtils.normalizeName; +import static io.github.swagger2markup.spi.DefinitionsDocumentExtension.*; import static org.apache.commons.lang3.StringUtils.defaultString; import static org.apache.commons.lang3.StringUtils.isNotBlank; -import static io.github.robwin.swagger2markup.internal.utils.MapUtils.toKeySet; +import static io.github.swagger2markup.internal.utils.MapUtils.toKeySet; /** * @author Robert Winkler @@ -328,7 +328,7 @@ public class DefinitionsDocumentBuilder extends MarkupDocumentBuilder { for (String fileNameExtension : config.getMarkupLanguage().getFileNameExtensions()) { URI contentUri = config.getDefinitionDescriptionsUri().resolve(descriptionFolder).resolve(descriptionFileName + fileNameExtension); - try (Reader reader = io.github.robwin.swagger2markup.internal.utils.IOUtils.uriReader(contentUri)) { + try (Reader reader = io.github.swagger2markup.utils.IOUtils.uriReader(contentUri)) { if (logger.isInfoEnabled()) { logger.info("Definition description content processed {}", contentUri); } diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/MarkupDocumentBuilder.java b/src/main/java/io/github/swagger2markup/internal/document/builder/MarkupDocumentBuilder.java similarity index 91% rename from src/main/java/io/github/robwin/swagger2markup/internal/document/builder/MarkupDocumentBuilder.java rename to src/main/java/io/github/swagger2markup/internal/document/builder/MarkupDocumentBuilder.java index bdb4a80a..ec5315f2 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/MarkupDocumentBuilder.java +++ b/src/main/java/io/github/swagger2markup/internal/document/builder/MarkupDocumentBuilder.java @@ -13,21 +13,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.document.builder; +package io.github.swagger2markup.internal.document.builder; import io.github.robwin.markup.builder.MarkupDocBuilder; import io.github.robwin.markup.builder.MarkupDocBuilders; import io.github.robwin.markup.builder.MarkupLanguage; import io.github.robwin.markup.builder.MarkupTableColumn; -import io.github.robwin.swagger2markup.Swagger2MarkupConfig; -import io.github.robwin.swagger2markup.Swagger2MarkupConverter; -import io.github.robwin.swagger2markup.internal.document.MarkupDocument; -import io.github.robwin.swagger2markup.internal.type.DefinitionDocumentResolver; -import io.github.robwin.swagger2markup.internal.type.ObjectType; -import io.github.robwin.swagger2markup.internal.type.RefType; -import io.github.robwin.swagger2markup.internal.type.Type; -import io.github.robwin.swagger2markup.internal.utils.IOUtils; -import io.github.robwin.swagger2markup.internal.utils.PropertyUtils; +import io.github.swagger2markup.Swagger2MarkupConfig; +import io.github.swagger2markup.Swagger2MarkupConverter; +import io.github.swagger2markup.internal.document.MarkupDocument; +import io.github.swagger2markup.internal.type.DefinitionDocumentResolver; +import io.github.swagger2markup.internal.type.ObjectType; +import io.github.swagger2markup.internal.type.RefType; +import io.github.swagger2markup.internal.type.Type; +import io.github.swagger2markup.utils.IOUtils; +import io.github.swagger2markup.internal.utils.PropertyUtils; import io.swagger.models.properties.Property; import io.swagger.util.Json; import org.apache.commons.collections4.MapUtils; @@ -39,7 +39,7 @@ import java.io.IOException; import java.nio.file.Path; import java.util.*; -import static io.github.robwin.swagger2markup.internal.utils.MapUtils.toKeySet; +import static io.github.swagger2markup.internal.utils.MapUtils.toKeySet; import static org.apache.commons.lang3.StringUtils.defaultString; import static org.apache.commons.lang3.StringUtils.isNotBlank; diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java b/src/main/java/io/github/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java similarity index 95% rename from src/main/java/io/github/robwin/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java rename to src/main/java/io/github/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java index a808fb94..6d670776 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java +++ b/src/main/java/io/github/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.document.builder; +package io.github.swagger2markup.internal.document.builder; -import io.github.robwin.swagger2markup.Swagger2MarkupConverter; -import io.github.robwin.swagger2markup.internal.document.MarkupDocument; -import io.github.robwin.swagger2markup.spi.OverviewDocumentExtension; +import io.github.swagger2markup.Swagger2MarkupConverter; +import io.github.swagger2markup.internal.document.MarkupDocument; +import io.github.swagger2markup.spi.OverviewDocumentExtension; import io.swagger.models.*; import java.nio.file.Path; @@ -25,7 +25,7 @@ import java.util.ArrayList; import java.util.List; import java.util.ResourceBundle; -import static io.github.robwin.swagger2markup.spi.OverviewDocumentExtension.*; +import static io.github.swagger2markup.spi.OverviewDocumentExtension.*; import static org.apache.commons.collections4.CollectionUtils.isNotEmpty; import static org.apache.commons.lang3.StringUtils.*; diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/PathsDocumentBuilder.java b/src/main/java/io/github/swagger2markup/internal/document/builder/PathsDocumentBuilder.java similarity index 96% rename from src/main/java/io/github/robwin/swagger2markup/internal/document/builder/PathsDocumentBuilder.java rename to src/main/java/io/github/swagger2markup/internal/document/builder/PathsDocumentBuilder.java index 2b5337ee..2d66f137 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/PathsDocumentBuilder.java +++ b/src/main/java/io/github/swagger2markup/internal/document/builder/PathsDocumentBuilder.java @@ -13,21 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.document.builder; +package io.github.swagger2markup.internal.document.builder; import com.google.common.base.Joiner; import com.google.common.base.Optional; import com.google.common.collect.Multimap; import io.github.robwin.markup.builder.*; -import io.github.robwin.swagger2markup.GroupBy; -import io.github.robwin.swagger2markup.Swagger2MarkupConverter; -import io.github.robwin.swagger2markup.internal.document.MarkupDocument; -import io.github.robwin.swagger2markup.internal.model.PathOperation; -import io.github.robwin.swagger2markup.internal.type.ObjectType; -import io.github.robwin.swagger2markup.internal.type.RefType; -import io.github.robwin.swagger2markup.internal.type.Type; -import io.github.robwin.swagger2markup.internal.utils.*; -import io.github.robwin.swagger2markup.spi.PathsDocumentExtension; +import io.github.swagger2markup.GroupBy; +import io.github.swagger2markup.Swagger2MarkupConverter; +import io.github.swagger2markup.internal.document.MarkupDocument; +import io.github.swagger2markup.internal.model.PathOperation; +import io.github.swagger2markup.internal.type.ObjectType; +import io.github.swagger2markup.internal.type.RefType; +import io.github.swagger2markup.internal.type.Type; +import io.github.swagger2markup.internal.utils.ExamplesUtil; +import io.github.swagger2markup.internal.utils.ParameterUtils; +import io.github.swagger2markup.internal.utils.PropertyUtils; +import io.github.swagger2markup.internal.utils.TagUtils; +import io.github.swagger2markup.spi.PathsDocumentExtension; import io.swagger.models.*; import io.swagger.models.auth.SecuritySchemeDefinition; import io.swagger.models.parameters.Parameter; @@ -47,12 +50,13 @@ import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.*; -import static io.github.robwin.swagger2markup.internal.utils.IOUtils.normalizeName; -import static io.github.robwin.swagger2markup.internal.utils.ListUtils.*; -import static io.github.robwin.swagger2markup.internal.utils.MapUtils.toKeySet; -import static io.github.robwin.swagger2markup.internal.utils.TagUtils.convertTagsListToMap; -import static io.github.robwin.swagger2markup.internal.utils.TagUtils.getTagDescription; -import static io.github.robwin.swagger2markup.spi.PathsDocumentExtension.*; +import static io.github.swagger2markup.utils.IOUtils.normalizeName; +import static io.github.swagger2markup.internal.utils.ListUtils.toSet; +import static io.github.swagger2markup.internal.utils.MapUtils.toKeySet; +import static io.github.swagger2markup.internal.utils.TagUtils.convertTagsListToMap; +import static io.github.swagger2markup.internal.utils.TagUtils.getTagDescription; +import static io.github.swagger2markup.spi.PathsDocumentExtension.Context; +import static io.github.swagger2markup.spi.PathsDocumentExtension.Position; import static org.apache.commons.lang3.StringUtils.defaultString; import static org.apache.commons.lang3.StringUtils.isNotBlank; @@ -675,7 +679,7 @@ public class PathsDocumentBuilder extends MarkupDocumentBuilder { for (String fileNameExtension : config.getMarkupLanguage().getFileNameExtensions()) { URI contentUri = config.getOperationDescriptionsUri().resolve(descriptionFolder).resolve(descriptionFileName + fileNameExtension); - try (Reader reader = io.github.robwin.swagger2markup.internal.utils.IOUtils.uriReader(contentUri)) { + try (Reader reader = io.github.swagger2markup.utils.IOUtils.uriReader(contentUri)) { if (logger.isInfoEnabled()) { logger.info("Operation description content processed {}", contentUri); } @@ -804,7 +808,7 @@ public class PathsDocumentBuilder extends MarkupDocumentBuilder { String defaultResolver = super.apply(definitionName); if (defaultResolver != null && config.isSeparatedOperationsEnabled()) - return defaultString(config.getInterDocumentCrossReferencesPrefix()) + new File("..", defaultResolver).getPath(); + return defaultString(config.getInterDocumentCrossReferencesPrefix()) + new File("src/main", defaultResolver).getPath(); else return defaultResolver; } diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java b/src/main/java/io/github/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java similarity index 93% rename from src/main/java/io/github/robwin/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java rename to src/main/java/io/github/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java index cded2568..fd31ddb6 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java +++ b/src/main/java/io/github/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.document.builder; +package io.github.swagger2markup.internal.document.builder; import io.github.robwin.markup.builder.MarkupDocBuilder; import io.github.robwin.markup.builder.MarkupTableColumn; -import io.github.robwin.swagger2markup.Swagger2MarkupConverter; -import io.github.robwin.swagger2markup.internal.document.MarkupDocument; -import io.github.robwin.swagger2markup.spi.SecurityDocumentExtension; +import io.github.swagger2markup.Swagger2MarkupConverter; +import io.github.swagger2markup.internal.document.MarkupDocument; +import io.github.swagger2markup.spi.SecurityDocumentExtension; import io.swagger.models.auth.ApiKeyAuthDefinition; import io.swagger.models.auth.OAuth2Definition; import io.swagger.models.auth.SecuritySchemeDefinition; @@ -28,8 +28,8 @@ import org.apache.commons.collections4.MapUtils; import java.nio.file.Path; import java.util.*; -import static io.github.robwin.swagger2markup.spi.SecurityDocumentExtension.Context; -import static io.github.robwin.swagger2markup.spi.SecurityDocumentExtension.Position; +import static io.github.swagger2markup.spi.SecurityDocumentExtension.Context; +import static io.github.swagger2markup.spi.SecurityDocumentExtension.Position; import static org.apache.commons.lang3.StringUtils.isNotBlank; /** diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/model/PathOperation.java b/src/main/java/io/github/swagger2markup/internal/model/PathOperation.java similarity index 94% rename from src/main/java/io/github/robwin/swagger2markup/internal/model/PathOperation.java rename to src/main/java/io/github/swagger2markup/internal/model/PathOperation.java index 84af1bd0..c644bfd8 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/model/PathOperation.java +++ b/src/main/java/io/github/swagger2markup/internal/model/PathOperation.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.model; +package io.github.swagger2markup.internal.model; import io.swagger.models.HttpMethod; import io.swagger.models.Operation; @@ -54,7 +54,7 @@ public class PathOperation { } /** - * Returns an unique id for the operation.
+ * Returns an unique id for the operation.
* Use {@code }, then {@code lowercase()} if operation id is not set. * * @return operation unique id diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/type/ArrayType.java b/src/main/java/io/github/swagger2markup/internal/type/ArrayType.java similarity index 96% rename from src/main/java/io/github/robwin/swagger2markup/internal/type/ArrayType.java rename to src/main/java/io/github/swagger2markup/internal/type/ArrayType.java index d1225d52..4a157085 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/type/ArrayType.java +++ b/src/main/java/io/github/swagger2markup/internal/type/ArrayType.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.type; +package io.github.swagger2markup.internal.type; import io.github.robwin.markup.builder.MarkupDocBuilder; diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/type/BasicType.java b/src/main/java/io/github/swagger2markup/internal/type/BasicType.java similarity index 95% rename from src/main/java/io/github/robwin/swagger2markup/internal/type/BasicType.java rename to src/main/java/io/github/swagger2markup/internal/type/BasicType.java index d0841095..84cc032a 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/type/BasicType.java +++ b/src/main/java/io/github/swagger2markup/internal/type/BasicType.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.type; +package io.github.swagger2markup.internal.type; import io.github.robwin.markup.builder.MarkupDocBuilder; diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/type/DefinitionDocumentResolver.java b/src/main/java/io/github/swagger2markup/internal/type/DefinitionDocumentResolver.java similarity index 93% rename from src/main/java/io/github/robwin/swagger2markup/internal/type/DefinitionDocumentResolver.java rename to src/main/java/io/github/swagger2markup/internal/type/DefinitionDocumentResolver.java index 418dcd03..83606f8e 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/type/DefinitionDocumentResolver.java +++ b/src/main/java/io/github/swagger2markup/internal/type/DefinitionDocumentResolver.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.type; +package io.github.swagger2markup.internal.type; import com.google.common.base.Function; diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/type/EnumType.java b/src/main/java/io/github/swagger2markup/internal/type/EnumType.java similarity index 95% rename from src/main/java/io/github/robwin/swagger2markup/internal/type/EnumType.java rename to src/main/java/io/github/swagger2markup/internal/type/EnumType.java index 5b46f023..43272cd7 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/type/EnumType.java +++ b/src/main/java/io/github/swagger2markup/internal/type/EnumType.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.type; +package io.github.swagger2markup.internal.type; import io.github.robwin.markup.builder.MarkupDocBuilder; diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/type/ObjectType.java b/src/main/java/io/github/swagger2markup/internal/type/ObjectType.java similarity index 96% rename from src/main/java/io/github/robwin/swagger2markup/internal/type/ObjectType.java rename to src/main/java/io/github/swagger2markup/internal/type/ObjectType.java index 051001bc..525c2d76 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/type/ObjectType.java +++ b/src/main/java/io/github/swagger2markup/internal/type/ObjectType.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.type; +package io.github.swagger2markup.internal.type; import io.github.robwin.markup.builder.MarkupDocBuilder; import io.swagger.models.properties.Property; diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/type/RefType.java b/src/main/java/io/github/swagger2markup/internal/type/RefType.java similarity index 95% rename from src/main/java/io/github/robwin/swagger2markup/internal/type/RefType.java rename to src/main/java/io/github/swagger2markup/internal/type/RefType.java index fb9edba8..69c63d56 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/type/RefType.java +++ b/src/main/java/io/github/swagger2markup/internal/type/RefType.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.type; +package io.github.swagger2markup.internal.type; import io.github.robwin.markup.builder.MarkupDocBuilder; diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/type/Type.java b/src/main/java/io/github/swagger2markup/internal/type/Type.java similarity index 96% rename from src/main/java/io/github/robwin/swagger2markup/internal/type/Type.java rename to src/main/java/io/github/swagger2markup/internal/type/Type.java index e379c5c6..f0cd4333 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/type/Type.java +++ b/src/main/java/io/github/swagger2markup/internal/type/Type.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.type; +package io.github.swagger2markup.internal.type; import io.github.robwin.markup.builder.MarkupDocBuilder; import org.apache.commons.lang3.Validate; diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/utils/ExamplesUtil.java b/src/main/java/io/github/swagger2markup/internal/utils/ExamplesUtil.java similarity index 93% rename from src/main/java/io/github/robwin/swagger2markup/internal/utils/ExamplesUtil.java rename to src/main/java/io/github/swagger2markup/internal/utils/ExamplesUtil.java index 36a2775b..2fec4470 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/utils/ExamplesUtil.java +++ b/src/main/java/io/github/swagger2markup/internal/utils/ExamplesUtil.java @@ -14,10 +14,10 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.utils; +package io.github.swagger2markup.internal.utils; import io.github.robwin.markup.builder.MarkupDocBuilder; -import io.github.robwin.swagger2markup.internal.model.PathOperation; +import io.github.swagger2markup.internal.model.PathOperation; import io.swagger.models.*; import io.swagger.models.parameters.*; import io.swagger.models.properties.ArrayProperty; @@ -39,7 +39,10 @@ public class ExamplesUtil { /** * Generates a Map of response examples * + * @param generateMissingExamples specifies the missing examples should be generated * @param operation the Swagger Operation + * @param definitions the map of definitions + * @param markupDocBuilder the markup builder * @return map containing response examples. */ public static Map generateResponseExampleMap(boolean generateMissingExamples, Operation operation, Map definitions, MarkupDocBuilder markupDocBuilder) { @@ -74,7 +77,10 @@ public class ExamplesUtil { /** * Generates examples for request * + * @param generateMissingExamples specifies the missing examples should be generated * @param pathOperation the Swagger Operation + * @param definitions the map of definitions + * @param markupDocBuilder the markup builder * @return an Optional with the example content */ public static Map generateRequestExampleMap(boolean generateMissingExamples, PathOperation pathOperation, Map definitions, MarkupDocBuilder markupDocBuilder) { @@ -157,7 +163,10 @@ public class ExamplesUtil { /** * Generates an example object from a simple reference * + * @param generateMissingExamples specifies the missing examples should be generated * @param simpleRef the simple reference string + * @param definitions the map of definitions + * @param markupDocBuilder the markup builder * @return returns an Object or Map of examples */ public static Object generateExampleForRefModel(boolean generateMissingExamples, String simpleRef, Map definitions, MarkupDocBuilder markupDocBuilder) { @@ -205,7 +214,10 @@ public class ExamplesUtil { * Generates a map of examples from a map of properties. If defined examples are found, those are used. Otherwise, * examples are generated from the type. * - * @param properties map of properties + * @param properties the map of properties + * @param definitions the map of definitions + * @param markupDocBuilder the markup builder + * * @return a Map of examples */ public static Map exampleMapForProperties(Map properties, Map definitions, MarkupDocBuilder markupDocBuilder) { @@ -266,6 +278,8 @@ public class ExamplesUtil { * Generates examples from an ArrayProperty * * @param value ArrayProperty + * @param definitions map of definitions + * @param markupDocBuilder the markup builder * @return array of Object */ public static Object[] generateExampleForArrayProperty(ArrayProperty value, Map definitions, MarkupDocBuilder markupDocBuilder) { diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/utils/ListUtils.java b/src/main/java/io/github/swagger2markup/internal/utils/ListUtils.java similarity index 95% rename from src/main/java/io/github/robwin/swagger2markup/internal/utils/ListUtils.java rename to src/main/java/io/github/swagger2markup/internal/utils/ListUtils.java index 63556118..8643a66c 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/utils/ListUtils.java +++ b/src/main/java/io/github/swagger2markup/internal/utils/ListUtils.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.utils; +package io.github.swagger2markup.internal.utils; import java.util.*; diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/utils/MapUtils.java b/src/main/java/io/github/swagger2markup/internal/utils/MapUtils.java similarity index 95% rename from src/main/java/io/github/robwin/swagger2markup/internal/utils/MapUtils.java rename to src/main/java/io/github/swagger2markup/internal/utils/MapUtils.java index e18543bf..8e9d2c25 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/utils/MapUtils.java +++ b/src/main/java/io/github/swagger2markup/internal/utils/MapUtils.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.utils; +package io.github.swagger2markup.internal.utils; import java.util.*; diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/utils/ModelUtils.java b/src/main/java/io/github/swagger2markup/internal/utils/ModelUtils.java similarity index 83% rename from src/main/java/io/github/robwin/swagger2markup/internal/utils/ModelUtils.java rename to src/main/java/io/github/swagger2markup/internal/utils/ModelUtils.java index 12ea82f6..d41bc99a 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/utils/ModelUtils.java +++ b/src/main/java/io/github/swagger2markup/internal/utils/ModelUtils.java @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.utils; +package io.github.swagger2markup.internal.utils; import com.google.common.base.Function; -import io.github.robwin.swagger2markup.internal.type.ArrayType; -import io.github.robwin.swagger2markup.internal.type.ObjectType; -import io.github.robwin.swagger2markup.internal.type.RefType; -import io.github.robwin.swagger2markup.internal.type.Type; +import io.github.swagger2markup.internal.type.ArrayType; +import io.github.swagger2markup.internal.type.ObjectType; +import io.github.swagger2markup.internal.type.RefType; +import io.github.swagger2markup.internal.type.Type; import io.swagger.models.ArrayModel; import io.swagger.models.Model; import io.swagger.models.ModelImpl; @@ -32,6 +32,7 @@ public final class ModelUtils { * Retrieves the type of a model, or otherwise null * * @param model the model + * @param definitionDocumentResolver the definition document resolver * @return the type of the model, or otherwise null */ public static Type getType(Model model, Function definitionDocumentResolver) { diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/utils/ParameterUtils.java b/src/main/java/io/github/swagger2markup/internal/utils/ParameterUtils.java similarity index 96% rename from src/main/java/io/github/robwin/swagger2markup/internal/utils/ParameterUtils.java rename to src/main/java/io/github/swagger2markup/internal/utils/ParameterUtils.java index 89ddfab2..49e1bb98 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/utils/ParameterUtils.java +++ b/src/main/java/io/github/swagger2markup/internal/utils/ParameterUtils.java @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.utils; +package io.github.swagger2markup.internal.utils; import com.google.common.base.Function; import io.github.robwin.markup.builder.MarkupDocBuilder; -import io.github.robwin.swagger2markup.internal.type.*; +import io.github.swagger2markup.internal.type.*; import io.swagger.models.Model; import io.swagger.models.parameters.AbstractSerializableParameter; import io.swagger.models.parameters.BodyParameter; @@ -37,6 +37,7 @@ public final class ParameterUtils { * Retrieves the type of a parameter, or otherwise null * * @param parameter the parameter + * @param definitionDocumentResolver the defintion document resolver * @return the type of the parameter, or otherwise null */ public static Type getType(Parameter parameter, Function definitionDocumentResolver){ diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/utils/PropertyUtils.java b/src/main/java/io/github/swagger2markup/internal/utils/PropertyUtils.java similarity index 96% rename from src/main/java/io/github/robwin/swagger2markup/internal/utils/PropertyUtils.java rename to src/main/java/io/github/swagger2markup/internal/utils/PropertyUtils.java index 0518c058..c0437b02 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/utils/PropertyUtils.java +++ b/src/main/java/io/github/swagger2markup/internal/utils/PropertyUtils.java @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.utils; +package io.github.swagger2markup.internal.utils; import com.google.common.base.Function; import io.github.robwin.markup.builder.MarkupDocBuilder; -import io.github.robwin.swagger2markup.internal.type.*; +import io.github.swagger2markup.internal.type.*; import io.swagger.models.properties.*; import io.swagger.models.refs.RefFormat; import org.apache.commons.collections4.CollectionUtils; @@ -33,6 +33,7 @@ public final class PropertyUtils { * Retrieves the type and format of a property. * * @param property the property + * @param definitionDocumentResolver the definition document resolver * @return the type of the property */ public static Type getType(Property property, Function definitionDocumentResolver) { @@ -105,6 +106,7 @@ public final class PropertyUtils { /** * Return example display string for the given {@code property}. * + * @param generateMissingExamples specifies if missing examples should be generated * @param property property * @param markupDocBuilder doc builder * @return property example display string diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/utils/TagUtils.java b/src/main/java/io/github/swagger2markup/internal/utils/TagUtils.java similarity index 96% rename from src/main/java/io/github/robwin/swagger2markup/internal/utils/TagUtils.java rename to src/main/java/io/github/swagger2markup/internal/utils/TagUtils.java index 5823642a..7e244d65 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/utils/TagUtils.java +++ b/src/main/java/io/github/swagger2markup/internal/utils/TagUtils.java @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.utils; +package io.github.swagger2markup.internal.utils; import com.google.common.base.Optional; import com.google.common.collect.Multimap; import com.google.common.collect.MultimapBuilder; import com.google.common.collect.Ordering; -import io.github.robwin.swagger2markup.internal.model.PathOperation; +import io.github.swagger2markup.internal.model.PathOperation; import io.swagger.models.Tag; import org.apache.commons.lang3.Validate; import org.slf4j.Logger; diff --git a/src/main/java/io/github/robwin/swagger2markup/spi/AbstractExtension.java b/src/main/java/io/github/swagger2markup/spi/AbstractExtension.java similarity index 92% rename from src/main/java/io/github/robwin/swagger2markup/spi/AbstractExtension.java rename to src/main/java/io/github/swagger2markup/spi/AbstractExtension.java index 6a5938b5..5096350d 100644 --- a/src/main/java/io/github/robwin/swagger2markup/spi/AbstractExtension.java +++ b/src/main/java/io/github/swagger2markup/spi/AbstractExtension.java @@ -14,9 +14,9 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.spi; +package io.github.swagger2markup.spi; -import io.github.robwin.swagger2markup.Swagger2MarkupConverter; +import io.github.swagger2markup.Swagger2MarkupConverter; /** * An abstract extension which must be extended by an extension diff --git a/src/main/java/io/github/robwin/swagger2markup/spi/ContentContext.java b/src/main/java/io/github/swagger2markup/spi/ContentContext.java similarity index 95% rename from src/main/java/io/github/robwin/swagger2markup/spi/ContentContext.java rename to src/main/java/io/github/swagger2markup/spi/ContentContext.java index 1f12b2ac..cb8dd46c 100644 --- a/src/main/java/io/github/robwin/swagger2markup/spi/ContentContext.java +++ b/src/main/java/io/github/swagger2markup/spi/ContentContext.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.spi; +package io.github.swagger2markup.spi; import io.github.robwin.markup.builder.MarkupDocBuilder; diff --git a/src/main/java/io/github/robwin/swagger2markup/spi/DefinitionsDocumentExtension.java b/src/main/java/io/github/swagger2markup/spi/DefinitionsDocumentExtension.java similarity index 98% rename from src/main/java/io/github/robwin/swagger2markup/spi/DefinitionsDocumentExtension.java rename to src/main/java/io/github/swagger2markup/spi/DefinitionsDocumentExtension.java index d553ef76..9bdcb649 100644 --- a/src/main/java/io/github/robwin/swagger2markup/spi/DefinitionsDocumentExtension.java +++ b/src/main/java/io/github/swagger2markup/spi/DefinitionsDocumentExtension.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.spi; +package io.github.swagger2markup.spi; import org.apache.commons.lang3.Validate; diff --git a/src/main/java/io/github/robwin/swagger2markup/spi/Extension.java b/src/main/java/io/github/swagger2markup/spi/Extension.java similarity index 89% rename from src/main/java/io/github/robwin/swagger2markup/spi/Extension.java rename to src/main/java/io/github/swagger2markup/spi/Extension.java index f30df7fb..3693abc1 100644 --- a/src/main/java/io/github/robwin/swagger2markup/spi/Extension.java +++ b/src/main/java/io/github/swagger2markup/spi/Extension.java @@ -14,9 +14,9 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.spi; +package io.github.swagger2markup.spi; -import io.github.robwin.swagger2markup.Swagger2MarkupConverter; +import io.github.swagger2markup.Swagger2MarkupConverter; /** * A marker interface which must be implemented by an extension diff --git a/src/main/java/io/github/robwin/swagger2markup/spi/OverviewDocumentExtension.java b/src/main/java/io/github/swagger2markup/spi/OverviewDocumentExtension.java similarity index 97% rename from src/main/java/io/github/robwin/swagger2markup/spi/OverviewDocumentExtension.java rename to src/main/java/io/github/swagger2markup/spi/OverviewDocumentExtension.java index e11f64ae..c3e86773 100644 --- a/src/main/java/io/github/robwin/swagger2markup/spi/OverviewDocumentExtension.java +++ b/src/main/java/io/github/swagger2markup/spi/OverviewDocumentExtension.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.spi; +package io.github.swagger2markup.spi; import io.github.robwin.markup.builder.MarkupDocBuilder; diff --git a/src/main/java/io/github/robwin/swagger2markup/spi/PathsDocumentExtension.java b/src/main/java/io/github/swagger2markup/spi/PathsDocumentExtension.java similarity index 95% rename from src/main/java/io/github/robwin/swagger2markup/spi/PathsDocumentExtension.java rename to src/main/java/io/github/swagger2markup/spi/PathsDocumentExtension.java index a9072d05..59134f5c 100644 --- a/src/main/java/io/github/robwin/swagger2markup/spi/PathsDocumentExtension.java +++ b/src/main/java/io/github/swagger2markup/spi/PathsDocumentExtension.java @@ -14,12 +14,12 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.spi; +package io.github.swagger2markup.spi; import com.google.common.base.Optional; import io.github.robwin.markup.builder.MarkupDocBuilder; -import io.github.robwin.swagger2markup.GroupBy; -import io.github.robwin.swagger2markup.internal.model.PathOperation; +import io.github.swagger2markup.GroupBy; +import io.github.swagger2markup.internal.model.PathOperation; import org.apache.commons.lang3.Validate; /** diff --git a/src/main/java/io/github/robwin/swagger2markup/spi/SecurityDocumentExtension.java b/src/main/java/io/github/swagger2markup/spi/SecurityDocumentExtension.java similarity index 98% rename from src/main/java/io/github/robwin/swagger2markup/spi/SecurityDocumentExtension.java rename to src/main/java/io/github/swagger2markup/spi/SecurityDocumentExtension.java index 2b3eff5f..f48cbdb8 100644 --- a/src/main/java/io/github/robwin/swagger2markup/spi/SecurityDocumentExtension.java +++ b/src/main/java/io/github/swagger2markup/spi/SecurityDocumentExtension.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.spi; +package io.github.swagger2markup.spi; import com.google.common.base.Optional; import io.github.robwin.markup.builder.MarkupDocBuilder; diff --git a/src/main/java/io/github/robwin/swagger2markup/spi/SwaggerModelExtension.java b/src/main/java/io/github/swagger2markup/spi/SwaggerModelExtension.java similarity index 95% rename from src/main/java/io/github/robwin/swagger2markup/spi/SwaggerModelExtension.java rename to src/main/java/io/github/swagger2markup/spi/SwaggerModelExtension.java index 6221a7b2..e4f60382 100644 --- a/src/main/java/io/github/robwin/swagger2markup/spi/SwaggerModelExtension.java +++ b/src/main/java/io/github/swagger2markup/spi/SwaggerModelExtension.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.spi; +package io.github.swagger2markup.spi; import io.swagger.models.Swagger; diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/utils/IOUtils.java b/src/main/java/io/github/swagger2markup/utils/IOUtils.java similarity index 86% rename from src/main/java/io/github/robwin/swagger2markup/internal/utils/IOUtils.java rename to src/main/java/io/github/swagger2markup/utils/IOUtils.java index f4566117..660c9969 100644 --- a/src/main/java/io/github/robwin/swagger2markup/internal/utils/IOUtils.java +++ b/src/main/java/io/github/swagger2markup/utils/IOUtils.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.github.robwin.swagger2markup.internal.utils; +package io.github.swagger2markup.utils; import org.apache.commons.lang3.StringUtils; @@ -30,7 +30,7 @@ public class IOUtils { private static final Pattern NAME_FORBIDDEN_PATTERN = Pattern.compile("[^0-9A-Za-z-_]+"); /** - * Create a normalized name from an arbitrary string.
+ * Create a normalized name from an arbitrary string.
* Paths separators are replaced, so this function can't be applied on a whole path, but must be called on each path sections. * * @param name current name of the file @@ -45,12 +45,12 @@ public class IOUtils { } /** - * Create a reader from specified {@code source}.
+ * Create a reader from specified {@code source}.
* Returned reader should be explicitly closed after use. * * @param uri source URI * @return reader - * @throws IOException + * @throws IOException if the connection cannot be opened */ public static Reader uriReader(URI uri) throws IOException { return new BufferedReader(new InputStreamReader(uri.toURL().openStream(), StandardCharsets.UTF_8)); @@ -62,6 +62,6 @@ public class IOUtils { * @return URI parent */ public static URI uriParent(URI uri) { - return uri.getPath().endsWith("/") ? uri.resolve("..") : uri.resolve("."); + return uri.getPath().endsWith("/") ? uri.resolve("src/main") : uri.resolve("."); } } diff --git a/src/test/java/io/github/robwin/swagger2markup/assertions/DiffAssert.java b/src/test/java/io/github/robwin/swagger2markup/assertions/DiffAssert.java deleted file mode 100644 index ccdc477a..00000000 --- a/src/test/java/io/github/robwin/swagger2markup/assertions/DiffAssert.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * - * Copyright 2016 Robert Winkler - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * - */ -package io.github.robwin.swagger2markup.assertions; - - -import com.sksamuel.diffpatch.DiffMatchPatch; -import org.apache.commons.io.IOUtils; -import org.assertj.core.api.AbstractAssert; - -import java.io.BufferedWriter; -import java.io.IOException; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.LinkedList; - -import static org.assertj.core.api.Assertions.assertThat; - -public class DiffAssert extends AbstractAssert{ - - public DiffAssert(Path actual) { - super(actual, DiffAssert.class); - } - - /** - * Verifies that the content of the actual File is equal to the given one. - * - * @param expected the given value to compare the actual value to. - * @param reportPath the path to the report which should be generated if the files differ. - * @return {@code this} assertion object. - * @throws AssertionError if the actual value is not equal to the given one or if the actual value is {@code null}.. - */ - public DiffAssert isEqualTo(Path expected, Path reportPath) { - LinkedList diffs = diff(actual, expected); - boolean allDiffsAreEqual = assertThatAllDiffsAreEqual(diffs); - if(!allDiffsAreEqual){ - writeHtmlReport(reportPath, diffs); - } - assertThat(allDiffsAreEqual).as("The content of the following files differ. Actual: %s, Expected %s. Check the HTML report for more details: %s", actual.toAbsolutePath(), expected.toAbsolutePath(), reportPath.toAbsolutePath()).isTrue(); - return myself; - } - - public boolean assertThatAllDiffsAreEqual(LinkedList diffs){ - for(DiffMatchPatch.Diff diff : diffs){ - if(diff.operation == DiffMatchPatch.Operation.DELETE || diff.operation == DiffMatchPatch.Operation.INSERT){ - return false; - } - } - return true; - } - - private static LinkedList diff(Path actual, Path expected){ - DiffMatchPatch differ = new DiffMatchPatch(); - try { - return differ.diff_main(IOUtils.toString(expected.toUri()), IOUtils.toString(actual.toUri()), false); - } catch (IOException e) { - throw new RuntimeException("Failed to diff files.", e); - } - } - - private static void writeHtmlReport(Path reportPath, LinkedList diffs){ - DiffMatchPatch differ = new DiffMatchPatch(); - try { - Files.createDirectories(reportPath.getParent()); - try (BufferedWriter writer = Files.newBufferedWriter(reportPath, Charset.forName("UTF-8"))) { - writer.write(differ.diff_prettyHtml(diffs)); - } - } catch (IOException e) { - throw new RuntimeException(String.format("Failed to write report %s", reportPath.toAbsolutePath()), e); - } - } -} diff --git a/src/test/java/io/github/robwin/swagger2markup/assertions/DiffAssertions.java b/src/test/java/io/github/robwin/swagger2markup/assertions/DiffAssertions.java deleted file mode 100644 index 4ac70e52..00000000 --- a/src/test/java/io/github/robwin/swagger2markup/assertions/DiffAssertions.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * Copyright 2016 Robert Winkler - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * - */ -package io.github.robwin.swagger2markup.assertions; - -import org.apache.commons.lang3.Validate; - -import java.nio.file.Path; - -/** - * Entry point for assertion methods for diffing files. - * - * @author Robert Winkler - */ -public class DiffAssertions { - - /** - * Creates a new instance of {@link DiffAssert}. - * - * @param actual the the actual File path. - * @return the created assertion object. - */ - - public static DiffAssert assertThat(Path actual) { - Validate.notNull(actual, "actual must not be null"); - return new DiffAssert(actual); - } -} diff --git a/src/test/java/io/github/robwin/swagger2markup/AsciidocConverterTest.java b/src/test/java/io/github/swagger2markup/AsciidocConverterTest.java similarity index 78% rename from src/test/java/io/github/robwin/swagger2markup/AsciidocConverterTest.java rename to src/test/java/io/github/swagger2markup/AsciidocConverterTest.java index 60af4b79..88c0ec68 100644 --- a/src/test/java/io/github/robwin/swagger2markup/AsciidocConverterTest.java +++ b/src/test/java/io/github/swagger2markup/AsciidocConverterTest.java @@ -13,13 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup; +package io.github.swagger2markup; -import io.github.robwin.swagger2markup.assertions.DiffUtils; -import io.github.robwin.swagger2markup.internal.extensions.DynamicDefinitionsDocumentExtension; -import io.github.robwin.swagger2markup.internal.extensions.DynamicPathsDocumentExtension; -import io.github.robwin.swagger2markup.internal.extensions.SchemaExtension; -import io.github.robwin.swagger2markup.internal.extensions.SpringRestDocsExtension; +import io.github.swagger2markup.assertions.DiffUtils; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.junit.Before; @@ -108,35 +104,6 @@ public class AsciidocConverterTest { DiffUtils.assertThatAllFilesAreEqual(outputDirectory, expectedFilesDirectory, "testSwagger2AsciiDocConversion.html"); } - @Test - public void testSwagger2AsciiDocConversionWithSpringRestDocsExtension() throws IOException, URISyntaxException { - //Given - String swaggerJsonString = IOUtils.toString(getClass().getResourceAsStream("/yaml/swagger_petstore.yaml")); - Path outputDirectory = Paths.get("build/docs/asciidoc/spring_rest_docs"); - FileUtils.deleteQuietly(outputDirectory.toFile()); - - //When - Swagger2MarkupExtensionRegistry registry = Swagger2MarkupExtensionRegistry.ofEmpty() - .withExtension(new SpringRestDocsExtension(Paths.get("src/test/resources/docs/asciidoc/paths").toUri()).withDefaultSnippets()) - .build(); - - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() - .build(); - - Swagger2MarkupConverter.from(swaggerJsonString) - .withConfig(config) - .withExtensionRegistry(registry) - .build() - .intoFolder(outputDirectory); - - //Then - String[] files = outputDirectory.toFile().list(); - assertThat(files).hasSize(4).containsAll(expectedFiles); - - Path expectedFilesDirectory = Paths.get(AsciidocConverterTest.class.getResource("/expected_results/asciidoc/spring_rest_docs").toURI()); - DiffUtils.assertThatAllFilesAreEqual(outputDirectory, expectedFilesDirectory, "testSwagger2AsciiDocConversionWithSpringRestDocsExtension.html"); - } - @Test public void testSwagger2AsciiDocConversionWithExamples() throws IOException, URISyntaxException { //Given @@ -402,58 +369,4 @@ public class AsciidocConverterTest { assertThat(new String(Files.readAllBytes(outputDirectory.resolve("overview.adoc")), Charset.forName("UTF-8"))) .contains("== Sch\u00E9ma d'URI"); } - - @Test - public void testSwagger2AsciiDocExtensions() throws IOException, URISyntaxException { - //Given - Path file = Paths.get(AsciidocConverterTest.class.getResource("/yaml/swagger_petstore.yaml").toURI()); - Path outputDirectory = Paths.get("build/docs/asciidoc/generated"); - FileUtils.deleteQuietly(outputDirectory.toFile()); - - //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() - .build(); - Swagger2MarkupExtensionRegistry registry = Swagger2MarkupExtensionRegistry.ofEmpty() - .withExtension(new DynamicDefinitionsDocumentExtension(Paths.get("src/test/resources/docs/asciidoc/extensions"))) - .withExtension(new DynamicPathsDocumentExtension(Paths.get("src/test/resources/docs/asciidoc/extensions"))) - .build(); - Swagger2MarkupConverter.from(file) - .withConfig(config) - .withExtensionRegistry(registry) - .build() - .intoFolder(outputDirectory); - - //Then - assertThat(new String(Files.readAllBytes(outputDirectory.resolve("paths.adoc")))).contains( - "Pet update request extension"); - assertThat(new String(Files.readAllBytes(outputDirectory.resolve("definitions.adoc")))).contains( - "Pet extension"); - - } - - @Test - public void testSwagger2AsciiDocSchemaExtension() throws IOException, URISyntaxException { - //Given - Path file = Paths.get(AsciidocConverterTest.class.getResource("/yaml/swagger_petstore.yaml").toURI()); - Path outputDirectory = Paths.get("build/docs/asciidoc/generated"); - FileUtils.deleteQuietly(outputDirectory.toFile()); - - //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() - .build(); - Swagger2MarkupExtensionRegistry registry = Swagger2MarkupExtensionRegistry.ofEmpty() - .withExtension(new SchemaExtension(Paths.get("src/test/resources/docs/asciidoc/extensions").toUri())) - .build(); - Swagger2MarkupConverter.from(file) - .withConfig(config) - .withExtensionRegistry(registry) - .build() - .intoFolder(outputDirectory); - - //Then - assertThat(new String(Files.readAllBytes(outputDirectory.resolve("definitions.adoc")))).contains( - "=== Pet"); - assertThat(new String(Files.readAllBytes(outputDirectory.resolve("definitions.adoc")))).contains( - "==== XML Schema"); - } } diff --git a/src/test/java/io/github/robwin/swagger2markup/GeneralConverterTest.java b/src/test/java/io/github/swagger2markup/GeneralConverterTest.java similarity index 94% rename from src/test/java/io/github/robwin/swagger2markup/GeneralConverterTest.java rename to src/test/java/io/github/swagger2markup/GeneralConverterTest.java index d194f180..5412c06a 100644 --- a/src/test/java/io/github/robwin/swagger2markup/GeneralConverterTest.java +++ b/src/test/java/io/github/swagger2markup/GeneralConverterTest.java @@ -13,8 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup; +package io.github.swagger2markup; +import io.github.swagger2markup.utils.IOUtils; import io.swagger.models.Swagger; import org.junit.Test; @@ -44,7 +45,7 @@ public class GeneralConverterTest { .build(); //Then - URI baseUri = io.github.robwin.swagger2markup.internal.utils.IOUtils.uriParent(converter.getContext().getSwaggerLocation()); + URI baseUri = IOUtils.uriParent(converter.getContext().getSwaggerLocation()); assertThat(converter.getContext().getConfig().getDefinitionDescriptionsUri()).isEqualTo(baseUri); assertThat(converter.getContext().getConfig().getOperationDescriptionsUri()).isEqualTo(baseUri); } diff --git a/src/test/java/io/github/robwin/swagger2markup/MarkdownConverterTest.java b/src/test/java/io/github/swagger2markup/MarkdownConverterTest.java similarity index 84% rename from src/test/java/io/github/robwin/swagger2markup/MarkdownConverterTest.java rename to src/test/java/io/github/swagger2markup/MarkdownConverterTest.java index 63285c1a..ccd836b7 100644 --- a/src/test/java/io/github/robwin/swagger2markup/MarkdownConverterTest.java +++ b/src/test/java/io/github/swagger2markup/MarkdownConverterTest.java @@ -13,16 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup; +package io.github.swagger2markup; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import io.github.robwin.markup.builder.MarkupLanguage; -import io.github.robwin.swagger2markup.assertions.DiffUtils; -import io.github.robwin.swagger2markup.internal.extensions.DynamicDefinitionsDocumentExtension; -import io.github.robwin.swagger2markup.internal.extensions.DynamicPathsDocumentExtension; +import io.github.swagger2markup.assertions.DiffUtils; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; @@ -164,35 +162,6 @@ public class MarkdownConverterTest { } - @Test - public void testSwagger2MarkdownExtensions() throws IOException, URISyntaxException { - //Given - Path file = Paths.get(MarkdownConverterTest.class.getResource("/yaml/swagger_petstore.yaml").toURI()); - Path outputDirectory = Paths.get("build/docs/markdown/generated"); - FileUtils.deleteQuietly(outputDirectory.toFile()); - - //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() - .withMarkupLanguage(MarkupLanguage.MARKDOWN) - .build(); - Swagger2MarkupExtensionRegistry registry = Swagger2MarkupExtensionRegistry.ofEmpty() - .withExtension(new DynamicDefinitionsDocumentExtension(Paths.get("src/test/resources/docs/markdown/extensions"))) - .withExtension(new DynamicPathsDocumentExtension(Paths.get("src/test/resources/docs/markdown/extensions"))) - .build(); - Swagger2MarkupConverter.from(file) - .withConfig(config) - .withExtensionRegistry(registry) - .build() - .intoFolder(outputDirectory); - - //Then - assertThat(new String(Files.readAllBytes(outputDirectory.resolve("paths.md")))).contains( - "Pet update request extension"); - assertThat(new String(Files.readAllBytes(outputDirectory.resolve("definitions.md")))).contains( - "Pet extension"); - - } - /** * Given a markdown document to search, this checks to see if the specified tables * have all of the expected fields listed. diff --git a/src/test/java/io/github/robwin/swagger2markup/Swagger2MarkupConfigTest.java b/src/test/java/io/github/swagger2markup/Swagger2MarkupConfigTest.java similarity index 99% rename from src/test/java/io/github/robwin/swagger2markup/Swagger2MarkupConfigTest.java rename to src/test/java/io/github/swagger2markup/Swagger2MarkupConfigTest.java index 1385c308..f1cece52 100644 --- a/src/test/java/io/github/robwin/swagger2markup/Swagger2MarkupConfigTest.java +++ b/src/test/java/io/github/swagger2markup/Swagger2MarkupConfigTest.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup; +package io.github.swagger2markup; import com.google.common.collect.Ordering; import io.github.robwin.markup.builder.MarkupLanguage; diff --git a/src/test/java/io/github/robwin/swagger2markup/assertions/DiffUtils.java b/src/test/java/io/github/swagger2markup/assertions/DiffUtils.java similarity index 95% rename from src/test/java/io/github/robwin/swagger2markup/assertions/DiffUtils.java rename to src/test/java/io/github/swagger2markup/assertions/DiffUtils.java index 281b83c0..c290f9b6 100644 --- a/src/test/java/io/github/robwin/swagger2markup/assertions/DiffUtils.java +++ b/src/test/java/io/github/swagger2markup/assertions/DiffUtils.java @@ -16,8 +16,9 @@ * * */ -package io.github.robwin.swagger2markup.assertions; +package io.github.swagger2markup.assertions; +import io.github.robwin.diff.DiffAssertions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/test/java/io/github/robwin/swagger2markup/spi/MySwaggerModelExtension.java b/src/test/java/io/github/swagger2markup/spi/MySwaggerModelExtension.java similarity index 95% rename from src/test/java/io/github/robwin/swagger2markup/spi/MySwaggerModelExtension.java rename to src/test/java/io/github/swagger2markup/spi/MySwaggerModelExtension.java index f8c79c5d..46b87168 100644 --- a/src/test/java/io/github/robwin/swagger2markup/spi/MySwaggerModelExtension.java +++ b/src/test/java/io/github/swagger2markup/spi/MySwaggerModelExtension.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup.spi; +package io.github.swagger2markup.spi; import io.swagger.models.Swagger; diff --git a/src/test/java/io/github/robwin/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java b/src/test/java/io/github/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java similarity index 79% rename from src/test/java/io/github/robwin/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java rename to src/test/java/io/github/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java index 50188d26..fe9c8eac 100644 --- a/src/test/java/io/github/robwin/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java +++ b/src/test/java/io/github/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java @@ -13,15 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.robwin.swagger2markup.spi; +package io.github.swagger2markup.spi; -import io.github.robwin.swagger2markup.Swagger2MarkupExtensionRegistry; -import io.github.robwin.swagger2markup.internal.extensions.DynamicDefinitionsDocumentExtension; -import io.github.robwin.swagger2markup.internal.extensions.DynamicPathsDocumentExtension; +import io.github.swagger2markup.Swagger2MarkupExtensionRegistry; import io.swagger.models.Swagger; import org.junit.Test; -import java.nio.file.Paths; import java.util.Arrays; import java.util.List; @@ -35,8 +32,6 @@ public class Swagger2MarkupExtensionRegistryTest { Swagger2MarkupExtensionRegistry.Builder registryBuilder = Swagger2MarkupExtensionRegistry.ofDefaults(); registryBuilder.withExtension(new MySwaggerModelExtension()); - registryBuilder.withExtension(new DynamicDefinitionsDocumentExtension(Paths.get("src/test/resources/docs/asciidoc/extensions"))); - registryBuilder.withExtension(new DynamicPathsDocumentExtension(Paths.get("src/test/resources/docs/asciidoc/extensions"))); try { registryBuilder.withExtension(new AbstractExtension() { From 533590656f825669e3f9eace02ff55c9e4d0b10e Mon Sep 17 00:00:00 2001 From: Robert Winkler Date: Mon, 14 Mar 2016 15:03:19 +0100 Subject: [PATCH 03/17] Fixes #110 Move Extensions into swagger2markup-extensions repo --- .../internal/extensions/ContentExtension.java | 98 -- .../extensions/DynamicContentExtension.java | 97 -- .../DynamicDefinitionsDocumentExtension.java | 100 -- .../DynamicOverviewDocumentExtension.java | 92 -- .../DynamicPathsDocumentExtension.java | 101 -- .../DynamicSecurityDocumentExtension.java | 100 -- .../internal/extensions/SchemaExtension.java | 168 --- .../extensions/SpringRestDocsExtension.java | 150 --- .../Pet/definition-end-example.adoc | 3 - .../docs/asciidoc/extensions/Pet/schema.xsd | 2 - .../updatePet/operation-end-example.adoc | 11 - .../extensions/Pet/definition-end-example.md | 3 - .../updatePet/operation-end-example.md | 11 - .../spring_rest_docs/definitions.adoc | 69 -- .../asciidoc/spring_rest_docs/overview.adoc | 38 - .../asciidoc/spring_rest_docs/paths.adoc | 1032 ----------------- .../asciidoc/spring_rest_docs/security.adoc | 23 - 17 files changed, 2098 deletions(-) delete mode 100644 src/main/java/io/github/robwin/swagger2markup/internal/extensions/ContentExtension.java delete mode 100644 src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicContentExtension.java delete mode 100644 src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicDefinitionsDocumentExtension.java delete mode 100644 src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicOverviewDocumentExtension.java delete mode 100644 src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicPathsDocumentExtension.java delete mode 100644 src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicSecurityDocumentExtension.java delete mode 100644 src/main/java/io/github/robwin/swagger2markup/internal/extensions/SchemaExtension.java delete mode 100644 src/main/java/io/github/robwin/swagger2markup/internal/extensions/SpringRestDocsExtension.java delete mode 100644 src/test/resources/docs/asciidoc/extensions/Pet/definition-end-example.adoc delete mode 100644 src/test/resources/docs/asciidoc/extensions/Pet/schema.xsd delete mode 100644 src/test/resources/docs/asciidoc/extensions/updatePet/operation-end-example.adoc delete mode 100644 src/test/resources/docs/markdown/extensions/Pet/definition-end-example.md delete mode 100644 src/test/resources/docs/markdown/extensions/updatePet/operation-end-example.md delete mode 100644 src/test/resources/expected_results/asciidoc/spring_rest_docs/definitions.adoc delete mode 100644 src/test/resources/expected_results/asciidoc/spring_rest_docs/overview.adoc delete mode 100644 src/test/resources/expected_results/asciidoc/spring_rest_docs/paths.adoc delete mode 100644 src/test/resources/expected_results/asciidoc/spring_rest_docs/security.adoc diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/extensions/ContentExtension.java b/src/main/java/io/github/robwin/swagger2markup/internal/extensions/ContentExtension.java deleted file mode 100644 index 7f650cbf..00000000 --- a/src/main/java/io/github/robwin/swagger2markup/internal/extensions/ContentExtension.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 2016 Robert Winkler - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.github.robwin.swagger2markup.internal.extensions; - -import com.google.common.base.Optional; -import io.github.robwin.swagger2markup.Swagger2MarkupConverter; -import io.github.robwin.swagger2markup.spi.ContentContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.FileReader; -import java.io.IOException; -import java.io.Reader; -import java.net.URI; -import java.nio.file.Files; -import java.nio.file.Path; - -class ContentExtension { - - private static final Logger logger = LoggerFactory.getLogger(ContentExtension.class); - - protected final Swagger2MarkupConverter.Context globalContext; - protected final ContentContext contentContext; - - - ContentExtension(Swagger2MarkupConverter.Context globalContext, ContentContext contentContext) { - this.globalContext = globalContext; - this.contentContext = contentContext; - } - - /** - * Reads contents from a file - * - * @param contentPath content file path - * @return content reader - */ - protected Optional readContentPath(Path contentPath) { - - if (Files.isReadable(contentPath)) { - if (logger.isInfoEnabled()) { - logger.info("Content file {} processed", contentPath); - } - try { - Reader contentReader = new FileReader(contentPath.toFile()); - - return Optional.of(contentReader); - } catch (IOException e) { - if (logger.isWarnEnabled()) { - logger.warn("Failed to read content file {} > {}", contentPath, e.getMessage()); - } - } - } else { - if (logger.isDebugEnabled()) { - logger.debug("Failed to read content file {}", contentPath); - } - } - - return Optional.absent(); - } - - /** - * Reads content from an Uri - * - * @param contentUri content file URI - * @return content reader - */ - protected Optional readContentUri(URI contentUri) { - try { - Reader reader = io.github.robwin.swagger2markup.internal.utils.IOUtils.uriReader(contentUri); - - if (logger.isInfoEnabled()) { - logger.info("Content URI {} processed", contentUri); - } - - return Optional.of(reader); - } catch (IOException e) { - if (logger.isDebugEnabled()) { - logger.debug("Failed to read content URI {} > {}", contentUri, e.getMessage()); - } - } - - return Optional.absent(); - } -} diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicContentExtension.java b/src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicContentExtension.java deleted file mode 100644 index 473b6cb7..00000000 --- a/src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicContentExtension.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2016 Robert Winkler - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.github.robwin.swagger2markup.internal.extensions; - -import com.google.common.base.Function; -import com.google.common.base.Optional; -import com.google.common.collect.Collections2; -import com.google.common.collect.Lists; -import com.google.common.collect.Ordering; -import io.github.robwin.swagger2markup.Swagger2MarkupConverter; -import io.github.robwin.swagger2markup.spi.ContentContext; -import org.apache.commons.io.FilenameUtils; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.io.Reader; -import java.nio.file.DirectoryStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -class DynamicContentExtension extends ContentExtension { - - private static final Logger logger = LoggerFactory.getLogger(DynamicContentExtension.class); - - DynamicContentExtension(Swagger2MarkupConverter.Context globalContext, ContentContext contentContext) { - super(globalContext, contentContext); - } - - /** - * Builds extension sections - * - * @param contentPath the path where the content files reside - * @param prefix extension file prefix - * @param levelOffset import markup level offset - */ - public void extensionsSection(Path contentPath, final String prefix, int levelOffset) { - final Collection filenameExtensions = Collections2.transform(globalContext.getConfig().getMarkupLanguage().getFileNameExtensions(), new Function() { - public String apply(String input) { - return StringUtils.stripStart(input, "."); - } - }); - - DirectoryStream.Filter filter = new DirectoryStream.Filter() { - @Override - public boolean accept(Path entry) throws IOException { - String fileName = entry.getFileName().toString(); - return fileName.startsWith(prefix) && FilenameUtils.isExtension(fileName, filenameExtensions); - } - }; - - try (DirectoryStream extensionFiles = Files.newDirectoryStream(contentPath, filter)) { - - if (extensionFiles != null) { - List extensions = Lists.newArrayList(extensionFiles); - Collections.sort(extensions, Ordering.natural()); - - for (Path extension : extensions) { - Optional extensionContent = readContentPath(extension); - - if (extensionContent.isPresent()) { - try { - contentContext.getMarkupDocBuilder().importMarkup(extensionContent.get(), levelOffset); - } catch (IOException e) { - throw new RuntimeException(String.format("Failed to read extension file %s", extension), e); - } finally { - extensionContent.get().close(); - } - } - } - } - } catch (IOException e) { - if (logger.isDebugEnabled()) - logger.debug("Failed to read extension files from directory {}", contentPath); - - } - } - -} diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicDefinitionsDocumentExtension.java b/src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicDefinitionsDocumentExtension.java deleted file mode 100644 index c0d391dc..00000000 --- a/src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicDefinitionsDocumentExtension.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright 2016 Robert Winkler - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.github.robwin.swagger2markup.internal.extensions; - -import io.github.robwin.swagger2markup.Swagger2MarkupConverter; -import io.github.robwin.swagger2markup.internal.utils.IOUtils; -import io.github.robwin.swagger2markup.spi.DefinitionsDocumentExtension; -import org.apache.commons.lang3.Validate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.file.Path; -import java.nio.file.Paths; - -/** - * Dynamically search for markup files in {@code contentPath} to append in Definitions, with the format :
- * - {@code document-before-*.} : import before Definitions document with levelOffset = 0
- * - {@code document-begin-*.} : import just after Definitions document main title with levelOffset = 1
- * - {@code document-end-*.} : import at the end of Definitions document with levelOffset = 1
- * - {@code definition-begin-*.} : import just after each definition title with levelOffset = 2
- * - {@code definition-end-*.} : import at the end of each definition with levelOffset = 2
- *

- * Markup files are appended in the natural order of their names, for each category. - */ -public final class DynamicDefinitionsDocumentExtension extends DefinitionsDocumentExtension { - - private static final Logger logger = LoggerFactory.getLogger(DynamicDefinitionsDocumentExtension.class); - - protected Path contentPath; - - public DynamicDefinitionsDocumentExtension(Path contentPath) { - super(); - - Validate.notNull(contentPath); - this.contentPath = contentPath; - } - - public DynamicDefinitionsDocumentExtension() { - super(); - } - - @Override - public void init(Swagger2MarkupConverter.Context globalContext) { - if (contentPath == null) { - if (globalContext.getSwaggerLocation() == null || !globalContext.getSwaggerLocation().getScheme().equals("file")) { - if (logger.isWarnEnabled()) - logger.warn("Disable DynamicDefinitionsContentExtension > Can't set default contentPath from swaggerLocation. You have to explicitly configure the content path."); - } else { - contentPath = Paths.get(globalContext.getSwaggerLocation()).getParent(); - } - } - } - - @Override - public void apply(Context context) { - Validate.notNull(context); - - if (contentPath != null) { - DynamicContentExtension dynamicContent = new DynamicContentExtension(globalContext, context); - DynamicDefinitionsDocumentExtension.Position position = context.getPosition(); - switch (position) { - case DOCUMENT_BEFORE: - dynamicContent.extensionsSection(contentPath, contentPrefix(position), levelOffset(context)); - break; - case DOCUMENT_BEGIN: - dynamicContent.extensionsSection(contentPath, contentPrefix(position), levelOffset(context)); - break; - case DOCUMENT_END: - dynamicContent.extensionsSection(contentPath, contentPrefix(position), levelOffset(context)); - break; - case DEFINITION_BEGIN: - dynamicContent.extensionsSection(contentPath.resolve(Paths.get(IOUtils.normalizeName(context.getDefinitionName().get()))), contentPrefix(position), levelOffset(context)); - break; - case DEFINITION_END: - dynamicContent.extensionsSection(contentPath.resolve(Paths.get(IOUtils.normalizeName(context.getDefinitionName().get()))), contentPrefix(position), levelOffset(context)); - break; - default: - throw new RuntimeException(String.format("Unknown position '%s'", position)); - } - } - } - - public String contentPrefix(Position position) { - return position.name().toLowerCase().replace('_', '-'); - } -} diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicOverviewDocumentExtension.java b/src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicOverviewDocumentExtension.java deleted file mode 100644 index 1f80261b..00000000 --- a/src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicOverviewDocumentExtension.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright 2016 Robert Winkler - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.github.robwin.swagger2markup.internal.extensions; - -import io.github.robwin.swagger2markup.Swagger2MarkupConverter; -import io.github.robwin.swagger2markup.spi.OverviewDocumentExtension; -import org.apache.commons.lang3.Validate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.file.Path; -import java.nio.file.Paths; - -/** - * Dynamically search for markup files in {@code contentPath} to append to Overview, with the format :
- * - {@code document-before-*.} : import before Overview document with levelOffset = 0
- * - {@code document-begin-*.} : import just after Overview document main title with levelOffset = 1
- * - {@code document-end-*.} : import at the end of Overview document with levelOffset = 1
- *

- * Markup files are appended in the natural order of their names, for each category. - */ -public final class DynamicOverviewDocumentExtension extends OverviewDocumentExtension { - - private static final Logger logger = LoggerFactory.getLogger(DynamicOverviewDocumentExtension.class); - - protected Path contentPath; - - public DynamicOverviewDocumentExtension() { - super(); - } - - public DynamicOverviewDocumentExtension(Path contentPath) { - super(); - - Validate.notNull(contentPath); - this.contentPath = contentPath; - } - - @Override - public void init(Swagger2MarkupConverter.Context globalContext) { - if (contentPath == null) { - if (globalContext.getSwaggerLocation() == null || !globalContext.getSwaggerLocation().getScheme().equals("file")) { - if (logger.isWarnEnabled()) - logger.warn("Disable > DynamicOverviewContentExtension > Can't set default contentPath from swaggerLocation. You have to explicitly configure the content path."); - } else { - contentPath = Paths.get(globalContext.getSwaggerLocation()).getParent(); - } - } - } - - @Override - public void apply(Context context) { - Validate.notNull(context); - - if (contentPath != null) { - DynamicContentExtension dynamicContent = new DynamicContentExtension(globalContext, context); - OverviewDocumentExtension.Position position = context.getPosition(); - switch (position) { - case DOCUMENT_BEFORE: - dynamicContent.extensionsSection(contentPath, contentPrefix(position), levelOffset(context)); - break; - case DOCUMENT_BEGIN: - dynamicContent.extensionsSection(contentPath, contentPrefix(position), levelOffset(context)); - break; - case DOCUMENT_END: - dynamicContent.extensionsSection(contentPath, contentPrefix(position), levelOffset(context)); - break; - default: - throw new RuntimeException(String.format("Unknown position '%s'", position)); - } - } - } - - private String contentPrefix(Position position) { - return position.name().toLowerCase().replace('_', '-'); - } - -} diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicPathsDocumentExtension.java b/src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicPathsDocumentExtension.java deleted file mode 100644 index 57378827..00000000 --- a/src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicPathsDocumentExtension.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright 2016 Robert Winkler - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.github.robwin.swagger2markup.internal.extensions; - -import io.github.robwin.swagger2markup.Swagger2MarkupConverter; -import io.github.robwin.swagger2markup.internal.utils.IOUtils; -import io.github.robwin.swagger2markup.spi.PathsDocumentExtension; -import org.apache.commons.lang3.Validate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.file.Path; -import java.nio.file.Paths; - -/** - * Dynamically search for markup files in {@code contentPath} to append to Operations, with the format :
- * - {@code document-before-*.} : import before Paths document with levelOffset = 0
- * - {@code document-begin-*.} : import just after Paths document main title with levelOffset = 1
- * - {@code document-end-*.} : import at the end of Paths document with levelOffset = 1
- * - {@code operation-begin-*.} : import just after each operation title with levelOffset = 2(GroupBy.AS_IS) | 3(GroupBy.TAGS)
- * - {@code operation-end-*.} : import at the end of each operation with levelOffset = 2(GroupBy.AS_IS) | 3(GroupBy.TAGS)
- *

- * Markup files are appended in the natural order of their names, for each category. - */ -public final class DynamicPathsDocumentExtension extends PathsDocumentExtension { - - private static final Logger logger = LoggerFactory.getLogger(DynamicPathsDocumentExtension.class); - - protected Path contentPath; - - public DynamicPathsDocumentExtension() { - super(); - } - - public DynamicPathsDocumentExtension(Path contentPath) { - super(); - - Validate.notNull(contentPath); - this.contentPath = contentPath; - } - - @Override - public void init(Swagger2MarkupConverter.Context globalContext) { - if (contentPath == null) { - if (globalContext.getSwaggerLocation() == null || !globalContext.getSwaggerLocation().getScheme().equals("file")) { - if (logger.isWarnEnabled()) - logger.warn("Disable DynamicOperationsContentExtension > Can't set default contentPath from swaggerLocation. You have to explicitly configure the content path."); - } else { - contentPath = Paths.get(globalContext.getSwaggerLocation()).getParent(); - } - } - } - - @Override - public void apply(Context context) { - Validate.notNull(context); - - if (contentPath != null) { - DynamicContentExtension dynamicContent = new DynamicContentExtension(globalContext, context); - PathsDocumentExtension.Position position = context.getPosition(); - switch (position) { - case DOCUMENT_BEFORE: - dynamicContent.extensionsSection(contentPath, contentPrefix(position), levelOffset(context)); - break; - case DOCUMENT_BEGIN: - dynamicContent.extensionsSection(contentPath, contentPrefix(position), levelOffset(context)); - break; - case DOCUMENT_END: - dynamicContent.extensionsSection(contentPath, contentPrefix(position), levelOffset(context)); - break; - case OPERATION_BEGIN: - dynamicContent.extensionsSection(contentPath.resolve(IOUtils.normalizeName(context.getOperation().get().getId())), contentPrefix(position), levelOffset(context)); - break; - case OPERATION_END: - dynamicContent.extensionsSection(contentPath.resolve(IOUtils.normalizeName(context.getOperation().get().getId())), contentPrefix(position), levelOffset(context)); - break; - default: - throw new RuntimeException(String.format("Unknown position '%s'", position)); - } - } - } - - private String contentPrefix(Position position) { - return position.name().toLowerCase().replace('_', '-'); - } - -} diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicSecurityDocumentExtension.java b/src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicSecurityDocumentExtension.java deleted file mode 100644 index 47fe6598..00000000 --- a/src/main/java/io/github/robwin/swagger2markup/internal/extensions/DynamicSecurityDocumentExtension.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright 2016 Robert Winkler - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.github.robwin.swagger2markup.internal.extensions; - -import io.github.robwin.swagger2markup.Swagger2MarkupConverter; -import io.github.robwin.swagger2markup.internal.utils.IOUtils; -import io.github.robwin.swagger2markup.spi.SecurityDocumentExtension; -import org.apache.commons.lang3.Validate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.nio.file.Path; -import java.nio.file.Paths; - -/** - * Dynamically search for markup files in {@code contentPath} to append to Overview, with the format :
- * - {@code document-before-*.} : import before Overview document with levelOffset = 0
- * - {@code document-begin-*.} : import just after Overview document main title with levelOffset = 1
- * - {@code document-end-*.} : import at the end of Overview document with levelOffset = 1
- * - {@code definition-begin-*.} : import just after each definition title with levelOffset = 2
- * - {@code definition-end-*.} : import at the end of each definition with levelOffset = 2
- *

- * Markup files are appended in the natural order of their names, for each category. - */ -public final class DynamicSecurityDocumentExtension extends SecurityDocumentExtension { - - private static final Logger logger = LoggerFactory.getLogger(DynamicSecurityDocumentExtension.class); - - protected Path contentPath; - - public DynamicSecurityDocumentExtension() { - super(); - } - - public DynamicSecurityDocumentExtension(Path contentPath) { - super(); - - Validate.notNull(contentPath); - this.contentPath = contentPath; - } - - @Override - public void init(Swagger2MarkupConverter.Context globalContext) { - if (contentPath == null) { - if (globalContext.getSwaggerLocation() == null || !globalContext.getSwaggerLocation().getScheme().equals("file")) { - if (logger.isWarnEnabled()) - logger.warn("Disable > DynamicSecurityContentExtension > Can't set default contentPath from swaggerLocation. You have to explicitly configure the content path."); - } else { - contentPath = Paths.get(globalContext.getSwaggerLocation()).getParent(); - } - } - } - - @Override - public void apply(Context context) { - Validate.notNull(context); - - if (contentPath != null) { - DynamicContentExtension dynamicContent = new DynamicContentExtension(globalContext, context); - SecurityDocumentExtension.Position position = context.getPosition(); - switch (position) { - case DOCUMENT_BEFORE: - dynamicContent.extensionsSection(contentPath, contentPrefix(position), levelOffset(context)); - break; - case DOCUMENT_BEGIN: - dynamicContent.extensionsSection(contentPath, contentPrefix(position), levelOffset(context)); - break; - case DOCUMENT_END: - dynamicContent.extensionsSection(contentPath, contentPrefix(position), levelOffset(context)); - break; - case DEFINITION_BEGIN: - dynamicContent.extensionsSection(contentPath.resolve(IOUtils.normalizeName(context.getDefinitionName().get())), contentPrefix(position), levelOffset(context)); - break; - case DEFINITION_END: - dynamicContent.extensionsSection(contentPath.resolve(IOUtils.normalizeName(context.getDefinitionName().get())), contentPrefix(position), levelOffset(context)); - break; - default: - throw new RuntimeException(String.format("Unknown position '%s'", position)); - } - } - } - - private String contentPrefix(Position position) { - return position.name().toLowerCase().replace('_', '-'); - } -} diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/extensions/SchemaExtension.java b/src/main/java/io/github/robwin/swagger2markup/internal/extensions/SchemaExtension.java deleted file mode 100644 index 7687f200..00000000 --- a/src/main/java/io/github/robwin/swagger2markup/internal/extensions/SchemaExtension.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright 2016 Robert Winkler - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.github.robwin.swagger2markup.internal.extensions; - -import com.google.common.base.Optional; -import io.github.robwin.swagger2markup.Swagger2MarkupConverter; -import io.github.robwin.swagger2markup.spi.DefinitionsDocumentExtension; -import io.github.robwin.swagger2markup.internal.utils.IOUtils; -import org.apache.commons.lang3.Validate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.io.Reader; -import java.net.URI; -import java.util.ArrayList; -import java.util.List; - -/** - * Add external schemas to content.
- * Supported formats are : - *

    - *
  • XML Schema (.xsd)
  • - *
  • JSON Schema (.json)
  • - *
- */ -public final class SchemaExtension extends DefinitionsDocumentExtension { - - private static final Logger logger = LoggerFactory.getLogger(SchemaExtension.class); - - private static final List DEFAULT_SCHEMAS = new ArrayList() {{ - add(new SchemaMetadata("JSON Schema", "json", "json")); - add(new SchemaMetadata("XML Schema", "xsd", "xml")); - }}; - - protected List schemas = new ArrayList<>(); - - protected URI schemaBaseUri; - - public SchemaExtension(URI schemaBaseUri) { - super(); - - Validate.notNull(schemaBaseUri); - this.schemaBaseUri = schemaBaseUri; - } - - public SchemaExtension() { - super(); - } - - public SchemaExtension withDefaultSchemas() { - schemas.addAll(DEFAULT_SCHEMAS); - return this; - } - - public SchemaExtension withSchemas(List schemas) { - schemas.addAll(schemas); - return this; - } - - @Override - public void init(Swagger2MarkupConverter.Context globalContext) { - if (schemaBaseUri == null) { - if (globalContext.getSwaggerLocation() == null) { - if (logger.isWarnEnabled()) - logger.warn("Disable SchemaExtension > Can't set default schemaBaseUri from swaggerLocation. You have to explicitly configure the schemaBaseUri."); - } else { - schemaBaseUri = IOUtils.uriParent(globalContext.getSwaggerLocation()); - } - } - } - - @Override - public void apply(Context context) { - Validate.notNull(context); - - if (schemaBaseUri != null) { - switch (context.getPosition()) { - case DOCUMENT_BEFORE: - case DOCUMENT_BEGIN: - case DOCUMENT_END: - case DEFINITION_BEGIN: - break; - case DEFINITION_END: - for (SchemaMetadata schema : DEFAULT_SCHEMAS) { - schemaSection(context, schema, levelOffset(context)); - } - break; - default: - throw new RuntimeException(String.format("Unknown position '%s'", context.getPosition())); - } - } - } - - /** - * Builds snippet URI for the given {@code definitionName} and {@code schema}.
- * Default implementation use {@code /normalizeName()/schema.}.
- * You can override this method to configure your own folder normalization. - * - * @param context current context - * @param definitionName current definition name - * @return subdirectory normalized name - */ - public URI definitionSchemaUri(Context context, String definitionName, SchemaMetadata schema) { - return schemaBaseUri.resolve(IOUtils.normalizeName(definitionName) + "/").resolve("schema" + (schema.extension != null ? "." + schema.extension : "")); - } - - private void schemaSection(Context context, SchemaMetadata schema, int levelOffset) { - ContentExtension contentExtension = new ContentExtension(globalContext, context); - URI schemaUri = definitionSchemaUri(context, context.getDefinitionName().get(), schema); - - try { - Optional extensionContent = contentExtension.readContentUri(schemaUri); - - if (extensionContent.isPresent()) { - try { - context.getMarkupDocBuilder().sectionTitleLevel(1 + levelOffset, schema.title); - context.getMarkupDocBuilder().listing(org.apache.commons.io.IOUtils.toString(extensionContent.get()).trim(), schema.language); - } catch (IOException e) { - throw new RuntimeException(String.format("Failed to read schema URI : %s", schemaUri), e); - } finally { - extensionContent.get().close(); - } - } - } catch (IOException e) { - if (logger.isDebugEnabled()) - logger.debug("Failed to read schema URI {}", schemaUri); - } - } - - public static class SchemaMetadata { - /** - * Schema title - */ - public String title; - - /** - * Schema file extension, without dot (e.g.: xsd).
- * Set to null if there's no extension - */ - public String extension; - - /** - * Schema content language (e.g.: xml) - */ - public String language; - - public SchemaMetadata(String title, String extension, String language) { - this.title = title; - this.extension = extension; - this.language = language; - } - } -} diff --git a/src/main/java/io/github/robwin/swagger2markup/internal/extensions/SpringRestDocsExtension.java b/src/main/java/io/github/robwin/swagger2markup/internal/extensions/SpringRestDocsExtension.java deleted file mode 100644 index e99fe9fe..00000000 --- a/src/main/java/io/github/robwin/swagger2markup/internal/extensions/SpringRestDocsExtension.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright 2016 Robert Winkler - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.github.robwin.swagger2markup.internal.extensions; - -import com.google.common.base.Optional; -import com.google.common.base.Throwables; -import io.github.robwin.swagger2markup.internal.model.PathOperation; -import io.github.robwin.swagger2markup.Swagger2MarkupConverter; -import io.github.robwin.swagger2markup.spi.PathsDocumentExtension; -import io.github.robwin.swagger2markup.internal.utils.IOUtils; -import org.apache.commons.lang3.Validate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.io.Reader; -import java.net.URI; -import java.util.LinkedHashMap; -import java.util.Map; - -/** - * Append Spring Rest docs generated snippets to Operations content. - */ -public final class SpringRestDocsExtension extends PathsDocumentExtension { - - private static final Logger logger = LoggerFactory.getLogger(SpringRestDocsExtension.class); - - private static final Map DEFAULT_SNIPPETS = new LinkedHashMap() {{ - put("http-request", "HTTP request"); - put("http-response", "HTTP response"); - put("curl-request", "Curl request"); - }}; - - protected URI snippetBaseUri; - protected Map snippets = new LinkedHashMap<>(); - - /** - * Instantiate extension - * @param snippetBaseUri base URI where are snippets are stored - */ - public SpringRestDocsExtension(URI snippetBaseUri) { - super(); - - Validate.notNull(snippetBaseUri); - this.snippetBaseUri = snippetBaseUri; - } - - public SpringRestDocsExtension() { - super(); - } - - @Override - public void init(Swagger2MarkupConverter.Context globalContext) { - if (snippetBaseUri == null) { - if (globalContext.getSwaggerLocation() == null) { - if (logger.isWarnEnabled()) - logger.warn("Disable SpringRestDocsExtension > Can't set default snippetBaseUri from swaggerLocation. You have to explicitly configure the snippetBaseUri."); - } else { - snippetBaseUri = IOUtils.uriParent(globalContext.getSwaggerLocation()); - } - } - } - - /** - * Add SpringRestDocs default snippets to list - * @return this instance - */ - public SpringRestDocsExtension withDefaultSnippets() { - snippets.putAll(DEFAULT_SNIPPETS); - - return this; - } - - /** - * Add an explicit list of snippets to display. - * @param snippets snippets to add. key is snippet name (without extension, e.g.: 'http-request'), value is a custom section title for the snippet. - * @return this instance - */ - public SpringRestDocsExtension withExplicitSnippets(Map snippets) { - this.snippets.putAll(snippets); - - return this; - } - - /** - * Builds snippet URI for the given {@code operation} and {@code snippetName}.
- * Default implementation use {@code /)>/.}.
- * You can override this method to configure your own folder normalization. - * - * @param context current context - * @param operation current operation - * @return subdirectory normalized name - */ - public URI operationSnippetUri(Context context, PathOperation operation, String snippetName) { - return snippetBaseUri.resolve(IOUtils.normalizeName(operation.getId()) + "/").resolve(context.getMarkupDocBuilder().addFileExtension(snippetName)); - } - - @Override - public void apply(Context context) { - Validate.notNull(context); - - switch (context.getPosition()) { - case OPERATION_END: - snippets(context); - break; - } - } - - public void snippets(Context context) { - for (Map.Entry snippets : this.snippets.entrySet()) { - snippetSection(context, snippets.getKey(), snippets.getValue()); - } - } - - public void snippetSection(Context context, String snippetName, String title) { - ContentExtension content = new ContentExtension(globalContext, context); - - URI snippetUri = operationSnippetUri(context, context.getOperation().get(), snippetName); - Optional snippetContent = content.readContentUri(snippetUri); - - if (snippetContent.isPresent()) { - try { - context.getMarkupDocBuilder().sectionTitleLevel(1 + levelOffset(context), title); - context.getMarkupDocBuilder().importMarkup(snippetContent.get(), levelOffset(context) + 1); - } catch (IOException e) { - throw new RuntimeException(String.format("Failed to process snippet URI : %s", snippetUri), e); - } finally { - try { - snippetContent.get().close(); - } catch (IOException e) { - Throwables.propagate(e); - } - } - } - } -} diff --git a/src/test/resources/docs/asciidoc/extensions/Pet/definition-end-example.adoc b/src/test/resources/docs/asciidoc/extensions/Pet/definition-end-example.adoc deleted file mode 100644 index 0b2ca411..00000000 --- a/src/test/resources/docs/asciidoc/extensions/Pet/definition-end-example.adoc +++ /dev/null @@ -1,3 +0,0 @@ -== Pet extension - -This is an extension for this definition \ No newline at end of file diff --git a/src/test/resources/docs/asciidoc/extensions/Pet/schema.xsd b/src/test/resources/docs/asciidoc/extensions/Pet/schema.xsd deleted file mode 100644 index 4ca7bb83..00000000 --- a/src/test/resources/docs/asciidoc/extensions/Pet/schema.xsd +++ /dev/null @@ -1,2 +0,0 @@ - -This is an XML Schema \ No newline at end of file diff --git a/src/test/resources/docs/asciidoc/extensions/updatePet/operation-end-example.adoc b/src/test/resources/docs/asciidoc/extensions/updatePet/operation-end-example.adoc deleted file mode 100644 index daa8c760..00000000 --- a/src/test/resources/docs/asciidoc/extensions/updatePet/operation-end-example.adoc +++ /dev/null @@ -1,11 +0,0 @@ -== Pet update request extension - ----- -Request ----- - -== Pet update response extension - ----- -Response ----- \ No newline at end of file diff --git a/src/test/resources/docs/markdown/extensions/Pet/definition-end-example.md b/src/test/resources/docs/markdown/extensions/Pet/definition-end-example.md deleted file mode 100644 index 8849bbdd..00000000 --- a/src/test/resources/docs/markdown/extensions/Pet/definition-end-example.md +++ /dev/null @@ -1,3 +0,0 @@ -## Pet extension - -This is an extension for this definition \ No newline at end of file diff --git a/src/test/resources/docs/markdown/extensions/updatePet/operation-end-example.md b/src/test/resources/docs/markdown/extensions/updatePet/operation-end-example.md deleted file mode 100644 index a49ef4d5..00000000 --- a/src/test/resources/docs/markdown/extensions/updatePet/operation-end-example.md +++ /dev/null @@ -1,11 +0,0 @@ -## Pet update request extension - -``` -Request -``` - -## Pet update response extension - -``` -Response -``` \ No newline at end of file diff --git a/src/test/resources/expected_results/asciidoc/spring_rest_docs/definitions.adoc b/src/test/resources/expected_results/asciidoc/spring_rest_docs/definitions.adoc deleted file mode 100644 index e8b03ced..00000000 --- a/src/test/resources/expected_results/asciidoc/spring_rest_docs/definitions.adoc +++ /dev/null @@ -1,69 +0,0 @@ - -[[_definitions]] -== Definitions - -=== Category - -[options="header", cols=".^1h,.^6,.^1,.^1,.^1,.^1"] -|=== -|Name|Description|Required|Schema|Default|Example -|id||false|integer(int64)|| -|name||false|string|| -|=== - - -=== Order - -[options="header", cols=".^1h,.^6,.^1,.^1,.^1,.^1"] -|=== -|Name|Description|Required|Schema|Default|Example -|complete||false|boolean|| -|id||false|integer(int64)|| -|petId||false|integer(int64)|| -|quantity||false|integer(int32)|| -|shipDate||false|string(date-time)|| -|status|Order Status|false|string|| -|=== - - -=== Pet - -[options="header", cols=".^1h,.^6,.^1,.^1,.^1,.^1"] -|=== -|Name|Description|Required|Schema|Default|Example -|category||false|<<_category,Category>>|| -|id||false|integer(int64)|| -|name||true|string||"doggie" -|photoUrls||true|string array|| -|status|pet status in the store|false|string|| -|tags||false|<<_tag,Tag>> array|| -|=== - - -=== Tag - -[options="header", cols=".^1h,.^6,.^1,.^1,.^1,.^1"] -|=== -|Name|Description|Required|Schema|Default|Example -|id||false|integer(int64)|| -|name||false|string|| -|=== - - -=== User - -[options="header", cols=".^1h,.^6,.^1,.^1,.^1,.^1"] -|=== -|Name|Description|Required|Schema|Default|Example -|email||false|string|| -|firstName||false|string|| -|id||false|integer(int64)|| -|lastName||false|string|| -|password||false|string|| -|phone||false|string|| -|userStatus|User Status|false|integer(int32)|| -|username||false|string|| -|=== - - - diff --git a/src/test/resources/expected_results/asciidoc/spring_rest_docs/overview.adoc b/src/test/resources/expected_results/asciidoc/spring_rest_docs/overview.adoc deleted file mode 100644 index 24346d59..00000000 --- a/src/test/resources/expected_results/asciidoc/spring_rest_docs/overview.adoc +++ /dev/null @@ -1,38 +0,0 @@ -= Swagger Petstore - - -[[_overview]] -== Overview -[%hardbreaks] -This is a sample server Petstore server. - -[Learn about Swagger](http://swagger.io) or join the IRC channel `#swagger` on irc.freenode.net. - -For this sample, you can use the api key `special-key` to test the authorization filters - - - -=== Version information -Version : 1.0.0 - -=== Contact information -Contact : apiteam@swagger.io - -=== License information -License : Apache 2.0 -License URL : http://www.apache.org/licenses/LICENSE-2.0.html -Terms of service : http://helloreverb.com/terms/ - -=== URI scheme -Host : petstore.swagger.io -BasePath : /v2 -Schemes : HTTP - -=== Tags - -* pet : Pet resource -* store : Store resource -* user : User resource - - - diff --git a/src/test/resources/expected_results/asciidoc/spring_rest_docs/paths.adoc b/src/test/resources/expected_results/asciidoc/spring_rest_docs/paths.adoc deleted file mode 100644 index fb19e360..00000000 --- a/src/test/resources/expected_results/asciidoc/spring_rest_docs/paths.adoc +++ /dev/null @@ -1,1032 +0,0 @@ - -[[_paths]] -== Paths - -=== Add a new pet to the store ----- -POST /pets ----- - - -==== Parameters - -[options="header", cols=".^1h,.^1h,.^6,.^1,.^1,.^1"] -|=== -|Type|Name|Description|Required|Schema|Default -|Body|body|Pet object that needs to be added to the store|false|<<_pet,Pet>>| -|=== - - -==== Responses - -===== HTTP Code 405 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|405|Invalid input|No Content -|=== - - -==== Consumes - -* application/json -* application/xml - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* pet - - -==== Security - -[options="header", cols=".^1,.^1h,.^6"] -|=== -|Type|Name|Scopes -|oauth2|<<_petstore_auth,petstore_auth>>|write_pets,read_pets -|=== - - -==== HTTP request - - -[source,http] ----- -POST /api/pet/ HTTP/1.1 -Content-Type: application/json -Content-Length: 111 - -{"id":1,"category":{"id":1,"name":"Hund"},"name":"Wuffy","photoUrls":[],"tags":[],"status":null,"identifier":1} ----- - - - -==== HTTP response - - -[source,http] ----- -HTTP/1.1 200 OK -Content-Type: application/json -Content-Length: 7 - -SUCCESS ----- - - - -==== Curl request - -===== curl-request - -[source,bash] ----- -$ curl 'http://localhost:8080/api/pet/' -i -X POST -H 'Content-Type: application/json' -H 'Content-Length: 111' -d '{"id":1,"category":{"id":1,"name":"Hund"},"name":"Wuffy","photoUrls":[],"tags":[],"status":null,"identifier":1}' ----- - - - -=== Update an existing pet ----- -PUT /pets ----- - - -==== Parameters - -[options="header", cols=".^1h,.^1h,.^6,.^1,.^1,.^1"] -|=== -|Type|Name|Description|Required|Schema|Default -|Body|body|Pet object that needs to be added to the store|false|<<_pet,Pet>>| -|=== - - -==== Responses - -===== HTTP Code 400 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|400|Invalid ID supplied|No Content -|=== - - -===== HTTP Code 404 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|404|Pet not found|No Content -|=== - - -===== HTTP Code 405 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|405|Validation exception|No Content -|=== - - -==== Consumes - -* application/json -* application/xml - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* pet - - -==== Security - -[options="header", cols=".^1,.^1h,.^6"] -|=== -|Type|Name|Scopes -|oauth2|<<_petstore_auth,petstore_auth>>|write_pets,read_pets -|=== - - -=== Finds Pets by status ----- -GET /pets/findByStatus ----- - - -==== Description -[%hardbreaks] -Multiple status values can be provided with comma seperated strings - - -==== Parameters - -[options="header", cols=".^1h,.^1h,.^6,.^1,.^1,.^1"] -|=== -|Type|Name|Description|Required|Schema|Default -|Query|status|Status values that need to be considered for filter|false|multi string array| -|=== - - -==== Responses - -===== HTTP Code 200 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|200|successful operation|<<_pet,Pet>> array -|=== - -*Headers* - -[options="header", cols=".^1h,.^3,.^1,.^1"] -|=== -|Name|Description|Schema|Default -|X-Rate-Limit-Limit|The number of allowed requests in the current period|integer| -|X-Rate-Limit-Remaining|The number of remaining requests in the current period|integer| -|X-Rate-Limit-Reset|The number of seconds left in the current period|integer| -|=== - - -===== HTTP Code 400 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|400|Invalid status value|No Content -|=== - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* pet - - -==== Security - -[options="header", cols=".^1,.^1h,.^6"] -|=== -|Type|Name|Scopes -|oauth2|<<_petstore_auth,petstore_auth>>|write_pets,read_pets -|=== - - -=== Finds Pets by tags ----- -GET /pets/findByTags ----- - - -==== Description -[%hardbreaks] -Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing. - - -==== Parameters - -[options="header", cols=".^1h,.^1h,.^6,.^1,.^1,.^1"] -|=== -|Type|Name|Description|Required|Schema|Default -|Query|tags|Tags to filter by|false|multi string array| -|=== - - -==== Responses - -===== HTTP Code 200 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|200|successful operation|<<_pet,Pet>> array -|=== - -*Headers* - -[options="header", cols=".^1h,.^3,.^1,.^1"] -|=== -|Name|Description|Schema|Default -|X-Rate-Limit-Limit|The number of allowed requests in the current period|integer| -|X-Rate-Limit-Remaining|The number of remaining requests in the current period|integer| -|X-Rate-Limit-Reset|The number of seconds left in the current period|integer| -|=== - - -===== HTTP Code 400 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|400|Invalid tag value|No Content -|=== - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* pet - - -==== Security - -[options="header", cols=".^1,.^1h,.^6"] -|=== -|Type|Name|Scopes -|oauth2|<<_petstore_auth,petstore_auth>>|write_pets,read_pets -|=== - - -=== Updates a pet in the store with form data ----- -POST /pets/{petId} ----- - - -==== Parameters - -[options="header", cols=".^1h,.^1h,.^6,.^1,.^1,.^1"] -|=== -|Type|Name|Description|Required|Schema|Default -|Path|petId|ID of pet that needs to be updated|true|string| -|FormData|name|Updated name of the pet|true|string| -|FormData|status|Updated status of the pet|true|string| -|=== - - -==== Responses - -===== HTTP Code 405 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|405|Invalid input|No Content -|=== - - -==== Consumes - -* application/x-www-form-urlencoded - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* pet - - -==== Security - -[options="header", cols=".^1,.^1h,.^6"] -|=== -|Type|Name|Scopes -|oauth2|<<_petstore_auth,petstore_auth>>|write_pets,read_pets -|=== - - -=== Find pet by ID ----- -GET /pets/{petId} ----- - - -==== Description -[%hardbreaks] -Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions - - -==== Parameters - -[options="header", cols=".^1h,.^1h,.^6,.^1,.^1,.^1"] -|=== -|Type|Name|Description|Required|Schema|Default -|Path|petId|ID of pet that needs to be fetched|true|integer(int64)| -|=== - - -==== Responses - -===== HTTP Code 200 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|200|successful operation|<<_pet,Pet>> -|=== - -*Headers* - -[options="header", cols=".^1h,.^3,.^1,.^1"] -|=== -|Name|Description|Schema|Default -|X-Rate-Limit-Limit|The number of allowed requests in the current period|integer| -|X-Rate-Limit-Remaining|The number of remaining requests in the current period|integer| -|X-Rate-Limit-Reset|The number of seconds left in the current period|integer| -|=== - - -===== HTTP Code 400 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|400|Invalid ID supplied|No Content -|=== - - -===== HTTP Code 404 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|404|Pet not found|No Content -|=== - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* pet - - -==== Security - -[options="header", cols=".^1,.^1h,.^6"] -|=== -|Type|Name|Scopes -|apiKey|<<_api_key,api_key>>| -|oauth2|<<_petstore_auth,petstore_auth>>|write_pets,read_pets -|=== - - -=== Deletes a pet ----- -DELETE /pets/{petId} ----- - - -==== Parameters - -[options="header", cols=".^1h,.^1h,.^6,.^1,.^1,.^1"] -|=== -|Type|Name|Description|Required|Schema|Default -|Header|api_key||true|string| -|Path|petId|Pet id to delete|true|integer(int64)| -|=== - - -==== Responses - -===== HTTP Code 400 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|400|Invalid pet value|No Content -|=== - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* pet - - -==== Security - -[options="header", cols=".^1,.^1h,.^6"] -|=== -|Type|Name|Scopes -|oauth2|<<_petstore_auth,petstore_auth>>|write_pets,read_pets -|=== - - -=== Place an order for a pet ----- -POST /stores/order ----- - - -==== Parameters - -[options="header", cols=".^1h,.^1h,.^6,.^1,.^1,.^1"] -|=== -|Type|Name|Description|Required|Schema|Default -|Body|body|order placed for purchasing the pet|false|<<_order,Order>>| -|=== - - -==== Responses - -===== HTTP Code 200 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|200|successful operation|<<_order,Order>> -|=== - -*Headers* - -[options="header", cols=".^1h,.^3,.^1,.^1"] -|=== -|Name|Description|Schema|Default -|X-Rate-Limit-Limit|The number of allowed requests in the current period|integer| -|X-Rate-Limit-Remaining|The number of remaining requests in the current period|integer| -|X-Rate-Limit-Reset|The number of seconds left in the current period|integer| -|=== - - -===== HTTP Code 400 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|400|Invalid Order|No Content -|=== - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* store - - -=== Find purchase order by ID ----- -GET /stores/order/{orderId} ----- - - -==== Description -[%hardbreaks] -For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions - - -==== Parameters - -[options="header", cols=".^1h,.^1h,.^6,.^1,.^1,.^1"] -|=== -|Type|Name|Description|Required|Schema|Default -|Path|orderId|ID of pet that needs to be fetched|true|string| -|=== - - -==== Responses - -===== HTTP Code 200 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|200|successful operation|<<_order,Order>> -|=== - -*Headers* - -[options="header", cols=".^1h,.^3,.^1,.^1"] -|=== -|Name|Description|Schema|Default -|X-Rate-Limit-Limit|The number of allowed requests in the current period|integer| -|X-Rate-Limit-Remaining|The number of remaining requests in the current period|integer| -|X-Rate-Limit-Reset|The number of seconds left in the current period|integer| -|=== - - -===== HTTP Code 400 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|400|Invalid ID supplied|No Content -|=== - - -===== HTTP Code 404 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|404|Order not found|No Content -|=== - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* store - - -=== Delete purchase order by ID ----- -DELETE /stores/order/{orderId} ----- - - -==== Description -[%hardbreaks] -For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors - - -==== Parameters - -[options="header", cols=".^1h,.^1h,.^6,.^1,.^1,.^1"] -|=== -|Type|Name|Description|Required|Schema|Default -|Path|orderId|ID of the order that needs to be deleted|true|string| -|=== - - -==== Responses - -===== HTTP Code 400 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|400|Invalid ID supplied|No Content -|=== - - -===== HTTP Code 404 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|404|Order not found|No Content -|=== - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* store - - -=== Create user ----- -POST /users ----- - - -==== Description -[%hardbreaks] -This can only be done by the logged in user. - - -==== Parameters - -[options="header", cols=".^1h,.^1h,.^6,.^1,.^1,.^1"] -|=== -|Type|Name|Description|Required|Schema|Default -|Body|body|Created user object|false|<<_user,User>>| -|=== - - -==== Responses - -===== HTTP Code default - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|default|successful operation|No Content -|=== - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* user - - -=== Creates list of users with given input array ----- -POST /users/createWithArray ----- - - -==== Parameters - -[options="header", cols=".^1h,.^1h,.^6,.^1,.^1,.^1"] -|=== -|Type|Name|Description|Required|Schema|Default -|Body|body|List of user object|false|<<_user,User>> array| -|=== - - -==== Responses - -===== HTTP Code default - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|default|successful operation|No Content -|=== - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* user - - -=== Creates list of users with given input array ----- -POST /users/createWithList ----- - - -==== Parameters - -[options="header", cols=".^1h,.^1h,.^6,.^1,.^1,.^1"] -|=== -|Type|Name|Description|Required|Schema|Default -|Body|body|List of user object|false|<<_user,User>> array| -|=== - - -==== Responses - -===== HTTP Code default - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|default|successful operation|No Content -|=== - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* user - - -=== Logs user into the system ----- -GET /users/login ----- - - -==== Parameters - -[options="header", cols=".^1h,.^1h,.^6,.^1,.^1,.^1"] -|=== -|Type|Name|Description|Required|Schema|Default -|Query|password|The password for login in clear text|false|string| -|Query|username|The user name for login|false|string| -|=== - - -==== Responses - -===== HTTP Code 200 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|200|successful operation|string -|=== - -*Headers* - -[options="header", cols=".^1h,.^3,.^1,.^1"] -|=== -|Name|Description|Schema|Default -|X-Rate-Limit-Limit|The number of allowed requests in the current period|integer| -|X-Rate-Limit-Remaining|The number of remaining requests in the current period|integer| -|X-Rate-Limit-Reset|The number of seconds left in the current period|integer| -|=== - - -===== HTTP Code 400 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|400|Invalid username/password supplied|No Content -|=== - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* user - - -=== Logs out current logged in user session ----- -GET /users/logout ----- - - -==== Responses - -===== HTTP Code default - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|default|successful operation|No Content -|=== - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* user - - -=== Get user by user name ----- -GET /users/{username} ----- - - -==== Parameters - -[options="header", cols=".^1h,.^1h,.^6,.^1,.^1,.^1"] -|=== -|Type|Name|Description|Required|Schema|Default -|Path|username|The name that needs to be fetched. Use user1 for testing.|true|string| -|=== - - -==== Responses - -===== HTTP Code 200 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|200|successful operation|<<_user,User>> -|=== - -*Headers* - -[options="header", cols=".^1h,.^3,.^1,.^1"] -|=== -|Name|Description|Schema|Default -|X-Rate-Limit-Limit|The number of allowed requests in the current period|integer| -|X-Rate-Limit-Remaining|The number of remaining requests in the current period|integer| -|X-Rate-Limit-Reset|The number of seconds left in the current period|integer| -|=== - - -===== HTTP Code 400 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|400|Invalid username supplied|No Content -|=== - - -===== HTTP Code 404 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|404|User not found|No Content -|=== - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* user - - -=== Updated user ----- -PUT /users/{username} ----- - - -==== Description -[%hardbreaks] -This can only be done by the logged in user. - - -==== Parameters - -[options="header", cols=".^1h,.^1h,.^6,.^1,.^1,.^1"] -|=== -|Type|Name|Description|Required|Schema|Default -|Path|username|name that need to be deleted|true|string| -|Body|body|Updated user object|false|<<_user,User>>| -|=== - - -==== Responses - -===== HTTP Code 400 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|400|Invalid user supplied|No Content -|=== - - -===== HTTP Code 404 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|404|User not found|No Content -|=== - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* user - - -=== Delete user ----- -DELETE /users/{username} ----- - - -==== Description -[%hardbreaks] -This can only be done by the logged in user. - - -==== Parameters - -[options="header", cols=".^1h,.^1h,.^6,.^1,.^1,.^1"] -|=== -|Type|Name|Description|Required|Schema|Default -|Path|username|The name that needs to be deleted|true|string| -|=== - - -==== Responses - -===== HTTP Code 400 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|400|Invalid username supplied|No Content -|=== - - -===== HTTP Code 404 - -[options="header", cols=".^1h,.^3,.^1"] -|=== -|HTTP Code|Description|Schema -|404|User not found|No Content -|=== - - -==== Produces - -* application/json -* application/xml - - -==== Tags - -* user - - - diff --git a/src/test/resources/expected_results/asciidoc/spring_rest_docs/security.adoc b/src/test/resources/expected_results/asciidoc/spring_rest_docs/security.adoc deleted file mode 100644 index 07891475..00000000 --- a/src/test/resources/expected_results/asciidoc/spring_rest_docs/security.adoc +++ /dev/null @@ -1,23 +0,0 @@ - -[[_securityscheme]] -== Security - -=== api_key -Type : apiKey -Name : api_key -In : HEADER - -=== petstore_auth -Type : oauth2 -Flow : implicit -Token URL : http://petstore.swagger.io/api/oauth/dialog - -[options="header", cols="1,6"] -|=== -|Name|Description -|write_pets|modify pets in your account -|read_pets|read your pets -|=== - - - From 7c8efa10607f59b17cee3ea58277ec9aee660fee Mon Sep 17 00:00:00 2001 From: Robert Winkler Date: Mon, 14 Mar 2016 15:12:14 +0100 Subject: [PATCH 04/17] Fixed failing Swagger2MarkupExtensionRegistryTest after moving the extensions into another repo. --- .../swagger2markup/Swagger2MarkupExtensionRegistry.java | 8 ++------ .../spi/Swagger2MarkupExtensionRegistryTest.java | 6 +++--- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java b/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java index 44ff861a..97ac31d1 100644 --- a/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java +++ b/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java @@ -42,18 +42,14 @@ public class Swagger2MarkupExtensionRegistry { } public static Builder ofEmpty() { - return new Builder(false); - } - - public static Builder ofDefaults() { - return new Builder(true); + return new Builder(); } public static class Builder { private final Multimap, Extension> extensions; - Builder(boolean useDefaults) { + Builder() { extensions = MultimapBuilder.hashKeys().arrayListValues().build(); } diff --git a/src/test/java/io/github/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java b/src/test/java/io/github/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java index fe9c8eac..36b12ab2 100644 --- a/src/test/java/io/github/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java +++ b/src/test/java/io/github/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java @@ -29,7 +29,7 @@ public class Swagger2MarkupExtensionRegistryTest { @Test public void testRegistering() { - Swagger2MarkupExtensionRegistry.Builder registryBuilder = Swagger2MarkupExtensionRegistry.ofDefaults(); + Swagger2MarkupExtensionRegistry.Builder registryBuilder = Swagger2MarkupExtensionRegistry.ofEmpty(); registryBuilder.withExtension(new MySwaggerModelExtension()); @@ -51,13 +51,13 @@ public class Swagger2MarkupExtensionRegistryTest { } }; - Swagger2MarkupExtensionRegistry registry = Swagger2MarkupExtensionRegistry.ofDefaults() + Swagger2MarkupExtensionRegistry registry = Swagger2MarkupExtensionRegistry.ofEmpty() .withExtension(ext2) .withExtension(ext3) .withExtension(ext1) .build(); List extensions = registry.getExtensions(Extension.class); - assertThat(extensions.size()).isEqualTo(7); + assertThat(extensions.size()).isEqualTo(3); assertThat(extensions).contains(ext1, ext2, ext3); assertThat(registry.getExtensions(SwaggerModelExtension.class)).isEqualTo(Arrays.asList(ext2, ext3, ext1)); } From 54c7682f004cb347ebe93a5e6c6fc004af959e92 Mon Sep 17 00:00:00 2001 From: Robert Winkler Date: Mon, 14 Mar 2016 15:14:56 +0100 Subject: [PATCH 05/17] Fixed compile issue in Swagger2MarkupConverter --- .../java/io/github/swagger2markup/Swagger2MarkupConverter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/github/swagger2markup/Swagger2MarkupConverter.java b/src/main/java/io/github/swagger2markup/Swagger2MarkupConverter.java index ac11d620..939ec993 100644 --- a/src/main/java/io/github/swagger2markup/Swagger2MarkupConverter.java +++ b/src/main/java/io/github/swagger2markup/Swagger2MarkupConverter.java @@ -248,7 +248,7 @@ public class Swagger2MarkupConverter { config = Swagger2MarkupConfig.ofDefaults().build(); if (extensionRegistry == null) - extensionRegistry = Swagger2MarkupExtensionRegistry.ofDefaults().build(); + extensionRegistry = Swagger2MarkupExtensionRegistry.ofEmpty().build(); Context context = new Context(config, extensionRegistry, swagger, swaggerLocation); config.setGlobalContext(context); From 9655e113c084ea0f3c9f0723388b9f7fb54752fa Mon Sep 17 00:00:00 2001 From: Robert Winkler Date: Mon, 14 Mar 2016 15:43:20 +0100 Subject: [PATCH 06/17] Fixed order of examples and security scheme definitions. --- .../builder/SecurityDocumentBuilder.java | 7 +- .../internal/utils/ExamplesUtil.java | 15 +- .../asciidoc/generated_examples/paths.adoc | 258 +++++++++--------- 3 files changed, 139 insertions(+), 141 deletions(-) diff --git a/src/main/java/io/github/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java b/src/main/java/io/github/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java index fd31ddb6..75906e8e 100644 --- a/src/main/java/io/github/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java +++ b/src/main/java/io/github/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java @@ -28,6 +28,7 @@ import org.apache.commons.collections4.MapUtils; import java.nio.file.Path; import java.util.*; +import static io.github.swagger2markup.internal.utils.MapUtils.toKeySet; import static io.github.swagger2markup.spi.SecurityDocumentExtension.Context; import static io.github.swagger2markup.spi.SecurityDocumentExtension.Position; import static org.apache.commons.lang3.StringUtils.isNotBlank; @@ -82,9 +83,9 @@ public class SecurityDocumentBuilder extends MarkupDocumentBuilder { } private void buildSecuritySchemeDefinitionsSection(Map definitions) { - for (Map.Entry entry : definitions.entrySet()) { - String definitionName = entry.getKey(); - SecuritySchemeDefinition definition = entry.getValue(); + Set definitionNames = toKeySet(definitions, config.getDefinitionOrdering()); + for (String definitionName : definitionNames) { + SecuritySchemeDefinition definition = definitions.get(definitionName); buildSecuritySchemeDefinitionTitle(definitionName); applySecurityDocumentExtension(new Context(Position.DEFINITION_BEGIN, markupDocBuilder, definitionName, definition)); buildDescriptionParagraph(definition.getDescription()); diff --git a/src/main/java/io/github/swagger2markup/internal/utils/ExamplesUtil.java b/src/main/java/io/github/swagger2markup/internal/utils/ExamplesUtil.java index 2fec4470..2f18a339 100644 --- a/src/main/java/io/github/swagger2markup/internal/utils/ExamplesUtil.java +++ b/src/main/java/io/github/swagger2markup/internal/utils/ExamplesUtil.java @@ -27,10 +27,7 @@ import io.swagger.models.properties.RefProperty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; public class ExamplesUtil { @@ -46,7 +43,7 @@ public class ExamplesUtil { * @return map containing response examples. */ public static Map generateResponseExampleMap(boolean generateMissingExamples, Operation operation, Map definitions, MarkupDocBuilder markupDocBuilder) { - Map examples = new HashMap<>(); + Map examples = new LinkedHashMap<>(); Map responses = operation.getResponses(); for (Map.Entry responseEntry : responses.entrySet()) { Response response = responseEntry.getValue(); @@ -86,7 +83,7 @@ public class ExamplesUtil { public static Map generateRequestExampleMap(boolean generateMissingExamples, PathOperation pathOperation, Map definitions, MarkupDocBuilder markupDocBuilder) { Operation operation = pathOperation.getOperation(); List parameters = operation.getParameters(); - Map examples = new HashMap<>(); + Map examples = new LinkedHashMap<>(); // Path example should always be included (if generateMissingExamples): if (generateMissingExamples) @@ -142,7 +139,7 @@ public class ExamplesUtil { @SuppressWarnings("unchecked") Map queryExampleMap = (Map) examples.get("query"); if (queryExampleMap == null) { - queryExampleMap = new HashMap<>(); + queryExampleMap = new LinkedHashMap<>(); } queryExampleMap.put(parameter.getName(), abstractSerializableParameterExample); example = queryExampleMap; @@ -221,7 +218,7 @@ public class ExamplesUtil { * @return a Map of examples */ public static Map exampleMapForProperties(Map properties, Map definitions, MarkupDocBuilder markupDocBuilder) { - Map exampleMap = new HashMap<>(); + Map exampleMap = new LinkedHashMap<>(); for (Map.Entry property : properties.entrySet()) { Object exampleObject = PropertyUtils.convertExample(property.getValue().getExample(), property.getValue().getType()); if (exampleObject == null) { @@ -246,7 +243,7 @@ public class ExamplesUtil { if (property.getExample() != null) { return property.getExample(); } - Map exampleMap = new HashMap<>(); + Map exampleMap = new LinkedHashMap<>(); Property valueProperty = property.getAdditionalProperties(); if (valueProperty.getExample() != null) { return valueProperty.getExample(); diff --git a/src/test/resources/expected_results/asciidoc/generated_examples/paths.adoc b/src/test/resources/expected_results/asciidoc/generated_examples/paths.adoc index c2472101..e256340a 100644 --- a/src/test/resources/expected_results/asciidoc/generated_examples/paths.adoc +++ b/src/test/resources/expected_results/asciidoc/generated_examples/paths.adoc @@ -56,35 +56,35 @@ POST /pets ==== Example HTTP request +==== Request path +---- +"/pets" +---- + + ==== Request body ---- { - "tags" : [ { - "id" : 0, - "name" : "string" - } ], "id" : 0, - "nicknames" : { - "string" : "string" - }, "category" : { "id" : 123, "name" : "Canines" }, - "weight" : 0.0, - "status" : "string", "name" : "doggie", - "photoUrls" : [ "string" ] + "nicknames" : { + "string" : "string" + }, + "photoUrls" : [ "string" ], + "tags" : [ { + "id" : 0, + "name" : "string" + } ], + "status" : "string", + "weight" : 0.0 } ---- -==== Request path ----- -"/pets" ----- - - ==== Example HTTP response ==== Response 405 @@ -173,35 +173,35 @@ PUT /pets ==== Example HTTP request +==== Request path +---- +"/pets" +---- + + ==== Request body ---- { - "tags" : [ { - "id" : 0, - "name" : "string" - } ], "id" : 0, - "nicknames" : { - "string" : "string" - }, "category" : { "id" : 123, "name" : "Canines" }, - "weight" : 0.0, - "status" : "string", "name" : "doggie", - "photoUrls" : [ "string" ] + "nicknames" : { + "string" : "string" + }, + "photoUrls" : [ "string" ], + "tags" : [ { + "id" : 0, + "name" : "string" + } ], + "status" : "string", + "weight" : 0.0 } ---- -==== Request path ----- -"/pets" ----- - - === Finds Pets by status ---- GET /pets/findByStatus @@ -264,6 +264,12 @@ Multiple status values can be provided with comma seperated strings ==== Example HTTP request +==== Request path +---- +"/pets/findByStatus" +---- + + ==== Request query ---- { @@ -272,12 +278,6 @@ Multiple status values can be provided with comma seperated strings ---- -==== Request path ----- -"/pets/findByStatus" ----- - - ==== Example HTTP response ==== Response 200 @@ -348,6 +348,12 @@ Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 ==== Example HTTP request +==== Request path +---- +"/pets/findByTags" +---- + + ==== Request query ---- { @@ -356,12 +362,6 @@ Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 ---- -==== Request path ----- -"/pets/findByTags" ----- - - ==== Example HTTP response ==== Response 200 @@ -425,18 +425,18 @@ POST /pets/{petId} ==== Example HTTP request -==== Request formData ----- -"string" ----- - - ==== Request path ---- "/pets/string" ---- +==== Request formData +---- +"string" +---- + + === Find pet by ID ---- GET /pets/{petId} @@ -520,22 +520,22 @@ Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error cond ==== Response 200 ---- { - "tags" : [ { - "id" : 0, - "name" : "string" - } ], "id" : 0, - "nicknames" : { - "string" : "string" - }, "category" : { "id" : 123, "name" : "Canines" }, - "weight" : 0.0, - "status" : "string", "name" : "doggie", - "photoUrls" : [ "string" ] + "nicknames" : { + "string" : "string" + }, + "photoUrls" : [ "string" ], + "tags" : [ { + "id" : 0, + "name" : "string" + } ], + "status" : "string", + "weight" : 0.0 } ---- @@ -649,6 +649,12 @@ POST /stores/order ==== Example HTTP request +==== Request path +---- +"/stores/order" +---- + + ==== Request body ---- { @@ -662,12 +668,6 @@ POST /stores/order ---- -==== Request path ----- -"/stores/order" ----- - - ==== Example HTTP response ==== Response 200 @@ -869,28 +869,28 @@ This can only be done by the logged in user. ==== Example HTTP request +==== Request path +---- +"/users" +---- + + ==== Request body ---- { "id" : 0, - "lastName" : "string", - "phone" : "string", "username" : "string", - "email" : "string", - "userStatus" : 0, - "pictures" : [ "string" ], "firstName" : "string", - "password" : "string" + "lastName" : "string", + "email" : "string", + "password" : "string", + "phone" : "string", + "userStatus" : 0, + "pictures" : [ "string" ] } ---- -==== Request path ----- -"/users" ----- - - === Creates list of users with given input array ---- POST /users/createWithArray @@ -930,28 +930,28 @@ POST /users/createWithArray ==== Example HTTP request +==== Request path +---- +"/users/createWithArray" +---- + + ==== Request body ---- [ { "id" : 0, - "lastName" : "string", - "phone" : "string", "username" : "string", - "email" : "string", - "userStatus" : 0, - "pictures" : [ "string" ], "firstName" : "string", - "password" : "string" + "lastName" : "string", + "email" : "string", + "password" : "string", + "phone" : "string", + "userStatus" : 0, + "pictures" : [ "string" ] } ] ---- -==== Request path ----- -"/users/createWithArray" ----- - - === Creates list of users with given input array ---- POST /users/createWithList @@ -991,28 +991,28 @@ POST /users/createWithList ==== Example HTTP request +==== Request path +---- +"/users/createWithList" +---- + + ==== Request body ---- [ { "id" : 0, - "lastName" : "string", - "phone" : "string", "username" : "string", - "email" : "string", - "userStatus" : 0, - "pictures" : [ "string" ], "firstName" : "string", - "password" : "string" + "lastName" : "string", + "email" : "string", + "password" : "string", + "phone" : "string", + "userStatus" : 0, + "pictures" : [ "string" ] } ] ---- -==== Request path ----- -"/users/createWithList" ----- - - === Logs user into the system ---- GET /users/login @@ -1062,21 +1062,21 @@ GET /users/login ==== Example HTTP request -==== Request query ----- -{ - "username" : "string", - "password" : "string" -} ----- - - ==== Request path ---- "/users/login" ---- +==== Request query +---- +{ + "password" : "string", + "username" : "string" +} +---- + + ==== Example HTTP response ==== Response 200 @@ -1190,14 +1190,14 @@ GET /users/{username} ---- { "id" : 0, - "lastName" : "string", - "phone" : "string", "username" : "string", - "email" : "string", - "userStatus" : 0, - "pictures" : [ "string" ], "firstName" : "string", - "password" : "string" + "lastName" : "string", + "email" : "string", + "password" : "string", + "phone" : "string", + "userStatus" : 0, + "pictures" : [ "string" ] } ---- @@ -1256,28 +1256,28 @@ This can only be done by the logged in user. ==== Example HTTP request +==== Request path +---- +"/users/string" +---- + + ==== Request body ---- { "id" : 0, - "lastName" : "string", - "phone" : "string", "username" : "string", - "email" : "string", - "userStatus" : 0, - "pictures" : [ "string" ], "firstName" : "string", - "password" : "string" + "lastName" : "string", + "email" : "string", + "password" : "string", + "phone" : "string", + "userStatus" : 0, + "pictures" : [ "string" ] } ---- -==== Request path ----- -"/users/string" ----- - - === Delete user ---- DELETE /users/{username} From d4bbcc3acc690b29397af3f328920dc75677e42e Mon Sep 17 00:00:00 2001 From: Robert Winkler Date: Mon, 14 Mar 2016 15:43:40 +0100 Subject: [PATCH 07/17] Allow to use http proxy settings in unit tests. --- build.gradle | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/build.gradle b/build.gradle index d04c3fb8..1376abe9 100644 --- a/build.gradle +++ b/build.gradle @@ -48,6 +48,16 @@ dependencies { testCompile 'io.github.robwin:assertj-diff:0.1.1' } +test { + if (System.properties['http.proxyHost']) { + systemProperty 'http.proxyHost', System.properties['http.proxyHost'] + systemProperty 'http.proxyPort', System.properties['http.proxyPort'] + systemProperty 'http.nonProxyHosts', System.properties['http.nonProxyHosts'] + } + systemProperty 'file.encoding', 'UTF-8' + ignoreFailures = true +} + task wrapper(type: Wrapper) { gradleVersion = '2.11' From e74ac9fda5f16bea5be3b035f40b5fc648e749b3 Mon Sep 17 00:00:00 2001 From: Hugo de Paix de Coeur Date: Mon, 14 Mar 2016 19:28:07 +0100 Subject: [PATCH 08/17] fixes copy code to support last mdb commits --- .../document/builder/DefinitionsDocumentBuilder.java | 12 ++++++------ .../document/builder/PathsDocumentBuilder.java | 8 ++++---- .../github/swagger2markup/internal/type/RefType.java | 2 +- .../swagger2markup/internal/utils/PropertyUtils.java | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/io/github/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java b/src/main/java/io/github/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java index c2d37f31..c4e24678 100644 --- a/src/main/java/io/github/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java +++ b/src/main/java/io/github/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java @@ -20,9 +20,9 @@ import com.google.common.collect.ImmutableMap; import io.github.robwin.markup.builder.MarkupDocBuilder; import io.github.swagger2markup.Swagger2MarkupConverter; import io.github.swagger2markup.internal.document.MarkupDocument; -import io.github.swagger2markup.spi.DefinitionsDocumentExtension; import io.github.swagger2markup.internal.type.ObjectType; import io.github.swagger2markup.internal.type.Type; +import io.github.swagger2markup.spi.DefinitionsDocumentExtension; import io.swagger.models.ComposedModel; import io.swagger.models.Model; import io.swagger.models.RefModel; @@ -33,7 +33,6 @@ import org.apache.commons.collections4.MapUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.Validate; - import java.io.File; import java.io.IOException; import java.io.Reader; @@ -42,11 +41,12 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.util.*; +import static io.github.swagger2markup.internal.utils.MapUtils.toKeySet; +import static io.github.swagger2markup.spi.DefinitionsDocumentExtension.Context; +import static io.github.swagger2markup.spi.DefinitionsDocumentExtension.Position; import static io.github.swagger2markup.utils.IOUtils.normalizeName; -import static io.github.swagger2markup.spi.DefinitionsDocumentExtension.*; import static org.apache.commons.lang3.StringUtils.defaultString; import static org.apache.commons.lang3.StringUtils.isNotBlank; -import static io.github.swagger2markup.internal.utils.MapUtils.toKeySet; /** * @author Robert Winkler @@ -160,7 +160,7 @@ public class DefinitionsDocumentBuilder extends MarkupDocumentBuilder { private void buildDefinition(Map definitions, String definitionName, Model model) { if (config.isSeparatedDefinitionsEnabled()) { - MarkupDocBuilder defDocBuilder = this.markupDocBuilder.copy(); + MarkupDocBuilder defDocBuilder = this.markupDocBuilder.copy(false); buildDefinition(definitions, definitionName, model, defDocBuilder); Path definitionFile = outputPath.resolve(resolveDefinitionDocument(definitionName)); try { @@ -213,7 +213,7 @@ public class DefinitionsDocumentBuilder extends MarkupDocumentBuilder { * @param docBuilder the docbuilder do use for output */ private void definitionRef(String definitionName, MarkupDocBuilder docBuilder) { - buildDefinitionTitle(docBuilder.copy().crossReference(new DefinitionDocumentResolverDefault().apply(definitionName), definitionName, definitionName).toString(), "ref-" + definitionName, docBuilder); + buildDefinitionTitle(docBuilder.copy(false).crossReference(new DefinitionDocumentResolverDefault().apply(definitionName), definitionName, definitionName).toString(), "ref-" + definitionName, docBuilder); } /** diff --git a/src/main/java/io/github/swagger2markup/internal/document/builder/PathsDocumentBuilder.java b/src/main/java/io/github/swagger2markup/internal/document/builder/PathsDocumentBuilder.java index 2d66f137..0181a0fd 100644 --- a/src/main/java/io/github/swagger2markup/internal/document/builder/PathsDocumentBuilder.java +++ b/src/main/java/io/github/swagger2markup/internal/document/builder/PathsDocumentBuilder.java @@ -50,13 +50,13 @@ import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.*; -import static io.github.swagger2markup.utils.IOUtils.normalizeName; import static io.github.swagger2markup.internal.utils.ListUtils.toSet; import static io.github.swagger2markup.internal.utils.MapUtils.toKeySet; import static io.github.swagger2markup.internal.utils.TagUtils.convertTagsListToMap; import static io.github.swagger2markup.internal.utils.TagUtils.getTagDescription; import static io.github.swagger2markup.spi.PathsDocumentExtension.Context; import static io.github.swagger2markup.spi.PathsDocumentExtension.Position; +import static io.github.swagger2markup.utils.IOUtils.normalizeName; import static org.apache.commons.lang3.StringUtils.defaultString; import static org.apache.commons.lang3.StringUtils.isNotBlank; @@ -252,7 +252,7 @@ public class PathsDocumentBuilder extends MarkupDocumentBuilder { */ private void buildOperation(PathOperation operation) { if (config.isSeparatedOperationsEnabled()) { - MarkupDocBuilder pathDocBuilder = this.markupDocBuilder.copy(); + MarkupDocBuilder pathDocBuilder = this.markupDocBuilder.copy(false); buildOperation(operation, pathDocBuilder); java.nio.file.Path operationFile = outputPath.resolve(resolveOperationDocument(operation)); @@ -329,7 +329,7 @@ public class PathsDocumentBuilder extends MarkupDocumentBuilder { document = defaultString(config.getInterDocumentCrossReferencesPrefix()) + resolveOperationDocument(operation); String operationName = operationName(operation); - buildOperationTitle(docBuilder.copy().crossReference(document, operationName, operationName).toString(), "ref-" + operationName, docBuilder); + buildOperationTitle(docBuilder.copy(false).crossReference(document, operationName, operationName).toString(), "ref-" + operationName, docBuilder); } /** @@ -659,7 +659,7 @@ public class PathsDocumentBuilder extends MarkupDocumentBuilder { if (securityDefinitions != null && securityDefinitions.containsKey(securityKey)) { type = securityDefinitions.get(securityKey).getType(); } - List content = Arrays.asList(type, docBuilder.copy().crossReference(securityKey, securityKey).toString(), + List content = Arrays.asList(type, docBuilder.copy(false).crossReference(securityKey, securityKey).toString(), Joiner.on(",").join(securityEntry.getValue())); cells.add(content); } diff --git a/src/main/java/io/github/swagger2markup/internal/type/RefType.java b/src/main/java/io/github/swagger2markup/internal/type/RefType.java index 69c63d56..73537260 100644 --- a/src/main/java/io/github/swagger2markup/internal/type/RefType.java +++ b/src/main/java/io/github/swagger2markup/internal/type/RefType.java @@ -36,7 +36,7 @@ public class RefType extends Type { @Override public String displaySchema(MarkupDocBuilder docBuilder) { - return docBuilder.copy().crossReference(getDocument(), getUniqueName(), getName()).toString(); + return docBuilder.copy(false).crossReference(getDocument(), getUniqueName(), getName()).toString(); } public String getDocument() { diff --git a/src/main/java/io/github/swagger2markup/internal/utils/PropertyUtils.java b/src/main/java/io/github/swagger2markup/internal/utils/PropertyUtils.java index c0437b02..88c03fdb 100644 --- a/src/main/java/io/github/swagger2markup/internal/utils/PropertyUtils.java +++ b/src/main/java/io/github/swagger2markup/internal/utils/PropertyUtils.java @@ -158,7 +158,7 @@ public final class PropertyUtils { return "string"; case "ref": if (property instanceof RefProperty) { - return markupDocBuilder.copy().crossReference(((RefProperty) property).getSimpleRef()).toString(); + return markupDocBuilder.copy(false).crossReference(((RefProperty) property).getSimpleRef()).toString(); } default: return property.getType(); From 08eb6841fcacb5330025be2146de840f6c16be3a Mon Sep 17 00:00:00 2001 From: Robert Winkler Date: Tue, 15 Mar 2016 08:43:26 +0100 Subject: [PATCH 09/17] Refactor extension SPI to use the ServiceLoader by default --- .../swagger2markup/Swagger2MarkupConfig.java | 2 +- .../Swagger2MarkupConverter.java | 26 +++- .../Swagger2MarkupExtensionRegistry.java | 139 +++++++++++------- .../builder/DefinitionsDocumentBuilder.java | 2 +- .../builder/OverviewDocumentBuilder.java | 2 +- .../builder/PathsDocumentBuilder.java | 4 +- .../builder/SecurityDocumentBuilder.java | 2 +- .../internal/utils/ExamplesUtil.java | 6 +- .../internal/utils/TagUtils.java | 2 +- .../{internal => }/model/PathOperation.java | 2 +- .../github/swagger2markup/spi/Extension.java | 2 +- .../spi/PathsDocumentExtension.java | 6 +- .../Swagger2MarkupExtensionRegistryTest.java | 28 +--- 13 files changed, 135 insertions(+), 88 deletions(-) rename src/main/java/io/github/swagger2markup/{internal => }/model/PathOperation.java (97%) diff --git a/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java b/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java index 5e4f5742..16ba6da5 100644 --- a/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java +++ b/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java @@ -19,7 +19,7 @@ import com.google.common.base.Function; import com.google.common.collect.Ordering; import io.github.robwin.markup.builder.LineSeparator; import io.github.robwin.markup.builder.MarkupLanguage; -import io.github.swagger2markup.internal.model.PathOperation; +import io.github.swagger2markup.model.PathOperation; import io.github.swagger2markup.utils.IOUtils; import io.swagger.models.HttpMethod; import io.swagger.models.parameters.Parameter; diff --git a/src/main/java/io/github/swagger2markup/Swagger2MarkupConverter.java b/src/main/java/io/github/swagger2markup/Swagger2MarkupConverter.java index 939ec993..e0b9f2bb 100644 --- a/src/main/java/io/github/swagger2markup/Swagger2MarkupConverter.java +++ b/src/main/java/io/github/swagger2markup/Swagger2MarkupConverter.java @@ -20,8 +20,7 @@ import io.github.swagger2markup.internal.document.builder.DefinitionsDocumentBui import io.github.swagger2markup.internal.document.builder.OverviewDocumentBuilder; import io.github.swagger2markup.internal.document.builder.PathsDocumentBuilder; import io.github.swagger2markup.internal.document.builder.SecurityDocumentBuilder; -import io.github.swagger2markup.spi.Extension; -import io.github.swagger2markup.spi.SwaggerModelExtension; +import io.github.swagger2markup.spi.*; import io.swagger.models.Swagger; import io.swagger.parser.SwaggerParser; import org.apache.commons.io.IOUtils; @@ -145,7 +144,7 @@ public class Swagger2MarkupConverter { } private void applySwaggerExtensions() { - for (SwaggerModelExtension swaggerModelExtension : context.extensionRegistry.getExtensions(SwaggerModelExtension.class)) { + for (SwaggerModelExtension swaggerModelExtension : context.extensionRegistry.getSwaggerModelExtensions()) { swaggerModelExtension.apply(context.getSwagger()); } } @@ -253,10 +252,27 @@ public class Swagger2MarkupConverter { Context context = new Context(config, extensionRegistry, swagger, swaggerLocation); config.setGlobalContext(context); - for (Extension extension : extensionRegistry.getExtensions()) - extension.setGlobalContext(context); + initExtensions(context); + return new Swagger2MarkupConverter(context); } + + private void initExtensions(Context context) { + for (SwaggerModelExtension extension : extensionRegistry.getSwaggerModelExtensions()) + extension.setGlobalContext(context); + + for (OverviewDocumentExtension extension : extensionRegistry.getOverviewDocumentExtensions()) + extension.setGlobalContext(context); + + for (DefinitionsDocumentExtension extension : extensionRegistry.getDefinitionsDocumentExtensions()) + extension.setGlobalContext(context); + + for (PathsDocumentExtension extension : extensionRegistry.getPathsDocumentExtensions()) + extension.setGlobalContext(context); + + for (SecurityDocumentExtension extension : extensionRegistry.getSecurityDocumentExtensions()) + extension.setGlobalContext(context); + } } public static class Context { diff --git a/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java b/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java index 97ac31d1..f9a0984d 100644 --- a/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java +++ b/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java @@ -16,83 +16,122 @@ package io.github.swagger2markup; -import com.google.common.collect.Multimap; -import com.google.common.collect.MultimapBuilder; import io.github.swagger2markup.spi.*; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Map; + +import static java.util.ServiceLoader.load; +import static org.apache.commons.collections4.IteratorUtils.toList; public class Swagger2MarkupExtensionRegistry { - protected static final List> EXTENSION_POINTS = Arrays.>asList( - SwaggerModelExtension.class, - OverviewDocumentExtension.class, - SecurityDocumentExtension.class, - DefinitionsDocumentExtension.class, - PathsDocumentExtension.class - ); + private Context context; - protected final Multimap, Extension> extensions; + private static class Context { + public final List swaggerModelExtensions; + public final List overviewDocumentExtensions; + public final List definitionsDocumentExtensions; + public final List pathsDocumentExtensions; + public final List securityDocumentExtensions; - public Swagger2MarkupExtensionRegistry(Multimap, Extension> extensions) { - this.extensions = extensions; + public Context(List swaggerModelExtensions, + List overviewDocumentExtensions, + List definitionsDocumentExtensions, + List pathsDocumentExtensions, + List securityDocumentExtensions){ + this.swaggerModelExtensions = swaggerModelExtensions; + this.overviewDocumentExtensions = overviewDocumentExtensions; + this.definitionsDocumentExtensions = definitionsDocumentExtensions; + this.pathsDocumentExtensions = pathsDocumentExtensions; + this.securityDocumentExtensions = securityDocumentExtensions; + } + } + + Swagger2MarkupExtensionRegistry(Context context) { + this.context = context; + } + + public List getSwaggerModelExtensions(){ + return context.swaggerModelExtensions; + } + + public List getOverviewDocumentExtensions(){ + return context.overviewDocumentExtensions; + } + + public List getDefinitionsDocumentExtensions(){ + return context.definitionsDocumentExtensions; + } + + public List getSecurityDocumentExtensions(){ + return context.securityDocumentExtensions; + } + + public List getPathsDocumentExtensions(){ + return context.pathsDocumentExtensions; } public static Builder ofEmpty() { - return new Builder(); + Context context = new Context( + new ArrayList(), + new ArrayList(), + new ArrayList(), + new ArrayList(), + new ArrayList()); + return new Builder(context); + } + + public static Builder ofServiceLoader() { + List swaggerModelExtensions = toList(load(SwaggerModelExtension.class).iterator()); + List overviewDocumentExtensions = toList(load(OverviewDocumentExtension.class).iterator()); + List definitionsDocumentExtensions = toList(load(DefinitionsDocumentExtension.class).iterator()); + List pathsDocumentExtensions = toList(load(PathsDocumentExtension.class).iterator()); + List securityDocumentExtensions = toList(load(SecurityDocumentExtension.class).iterator()); + Context context = new Context( + swaggerModelExtensions, + overviewDocumentExtensions, + definitionsDocumentExtensions, + pathsDocumentExtensions, + securityDocumentExtensions); + return new Builder(context); } public static class Builder { - private final Multimap, Extension> extensions; + private final Context context; - Builder() { - extensions = MultimapBuilder.hashKeys().arrayListValues().build(); + Builder(Context context) { + this.context = context; } public Swagger2MarkupExtensionRegistry build() { - return new Swagger2MarkupExtensionRegistry(extensions); + return new Swagger2MarkupExtensionRegistry(context); } - public Builder withExtension(Extension extension) { - registerExtension(extension); + public Builder withSwaggerModelExtension(SwaggerModelExtension extension) { + context.swaggerModelExtensions.add(extension); return this; } - public void registerExtension(Extension extension) { - for (Class extensionPoint : EXTENSION_POINTS) { - if (extensionPoint.isInstance(extension)) { - extensions.put(extensionPoint, extension); - return; - } - } - - throw new IllegalArgumentException("Provided extension class does not extend any of the supported extension points"); - } - } - - @SuppressWarnings(value = "unchecked") - public List getExtensions(Class extensionClass) { - List ret = new ArrayList<>(); - - for (Map.Entry, Extension> entry : extensions.entries()) { - if (extensionClass.isAssignableFrom(entry.getKey())) { - if (extensionClass.isInstance(entry.getValue())) - ret.add((T) entry.getValue()); - } + public Builder withOverviewDocumentExtension(OverviewDocumentExtension extension) { + context.overviewDocumentExtensions.add(extension); + return this; } - return ret; - } + public Builder withDefinitionsDocumentExtension(DefinitionsDocumentExtension extension) { + context.definitionsDocumentExtensions.add(extension); + return this; + } - /** - * Get all extensions - * @return all extensions - */ - public List getExtensions() { - return getExtensions(Extension.class); + public Builder withPathsDocumentExtension(PathsDocumentExtension extension) { + context.pathsDocumentExtensions.add(extension); + return this; + } + + public Builder withSecurityDocumentExtension(SecurityDocumentExtension extension) { + context.securityDocumentExtensions.add(extension); + return this; + } } } diff --git a/src/main/java/io/github/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java b/src/main/java/io/github/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java index c2d37f31..fb053da4 100644 --- a/src/main/java/io/github/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java +++ b/src/main/java/io/github/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java @@ -132,7 +132,7 @@ public class DefinitionsDocumentBuilder extends MarkupDocumentBuilder { * @param context context */ private void applyDefinitionsDocumentExtension(Context context) { - for (DefinitionsDocumentExtension extension : globalContext.getExtensionRegistry().getExtensions(DefinitionsDocumentExtension.class)) { + for (DefinitionsDocumentExtension extension : globalContext.getExtensionRegistry().getDefinitionsDocumentExtensions()) { extension.apply(context); } } diff --git a/src/main/java/io/github/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java b/src/main/java/io/github/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java index 6d670776..da715466 100644 --- a/src/main/java/io/github/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java +++ b/src/main/java/io/github/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java @@ -191,7 +191,7 @@ public class OverviewDocumentBuilder extends MarkupDocumentBuilder { * @param context context */ private void applyOverviewDocumentExtension(Context context) { - for (OverviewDocumentExtension extension : globalContext.getExtensionRegistry().getExtensions(OverviewDocumentExtension.class)) { + for (OverviewDocumentExtension extension : globalContext.getExtensionRegistry().getOverviewDocumentExtensions()) { extension.apply(context); } } diff --git a/src/main/java/io/github/swagger2markup/internal/document/builder/PathsDocumentBuilder.java b/src/main/java/io/github/swagger2markup/internal/document/builder/PathsDocumentBuilder.java index 2d66f137..b80286e4 100644 --- a/src/main/java/io/github/swagger2markup/internal/document/builder/PathsDocumentBuilder.java +++ b/src/main/java/io/github/swagger2markup/internal/document/builder/PathsDocumentBuilder.java @@ -22,7 +22,7 @@ import io.github.robwin.markup.builder.*; import io.github.swagger2markup.GroupBy; import io.github.swagger2markup.Swagger2MarkupConverter; import io.github.swagger2markup.internal.document.MarkupDocument; -import io.github.swagger2markup.internal.model.PathOperation; +import io.github.swagger2markup.model.PathOperation; import io.github.swagger2markup.internal.type.ObjectType; import io.github.swagger2markup.internal.type.RefType; import io.github.swagger2markup.internal.type.Type; @@ -227,7 +227,7 @@ public class PathsDocumentBuilder extends MarkupDocumentBuilder { * @param context context */ private void applyPathsDocumentExtension(Context context) { - for (PathsDocumentExtension extension : globalContext.getExtensionRegistry().getExtensions(PathsDocumentExtension.class)) { + for (PathsDocumentExtension extension : globalContext.getExtensionRegistry().getPathsDocumentExtensions()) { extension.apply(context); } } diff --git a/src/main/java/io/github/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java b/src/main/java/io/github/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java index 75906e8e..bd2948e7 100644 --- a/src/main/java/io/github/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java +++ b/src/main/java/io/github/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java @@ -131,7 +131,7 @@ public class SecurityDocumentBuilder extends MarkupDocumentBuilder { * @param context context */ private void applySecurityDocumentExtension(Context context) { - for (SecurityDocumentExtension extension : globalContext.getExtensionRegistry().getExtensions(SecurityDocumentExtension.class)) { + for (SecurityDocumentExtension extension : globalContext.getExtensionRegistry().getSecurityDocumentExtensions()) { extension.apply(context); } } diff --git a/src/main/java/io/github/swagger2markup/internal/utils/ExamplesUtil.java b/src/main/java/io/github/swagger2markup/internal/utils/ExamplesUtil.java index 2f18a339..b21716df 100644 --- a/src/main/java/io/github/swagger2markup/internal/utils/ExamplesUtil.java +++ b/src/main/java/io/github/swagger2markup/internal/utils/ExamplesUtil.java @@ -17,7 +17,7 @@ package io.github.swagger2markup.internal.utils; import io.github.robwin.markup.builder.MarkupDocBuilder; -import io.github.swagger2markup.internal.model.PathOperation; +import io.github.swagger2markup.model.PathOperation; import io.swagger.models.*; import io.swagger.models.parameters.*; import io.swagger.models.properties.ArrayProperty; @@ -27,7 +27,9 @@ import io.swagger.models.properties.RefProperty; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.*; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; public class ExamplesUtil { diff --git a/src/main/java/io/github/swagger2markup/internal/utils/TagUtils.java b/src/main/java/io/github/swagger2markup/internal/utils/TagUtils.java index 7e244d65..e9cb38cf 100644 --- a/src/main/java/io/github/swagger2markup/internal/utils/TagUtils.java +++ b/src/main/java/io/github/swagger2markup/internal/utils/TagUtils.java @@ -19,7 +19,7 @@ import com.google.common.base.Optional; import com.google.common.collect.Multimap; import com.google.common.collect.MultimapBuilder; import com.google.common.collect.Ordering; -import io.github.swagger2markup.internal.model.PathOperation; +import io.github.swagger2markup.model.PathOperation; import io.swagger.models.Tag; import org.apache.commons.lang3.Validate; import org.slf4j.Logger; diff --git a/src/main/java/io/github/swagger2markup/internal/model/PathOperation.java b/src/main/java/io/github/swagger2markup/model/PathOperation.java similarity index 97% rename from src/main/java/io/github/swagger2markup/internal/model/PathOperation.java rename to src/main/java/io/github/swagger2markup/model/PathOperation.java index c644bfd8..f1a44f5b 100644 --- a/src/main/java/io/github/swagger2markup/internal/model/PathOperation.java +++ b/src/main/java/io/github/swagger2markup/model/PathOperation.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.github.swagger2markup.internal.model; +package io.github.swagger2markup.model; import io.swagger.models.HttpMethod; import io.swagger.models.Operation; diff --git a/src/main/java/io/github/swagger2markup/spi/Extension.java b/src/main/java/io/github/swagger2markup/spi/Extension.java index 3693abc1..8e8c501d 100644 --- a/src/main/java/io/github/swagger2markup/spi/Extension.java +++ b/src/main/java/io/github/swagger2markup/spi/Extension.java @@ -21,7 +21,7 @@ import io.github.swagger2markup.Swagger2MarkupConverter; /** * A marker interface which must be implemented by an extension */ -public interface Extension { +interface Extension { /** * Global context lazy initialization diff --git a/src/main/java/io/github/swagger2markup/spi/PathsDocumentExtension.java b/src/main/java/io/github/swagger2markup/spi/PathsDocumentExtension.java index 59134f5c..222993af 100644 --- a/src/main/java/io/github/swagger2markup/spi/PathsDocumentExtension.java +++ b/src/main/java/io/github/swagger2markup/spi/PathsDocumentExtension.java @@ -16,11 +16,13 @@ package io.github.swagger2markup.spi; +import org.apache.commons.lang3.Validate; + import com.google.common.base.Optional; + import io.github.robwin.markup.builder.MarkupDocBuilder; import io.github.swagger2markup.GroupBy; -import io.github.swagger2markup.internal.model.PathOperation; -import org.apache.commons.lang3.Validate; +import io.github.swagger2markup.model.PathOperation; /** * A SecurityContentExtension can be used to extend the paths document. diff --git a/src/test/java/io/github/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java b/src/test/java/io/github/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java index 36b12ab2..7bcb6ae7 100644 --- a/src/test/java/io/github/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java +++ b/src/test/java/io/github/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java @@ -19,46 +19,34 @@ import io.github.swagger2markup.Swagger2MarkupExtensionRegistry; import io.swagger.models.Swagger; import org.junit.Test; -import java.util.Arrays; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.fail; public class Swagger2MarkupExtensionRegistryTest { @Test public void testRegistering() { Swagger2MarkupExtensionRegistry.Builder registryBuilder = Swagger2MarkupExtensionRegistry.ofEmpty(); - - registryBuilder.withExtension(new MySwaggerModelExtension()); - - try { - registryBuilder.withExtension(new AbstractExtension() { - }); - fail("No IllegalArgumentException thrown"); - } catch (IllegalArgumentException e) { - assertThat(e.getMessage()).isEqualTo("Provided extension class does not extend any of the supported extension points"); - } + registryBuilder.withSwaggerModelExtension(new MySwaggerModelExtension()); } @Test public void testListing() { - Extension ext1 = new MySwaggerModelExtension(); - Extension ext2 = new MySwaggerModelExtension(); - Extension ext3 = new SwaggerModelExtension() { + SwaggerModelExtension ext1 = new MySwaggerModelExtension(); + SwaggerModelExtension ext2 = new MySwaggerModelExtension(); + SwaggerModelExtension ext3 = new SwaggerModelExtension() { public void apply(Swagger swagger) { } }; Swagger2MarkupExtensionRegistry registry = Swagger2MarkupExtensionRegistry.ofEmpty() - .withExtension(ext2) - .withExtension(ext3) - .withExtension(ext1) + .withSwaggerModelExtension(ext2) + .withSwaggerModelExtension(ext3) + .withSwaggerModelExtension(ext1) .build(); - List extensions = registry.getExtensions(Extension.class); + List extensions = registry.getSwaggerModelExtensions(); assertThat(extensions.size()).isEqualTo(3); assertThat(extensions).contains(ext1, ext2, ext3); - assertThat(registry.getExtensions(SwaggerModelExtension.class)).isEqualTo(Arrays.asList(ext2, ext3, ext1)); } } From d48b9c217b2c8581eab2212f2cbe5b1e8737bde8 Mon Sep 17 00:00:00 2001 From: Robert Winkler Date: Tue, 15 Mar 2016 09:59:32 +0100 Subject: [PATCH 10/17] The S2MConfig and S2MRegistry are interfaces now so that other users can develop their own implementations and don't have to use our default implementations. --- .../swagger2markup/Swagger2MarkupConfig.java | 826 ++---------------- .../Swagger2MarkupConverter.java | 7 +- .../Swagger2MarkupExtensionRegistry.java | 117 +-- .../builder/Swagger2MarkupConfigBuilder.java | 747 ++++++++++++++++ ...wagger2MarkupExtensionRegistryBuilder.java | 128 +++ .../swagger2markup/AsciidocConverterTest.java | 25 +- .../swagger2markup/GeneralConverterTest.java | 7 +- .../swagger2markup/MarkdownConverterTest.java | 9 +- .../MySwaggerModelExtension.java | 3 +- .../Swagger2MarkupConfigBuilderTest.java} | 28 +- ...r2MarkupExtensionRegistryBuilderTest.java} | 9 +- 11 files changed, 1001 insertions(+), 905 deletions(-) create mode 100644 src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java create mode 100644 src/main/java/io/github/swagger2markup/builder/Swagger2MarkupExtensionRegistryBuilder.java rename src/test/java/io/github/swagger2markup/{spi => builder}/MySwaggerModelExtension.java (89%) rename src/test/java/io/github/swagger2markup/{Swagger2MarkupConfigTest.java => builder/Swagger2MarkupConfigBuilderTest.java} (87%) rename src/test/java/io/github/swagger2markup/{spi/Swagger2MarkupExtensionRegistryTest.java => builder/Swagger2MarkupExtensionRegistryBuilderTest.java} (83%) diff --git a/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java b/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java index 16ba6da5..cbb235ee 100644 --- a/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java +++ b/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java @@ -1,764 +1,80 @@ -/* - * Copyright 2016 Robert Winkler - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ + package io.github.swagger2markup; -import com.google.common.base.Function; -import com.google.common.collect.Ordering; import io.github.robwin.markup.builder.LineSeparator; import io.github.robwin.markup.builder.MarkupLanguage; import io.github.swagger2markup.model.PathOperation; -import io.github.swagger2markup.utils.IOUtils; -import io.swagger.models.HttpMethod; import io.swagger.models.parameters.Parameter; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.Validate; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.io.InputStream; import java.net.URI; -import java.nio.file.Path; import java.util.Comparator; -import java.util.Properties; - -public class Swagger2MarkupConfig { - - private static final Logger logger = LoggerFactory.getLogger(Swagger2MarkupConfig.class); - - private MarkupLanguage markupLanguage; - private boolean generatedExamplesEnabled; - private boolean operationDescriptionsEnabled; - private URI operationDescriptionsUri; - private boolean definitionDescriptionsEnabled; - private URI definitionDescriptionsUri; - private boolean separatedDefinitionsEnabled; - private boolean separatedOperationsEnabled; - private GroupBy operationsGroupedBy; - private Language outputLanguage; - private int inlineSchemaDepthLevel; - private OrderBy tagOrderBy; - private Comparator tagOrdering; - private OrderBy operationOrderBy; - private Comparator operationOrdering; - private OrderBy definitionOrderBy; - private Comparator definitionOrdering; - private OrderBy parameterOrderBy; - private Comparator parameterOrdering; - private OrderBy propertyOrderBy; - private Comparator propertyOrdering; - private OrderBy responseOrderBy; - private Comparator responseOrdering; - private boolean interDocumentCrossReferencesEnabled; - private String interDocumentCrossReferencesPrefix; - private boolean flatBodyEnabled; - private String anchorPrefix; - private LineSeparator lineSeparator; - - private String overviewDocument; - private String pathsDocument; - private String definitionsDocument; - private String securityDocument; - private String separatedOperationsFolder; - private String separatedDefinitionsFolder; - - public static Builder ofDefaults() { - return new Builder(); - } - - public static Builder ofProperties(Properties properties) { - return new Builder(properties); - } - - /** - * Global context lazy initialization - * - * @param globalContext Partially initialized global context (globalContext.extensionRegistry == null) - */ - public void setGlobalContext(Swagger2MarkupConverter.Context globalContext) { - configureDefaultContentPaths(globalContext.getSwaggerLocation()); - } - - /** - * Automatically set default path for external content files based on specified {@code swaggerLocation}.
- * If {@code swaggerLocation} is null, default path can't be set and features are disabled.
- * Paths have to be explicitly set when swaggerLocation.scheme != 'file' to limit the number of URL requests. - * - * @param swaggerLocation base path to set default paths - * @throws RuntimeException if basePath == null and any path is not configured - */ - private void configureDefaultContentPaths(URI swaggerLocation) { - URI baseURI = null; - - if (swaggerLocation != null) { - if (swaggerLocation.getScheme().equals("file")) - baseURI = IOUtils.uriParent(swaggerLocation); - } - - if (operationDescriptionsEnabled && operationDescriptionsUri == null) { - if (baseURI == null) { - if (logger.isWarnEnabled()) - logger.warn("Disable {} > No explicit '{}' set and no default available > Disable {}", "operationDescriptionsEnabled", "operationDescriptionsUri"); - operationDescriptionsEnabled = false; - } else - operationDescriptionsUri = baseURI; - } - - if (definitionDescriptionsEnabled && definitionDescriptionsUri == null) { - if (baseURI == null) { - if (logger.isWarnEnabled()) - logger.warn("Disable {} > No explicit '{}' set and no default available > Disable {}", "definitionDescriptionsEnabled", "definitionDescriptionsUri"); - definitionDescriptionsEnabled = false; - } else - definitionDescriptionsUri = baseURI; - } - } - - public MarkupLanguage getMarkupLanguage() { - return markupLanguage; - } - - public boolean isGeneratedExamplesEnabled() { - return generatedExamplesEnabled; - } - - public boolean isOperationDescriptionsEnabled() { - return operationDescriptionsEnabled; - } - - public URI getOperationDescriptionsUri() { - return operationDescriptionsUri; - } - - public boolean isDefinitionDescriptionsEnabled() { - return definitionDescriptionsEnabled; - } - - public URI getDefinitionDescriptionsUri() { - return definitionDescriptionsUri; - } - - public boolean isSeparatedDefinitionsEnabled() { - return separatedDefinitionsEnabled; - } - - public boolean isSeparatedOperationsEnabled() { - return separatedOperationsEnabled; - } - - public GroupBy getOperationsGroupedBy() { - return operationsGroupedBy; - } - - public Language getOutputLanguage() { - return outputLanguage; - } - - public int getInlineSchemaDepthLevel() { - return inlineSchemaDepthLevel; - } - - public OrderBy getTagOrderBy() { - return tagOrderBy; - } - - public Comparator getTagOrdering() { - return tagOrdering; - } - - public OrderBy getOperationOrderBy() { - return operationOrderBy; - } - - public Comparator getOperationOrdering() { - return operationOrdering; - } - - public OrderBy getDefinitionOrderBy() { - return definitionOrderBy; - } - - public Comparator getDefinitionOrdering() { - return definitionOrdering; - } - - public OrderBy getParameterOrderBy() { - return parameterOrderBy; - } - - public Comparator getParameterOrdering() { - return parameterOrdering; - } - - public OrderBy getPropertyOrderBy() { - return propertyOrderBy; - } - - public Comparator getPropertyOrdering() { - return propertyOrdering; - } - - public OrderBy getResponseOrderBy() { - return responseOrderBy; - } - - public Comparator getResponseOrdering() { - return responseOrdering; - } - - public boolean isInterDocumentCrossReferencesEnabled() { - return interDocumentCrossReferencesEnabled; - } - - public String getInterDocumentCrossReferencesPrefix() { - return interDocumentCrossReferencesPrefix; - } - - public boolean isFlatBodyEnabled() { - return flatBodyEnabled; - } - - public String getAnchorPrefix() { - return anchorPrefix; - } - - public String getOverviewDocument() { - return overviewDocument; - } - - public String getPathsDocument() { - return pathsDocument; - } - - public String getDefinitionsDocument() { - return definitionsDocument; - } - - public String getSecurityDocument() { - return securityDocument; - } - - public String getSeparatedOperationsFolder() { - return separatedOperationsFolder; - } - - public String getSeparatedDefinitionsFolder() { - return separatedDefinitionsFolder; - } - - public LineSeparator getLineSeparator() { - return lineSeparator; - } - - public static class Builder { - - private static final String PROPERTIES_PREFIX = "swagger2markup."; - private static final String PROPERTIES_DEFAULT = "/io/github/robwin/swagger2markup/config/default.properties"; - - static final Ordering OPERATION_METHOD_NATURAL_ORDERING = Ordering - .explicit(HttpMethod.POST, HttpMethod.GET, HttpMethod.PUT, HttpMethod.DELETE, HttpMethod.PATCH, HttpMethod.HEAD, HttpMethod.OPTIONS) - .onResultOf(new Function() { - public HttpMethod apply(PathOperation operation) { - return operation.getMethod(); - } - }); - - static final Ordering OPERATION_PATH_NATURAL_ORDERING = Ordering - .natural() - .onResultOf(new Function() { - public String apply(PathOperation operation) { - return operation.getPath(); - } - }); - - static final Ordering PARAMETER_IN_NATURAL_ORDERING = Ordering - .explicit("header", "path", "query", "formData", "body") - .onResultOf(new Function() { - public String apply(Parameter parameter) { - return parameter.getIn(); - } - }); - - static final Ordering PARAMETER_NAME_NATURAL_ORDERING = Ordering - .natural() - .onResultOf(new Function() { - public String apply(Parameter parameter) { - return parameter.getName(); - } - }); - - Swagger2MarkupConfig config = new Swagger2MarkupConfig(); - - Builder() { - this(new Properties()); - } - - Builder(Properties properties) { - - Properties safeProperties = new Properties(defaultProperties()); - safeProperties.putAll(properties); - - config.markupLanguage = MarkupLanguage.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "markupLanguage")); - config.generatedExamplesEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "generatedExamplesEnabled")); - config.operationDescriptionsEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "operationDescriptionsEnabled")); - if (safeProperties.containsKey(PROPERTIES_PREFIX + "operationDescriptionsUri")) - config.operationDescriptionsUri = URI.create(safeProperties.getProperty(PROPERTIES_PREFIX + "operationDescriptionsUri")); - config.definitionDescriptionsEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "definitionDescriptionsEnabled")); - if (safeProperties.containsKey(PROPERTIES_PREFIX + "definitionDescriptionsUri")) - config.definitionDescriptionsUri = URI.create(safeProperties.getProperty(PROPERTIES_PREFIX + "definitionDescriptionsUri")); - config.separatedDefinitionsEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "separatedDefinitionsEnabled")); - config.separatedOperationsEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "separatedOperationsEnabled")); - config.operationsGroupedBy = GroupBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "operationsGroupedBy")); - config.outputLanguage = Language.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "outputLanguage")); - config.inlineSchemaDepthLevel = Integer.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "inlineSchemaDepthLevel")); - config.interDocumentCrossReferencesEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "interDocumentCrossReferencesEnabled")); - config.interDocumentCrossReferencesPrefix = safeProperties.getProperty(PROPERTIES_PREFIX + "interDocumentCrossReferencesPrefix"); - config.flatBodyEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "flatBodyEnabled")); - config.anchorPrefix = safeProperties.getProperty(PROPERTIES_PREFIX + "anchorPrefix"); - config.overviewDocument = safeProperties.getProperty(PROPERTIES_PREFIX + "overviewDocument"); - config.pathsDocument = safeProperties.getProperty(PROPERTIES_PREFIX + "pathsDocument"); - config.definitionsDocument = safeProperties.getProperty(PROPERTIES_PREFIX + "definitionsDocument"); - config.securityDocument = safeProperties.getProperty(PROPERTIES_PREFIX + "securityDocument"); - config.separatedOperationsFolder = safeProperties.getProperty(PROPERTIES_PREFIX + "separatedOperationsFolder"); - config.separatedDefinitionsFolder = safeProperties.getProperty(PROPERTIES_PREFIX + "separatedDefinitionsFolder"); - config.tagOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "tagOrderBy")); - config.operationOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "operationOrderBy")); - config.definitionOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "definitionOrderBy")); - config.parameterOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "parameterOrderBy")); - config.propertyOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "propertyOrderBy")); - config.responseOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "responseOrderBy")); - String lineSeparator = safeProperties.getProperty(PROPERTIES_PREFIX + "lineSeparator"); - if(StringUtils.isNoneBlank(lineSeparator)){ - config.lineSeparator = LineSeparator.valueOf(lineSeparator); - } - } - - private Properties defaultProperties() { - Properties defaultProperties = new Properties(); - try { - InputStream defaultPropertiesStream = Swagger2MarkupConfig.class.getResourceAsStream(PROPERTIES_DEFAULT); - if (defaultPropertiesStream == null) - throw new RuntimeException(String.format("Can't load default properties '%s'", PROPERTIES_DEFAULT)); - defaultProperties.load(defaultPropertiesStream); - } catch (IOException e) { - throw new RuntimeException(String.format("Can't load default properties '%s'", PROPERTIES_DEFAULT), e); - } - - return defaultProperties; - } - - public Swagger2MarkupConfig build() { - buildNaturalOrdering(); - - return config; - } - - private void buildNaturalOrdering() { - if (config.tagOrderBy == OrderBy.NATURAL) - config.tagOrdering = Ordering.natural(); - if (config.operationOrderBy == OrderBy.NATURAL) - config.operationOrdering = OPERATION_PATH_NATURAL_ORDERING.compound(OPERATION_METHOD_NATURAL_ORDERING); - if (config.definitionOrderBy == OrderBy.NATURAL) - config.definitionOrdering = Ordering.natural(); - if (config.parameterOrderBy == OrderBy.NATURAL) - config.parameterOrdering = PARAMETER_IN_NATURAL_ORDERING.compound(PARAMETER_NAME_NATURAL_ORDERING); - if (config.propertyOrderBy == OrderBy.NATURAL) - config.propertyOrdering = Ordering.natural(); - if (config.responseOrderBy == OrderBy.NATURAL) - config.responseOrdering = Ordering.natural(); - } - - /** - * Specifies the markup language which should be used to generate the files - * - * @param markupLanguage the markup language which is used to generate the files - * @return this builder - */ - public Builder withMarkupLanguage(MarkupLanguage markupLanguage) { - Validate.notNull(markupLanguage, "%s must not be null", "markupLanguage"); - config.markupLanguage = markupLanguage; - return this; - } - - /** - * Include generated examples into the Paths document - * - * @return this builder - */ - public Builder withGeneratedExamples() { - config.generatedExamplesEnabled = true; - return this; - } - - /** - * Include hand-written descriptions into the Paths document - * - * @param operationDescriptionsUri the URI to the folder where the description documents reside. - * @return this builder - */ - public Builder withOperationDescriptions(URI operationDescriptionsUri) { - Validate.notNull(operationDescriptionsUri, "%s must not be null", "operationDescriptionsUri"); - config.operationDescriptionsEnabled = true; - config.operationDescriptionsUri = operationDescriptionsUri; - return this; - } - - /** - * Include hand-written descriptions into the Paths document - * - * @param operationDescriptionsPath the path to the folder where the description documents reside. - * @return this builder - */ - public Builder withOperationDescriptions(Path operationDescriptionsPath) { - Validate.notNull(operationDescriptionsPath, "%s must not be null", "operationDescriptionsPath"); - return withOperationDescriptions(operationDescriptionsPath.toUri()); - } - - /** - * Include hand-written descriptions into the Paths document.
- * Use default URI. - * - * @return this builder - */ - public Builder withOperationDescriptions() { - config.operationDescriptionsEnabled = true; - return this; - } - - /** - * Include hand-written descriptions into the Definitions document - * - * @param definitionDescriptionsUri the URI to the folder where the description documents reside. - * @return this builder - */ - public Builder withDefinitionDescriptions(URI definitionDescriptionsUri) { - Validate.notNull(definitionDescriptionsUri, "%s must not be null", "definitionDescriptionsUri"); - config.definitionDescriptionsEnabled = true; - config.definitionDescriptionsUri = definitionDescriptionsUri; - return this; - } - - /** - * Include hand-written descriptions into the Definitions document - * - * @param definitionDescriptionsPath the path to the folder where the description documents reside. - * @return this builder - */ - public Builder withDefinitionDescriptions(Path definitionDescriptionsPath) { - Validate.notNull(definitionDescriptionsPath, "%s must not be null", "definitionDescriptionsPath"); - return withDefinitionDescriptions(definitionDescriptionsPath.toUri()); - } - - /** - * Include hand-written descriptions into the Definitions document.
- * Use default URI. - * - * @return this builder - */ - public Builder withDefinitionDescriptions() { - config.definitionDescriptionsEnabled = true; - return this; - } - - /** - * In addition to the definitions file, also create separate definition files for each model definition. - * - * @return this builder - */ - public Builder withSeparatedDefinitions() { - config.separatedDefinitionsEnabled = true; - return this; - } - - - /** - * In addition to the paths file, also create separate path files for each path. - * - * @return this builder - */ - public Builder withSeparatedOperations() { - config.separatedOperationsEnabled = true; - return this; - } - - - /** - * Specifies if the paths should be grouped by tags or stay as-is. - * - * @param pathsGroupedBy the GroupBy enum - * @return this builder - */ - public Builder withPathsGroupedBy(GroupBy pathsGroupedBy) { - Validate.notNull(pathsGroupedBy, "%s must not be null", "pathsGroupedBy"); - config.operationsGroupedBy = pathsGroupedBy; - return this; - } - - /** - * Specifies labels language of output files - * - * @param language the enum - * @return this builder - */ - public Builder withOutputLanguage(Language language) { - Validate.notNull(language, "%s must not be null", "language"); - config.outputLanguage = language; - return this; - } - - /** - * Specifies maximum depth level for inline object schema displaying (0 = no inline schemasEnabled) - * - * @param inlineSchemaDepthLevel number of recursion levels for inline schemasEnabled display - * @return this builder - */ - public Builder withInlineSchemaDepthLevel(int inlineSchemaDepthLevel) { - Validate.isTrue(inlineSchemaDepthLevel >= 0, "%s must be >= 0", "inlineSchemaDepthLevel"); - config.inlineSchemaDepthLevel = inlineSchemaDepthLevel; - return this; - } - - /** - * Specifies tag ordering.
- * By default tag ordering == {@link io.github.swagger2markup.OrderBy#NATURAL}.
- * Use {@link #withTagOrdering(Comparator)} to set a custom ordering. - * - * @param orderBy tag ordering - * @return this builder - */ - public Builder withTagOrdering(OrderBy orderBy) { - Validate.notNull(orderBy, "%s must not be null", "orderBy"); - Validate.isTrue(orderBy != OrderBy.CUSTOM, "You must provide a custom comparator if orderBy == OrderBy.CUSTOM"); - config.tagOrderBy = orderBy; - return this; - } - - /** - * Specifies a custom comparator function to order tags. - * - * @param tagOrdering tag ordering - * @return this builder - */ - public Builder withTagOrdering(Comparator tagOrdering) { - Validate.notNull(tagOrdering, "%s must not be null", "tagOrdering"); - config.tagOrderBy = OrderBy.CUSTOM; - config.tagOrdering = tagOrdering; - return this; - } - - /** - * Specifies operation ordering.
- * By default operation ordering == {@link io.github.swagger2markup.OrderBy#AS_IS}.
- * Use {@link #withOperationOrdering(Comparator)} to set a custom ordering. - * - * @param orderBy operation ordering - * @return this builder - */ - public Builder withOperationOrdering(OrderBy orderBy) { - Validate.notNull(orderBy, "%s must not be null", "orderBy"); - Validate.isTrue(orderBy != OrderBy.CUSTOM, "You must provide a custom comparator if orderBy == OrderBy.CUSTOM"); - config.operationOrderBy = orderBy; - return this; - } - - /** - * Specifies a custom comparator function to order operations. - * - * @param operationOrdering operation ordering - * @return this builder - */ - public Builder withOperationOrdering(Comparator operationOrdering) { - Validate.notNull(operationOrdering, "%s must not be null", "operationOrdering"); - config.operationOrderBy = OrderBy.CUSTOM; - config.operationOrdering = operationOrdering; - return this; - } - - /** - * Specifies definition ordering.
- * By default definition ordering == {@link io.github.swagger2markup.OrderBy#NATURAL}.
- * Use {@link #withDefinitionOrdering(Comparator)} to set a custom ordering. - * - * @param orderBy definition ordering - * @return this builder - */ - public Builder withDefinitionOrdering(OrderBy orderBy) { - Validate.notNull(orderBy, "%s must not be null", "orderBy"); - Validate.isTrue(orderBy != OrderBy.CUSTOM, "You must provide a custom comparator if orderBy == OrderBy.CUSTOM"); - config.definitionOrderBy = orderBy; - return this; - } - - /** - * Specifies a custom comparator function to order definitions. - * - * @param definitionOrdering definition ordering - * @return this builder - */ - public Builder withDefinitionOrdering(Comparator definitionOrdering) { - Validate.notNull(definitionOrdering, "%s must not be null", "definitionOrdering"); - config.definitionOrderBy = OrderBy.CUSTOM; - config.definitionOrdering = definitionOrdering; - return this; - } - - /** - * Specifies parameter ordering.
- * By default parameter ordering == {@link OrderBy#NATURAL}.
- * Use {@link #withParameterOrdering(Comparator)} to set a custom ordering. - * - * @param orderBy parameter ordering - * @return this builder - */ - public Builder withParameterOrdering(OrderBy orderBy) { - Validate.notNull(orderBy, "%s must not be null", "orderBy"); - Validate.isTrue(orderBy != OrderBy.CUSTOM, "You must provide a custom comparator if orderBy == OrderBy.CUSTOM"); - config.parameterOrderBy = orderBy; - return this; - } - - /** - * Specifies a custom comparator function to order parameters. - * - * @param parameterOrdering parameter ordering - * @return this builder - */ - public Builder withParameterOrdering(Comparator parameterOrdering) { - Validate.notNull(parameterOrdering, "%s must not be null", "parameterOrdering"); - - config.parameterOrderBy = OrderBy.CUSTOM; - config.parameterOrdering = parameterOrdering; - return this; - } - - /** - * Specifies property ordering.
- * By default property ordering == {@link io.github.swagger2markup.OrderBy#NATURAL}.
- * Use {@link #withPropertyOrdering(Comparator)} to set a custom ordering. - * - * @param orderBy property ordering - * @return this builder - */ - public Builder withPropertyOrdering(OrderBy orderBy) { - Validate.notNull(orderBy, "%s must not be null", "orderBy"); - Validate.isTrue(orderBy != OrderBy.CUSTOM, "You must provide a custom comparator if orderBy == OrderBy.CUSTOM"); - config.propertyOrderBy = orderBy; - return this; - } - - /** - * Specifies a custom comparator function to order propertys. - * - * @param propertyOrdering property ordering - * @return this builder - */ - public Builder withPropertyOrdering(Comparator propertyOrdering) { - Validate.notNull(propertyOrdering, "%s must not be null", "propertyOrdering"); - - config.propertyOrderBy = OrderBy.CUSTOM; - config.propertyOrdering = propertyOrdering; - return this; - } - - /** - * Specifies response ordering.
- * By default response ordering == {@link io.github.swagger2markup.OrderBy#NATURAL}.
- * Use {@link #withResponseOrdering(Comparator)} to set a custom ordering. - * - * @param orderBy response ordering - * @return this builder - */ - public Builder withResponseOrdering(OrderBy orderBy) { - Validate.notNull(orderBy, "%s must not be null", "orderBy"); - Validate.isTrue(orderBy != OrderBy.CUSTOM, "You must provide a custom comparator if orderBy == OrderBy.CUSTOM"); - config.responseOrderBy = orderBy; - return this; - } - - /** - * Specifies a custom comparator function to order responses. - * - * @param responseOrdering response ordering - * @return this builder - */ - public Builder withResponseOrdering(Comparator responseOrdering) { - Validate.notNull(responseOrdering, "%s must not be null", "responseOrdering"); - - config.responseOrderBy = OrderBy.CUSTOM; - config.responseOrdering = responseOrdering; - return this; - } - - /** - * Enable use of inter-document cross-references when needed - * - * @param prefix Prefix to document in all inter-document cross-references. - * @return this builder - */ - public Builder withInterDocumentCrossReferences(String prefix) { - Validate.notNull(prefix, "%s must not be null", "prefix"); - config.interDocumentCrossReferencesEnabled = true; - config.interDocumentCrossReferencesPrefix = prefix; - return this; - } - - /** - * Enable use of inter-document cross-references when needed. - * - * @return this builder - */ - public Builder withInterDocumentCrossReferences() { - config.interDocumentCrossReferencesEnabled = true; - return this; - } - - /** - * Optionally isolate the body parameter, if any, from other parameters - * - * @return this builder - */ - public Builder withFlatBody() { - config.flatBodyEnabled = true; - return this; - } - - /** - * Optionally prefix all anchors for unicity - *. - * @param anchorPrefix anchor prefix. - * @return this builder - */ - public Builder withAnchorPrefix(String anchorPrefix) { - Validate.notNull(anchorPrefix, "%s must no be null", "anchorPrefix"); - config.anchorPrefix = anchorPrefix; - return this; - } - - /** - * Specifies the line separator which should be used . - * - * @param lineSeparator the lineSeparator - * @return this builder - */ - public Builder withLineSeparator(LineSeparator lineSeparator) { - Validate.notNull(lineSeparator, "%s must no be null", "lineSeparator"); - config.lineSeparator = lineSeparator; - return this; - } - - } - -} \ No newline at end of file + +public interface Swagger2MarkupConfig { + MarkupLanguage getMarkupLanguage(); + + boolean isGeneratedExamplesEnabled(); + + boolean isOperationDescriptionsEnabled(); + + URI getOperationDescriptionsUri(); + + boolean isDefinitionDescriptionsEnabled(); + + URI getDefinitionDescriptionsUri(); + + boolean isSeparatedDefinitionsEnabled(); + + boolean isSeparatedOperationsEnabled(); + + GroupBy getOperationsGroupedBy(); + + Language getOutputLanguage(); + + int getInlineSchemaDepthLevel(); + + OrderBy getTagOrderBy(); + + Comparator getTagOrdering(); + + OrderBy getOperationOrderBy(); + + Comparator getOperationOrdering(); + + OrderBy getDefinitionOrderBy(); + + Comparator getDefinitionOrdering(); + + OrderBy getParameterOrderBy(); + + Comparator getParameterOrdering(); + + OrderBy getPropertyOrderBy(); + + Comparator getPropertyOrdering(); + + OrderBy getResponseOrderBy(); + + Comparator getResponseOrdering(); + + boolean isInterDocumentCrossReferencesEnabled(); + + String getInterDocumentCrossReferencesPrefix(); + + boolean isFlatBodyEnabled(); + + String getAnchorPrefix(); + + String getOverviewDocument(); + + String getPathsDocument(); + + String getDefinitionsDocument(); + + String getSecurityDocument(); + + String getSeparatedOperationsFolder(); + + String getSeparatedDefinitionsFolder(); + + LineSeparator getLineSeparator(); +} diff --git a/src/main/java/io/github/swagger2markup/Swagger2MarkupConverter.java b/src/main/java/io/github/swagger2markup/Swagger2MarkupConverter.java index e0b9f2bb..e4aa9ec8 100644 --- a/src/main/java/io/github/swagger2markup/Swagger2MarkupConverter.java +++ b/src/main/java/io/github/swagger2markup/Swagger2MarkupConverter.java @@ -16,6 +16,8 @@ package io.github.swagger2markup; import com.google.common.annotations.VisibleForTesting; +import io.github.swagger2markup.builder.Swagger2MarkupConfigBuilder; +import io.github.swagger2markup.builder.Swagger2MarkupExtensionRegistryBuilder; import io.github.swagger2markup.internal.document.builder.DefinitionsDocumentBuilder; import io.github.swagger2markup.internal.document.builder.OverviewDocumentBuilder; import io.github.swagger2markup.internal.document.builder.PathsDocumentBuilder; @@ -244,13 +246,12 @@ public class Swagger2MarkupConverter { public Swagger2MarkupConverter build() { if (config == null) - config = Swagger2MarkupConfig.ofDefaults().build(); + config = new Swagger2MarkupConfigBuilder().build(); if (extensionRegistry == null) - extensionRegistry = Swagger2MarkupExtensionRegistry.ofEmpty().build(); + extensionRegistry = new Swagger2MarkupExtensionRegistryBuilder().build(); Context context = new Context(config, extensionRegistry, swagger, swaggerLocation); - config.setGlobalContext(context); initExtensions(context); diff --git a/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java b/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java index f9a0984d..303d647d 100644 --- a/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java +++ b/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java @@ -13,125 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package io.github.swagger2markup; import io.github.swagger2markup.spi.*; -import java.util.ArrayList; import java.util.List; -import static java.util.ServiceLoader.load; -import static org.apache.commons.collections4.IteratorUtils.toList; +public interface Swagger2MarkupExtensionRegistry { + List getSwaggerModelExtensions(); -public class Swagger2MarkupExtensionRegistry { + List getOverviewDocumentExtensions(); - private Context context; + List getDefinitionsDocumentExtensions(); - private static class Context { - public final List swaggerModelExtensions; - public final List overviewDocumentExtensions; - public final List definitionsDocumentExtensions; - public final List pathsDocumentExtensions; - public final List securityDocumentExtensions; + List getSecurityDocumentExtensions(); - public Context(List swaggerModelExtensions, - List overviewDocumentExtensions, - List definitionsDocumentExtensions, - List pathsDocumentExtensions, - List securityDocumentExtensions){ - this.swaggerModelExtensions = swaggerModelExtensions; - this.overviewDocumentExtensions = overviewDocumentExtensions; - this.definitionsDocumentExtensions = definitionsDocumentExtensions; - this.pathsDocumentExtensions = pathsDocumentExtensions; - this.securityDocumentExtensions = securityDocumentExtensions; - } - } - - Swagger2MarkupExtensionRegistry(Context context) { - this.context = context; - } - - public List getSwaggerModelExtensions(){ - return context.swaggerModelExtensions; - } - - public List getOverviewDocumentExtensions(){ - return context.overviewDocumentExtensions; - } - - public List getDefinitionsDocumentExtensions(){ - return context.definitionsDocumentExtensions; - } - - public List getSecurityDocumentExtensions(){ - return context.securityDocumentExtensions; - } - - public List getPathsDocumentExtensions(){ - return context.pathsDocumentExtensions; - } - - public static Builder ofEmpty() { - Context context = new Context( - new ArrayList(), - new ArrayList(), - new ArrayList(), - new ArrayList(), - new ArrayList()); - return new Builder(context); - } - - public static Builder ofServiceLoader() { - List swaggerModelExtensions = toList(load(SwaggerModelExtension.class).iterator()); - List overviewDocumentExtensions = toList(load(OverviewDocumentExtension.class).iterator()); - List definitionsDocumentExtensions = toList(load(DefinitionsDocumentExtension.class).iterator()); - List pathsDocumentExtensions = toList(load(PathsDocumentExtension.class).iterator()); - List securityDocumentExtensions = toList(load(SecurityDocumentExtension.class).iterator()); - Context context = new Context( - swaggerModelExtensions, - overviewDocumentExtensions, - definitionsDocumentExtensions, - pathsDocumentExtensions, - securityDocumentExtensions); - return new Builder(context); - } - - public static class Builder { - - private final Context context; - - Builder(Context context) { - this.context = context; - } - - public Swagger2MarkupExtensionRegistry build() { - return new Swagger2MarkupExtensionRegistry(context); - } - - public Builder withSwaggerModelExtension(SwaggerModelExtension extension) { - context.swaggerModelExtensions.add(extension); - return this; - } - - public Builder withOverviewDocumentExtension(OverviewDocumentExtension extension) { - context.overviewDocumentExtensions.add(extension); - return this; - } - - public Builder withDefinitionsDocumentExtension(DefinitionsDocumentExtension extension) { - context.definitionsDocumentExtensions.add(extension); - return this; - } - - public Builder withPathsDocumentExtension(PathsDocumentExtension extension) { - context.pathsDocumentExtensions.add(extension); - return this; - } - - public Builder withSecurityDocumentExtension(SecurityDocumentExtension extension) { - context.securityDocumentExtensions.add(extension); - return this; - } - } + List getPathsDocumentExtensions(); } diff --git a/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java b/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java new file mode 100644 index 00000000..99a063cf --- /dev/null +++ b/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java @@ -0,0 +1,747 @@ +/* + * Copyright 2016 Robert Winkler + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.github.swagger2markup.builder; + +import com.google.common.base.Function; +import com.google.common.collect.Ordering; +import io.github.robwin.markup.builder.LineSeparator; +import io.github.robwin.markup.builder.MarkupLanguage; +import io.github.swagger2markup.GroupBy; +import io.github.swagger2markup.Language; +import io.github.swagger2markup.OrderBy; +import io.github.swagger2markup.Swagger2MarkupConfig; +import io.github.swagger2markup.model.PathOperation; +import io.swagger.models.HttpMethod; +import io.swagger.models.parameters.Parameter; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.nio.file.Path; +import java.util.Comparator; +import java.util.Properties; + +public class Swagger2MarkupConfigBuilder { + + private static final Logger logger = LoggerFactory.getLogger(Swagger2MarkupConfigBuilder.class); + + private static final String PROPERTIES_PREFIX = "swagger2markup."; + private static final String PROPERTIES_DEFAULT = "/io/github/robwin/swagger2markup/config/default.properties"; + + static final Ordering OPERATION_METHOD_NATURAL_ORDERING = Ordering + .explicit(HttpMethod.POST, HttpMethod.GET, HttpMethod.PUT, HttpMethod.DELETE, HttpMethod.PATCH, HttpMethod.HEAD, HttpMethod.OPTIONS) + .onResultOf(new Function() { + public HttpMethod apply(PathOperation operation) { + return operation.getMethod(); + } + }); + + static final Ordering OPERATION_PATH_NATURAL_ORDERING = Ordering + .natural() + .onResultOf(new Function() { + public String apply(PathOperation operation) { + return operation.getPath(); + } + }); + + static final Ordering PARAMETER_IN_NATURAL_ORDERING = Ordering + .explicit("header", "path", "query", "formData", "body") + .onResultOf(new Function() { + public String apply(Parameter parameter) { + return parameter.getIn(); + } + }); + + static final Ordering PARAMETER_NAME_NATURAL_ORDERING = Ordering + .natural() + .onResultOf(new Function() { + public String apply(Parameter parameter) { + return parameter.getName(); + } + }); + + DefaultSwagger2MarkupConfig config = new DefaultSwagger2MarkupConfig(); + + public Swagger2MarkupConfigBuilder() { + this(new Properties()); + } + + public Swagger2MarkupConfigBuilder(Properties properties) { + + Properties safeProperties = new Properties(defaultProperties()); + safeProperties.putAll(properties); + + config.markupLanguage = MarkupLanguage.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "markupLanguage")); + config.generatedExamplesEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "generatedExamplesEnabled")); + config.operationDescriptionsEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "operationDescriptionsEnabled")); + if (safeProperties.containsKey(PROPERTIES_PREFIX + "operationDescriptionsUri")) + config.operationDescriptionsUri = URI.create(safeProperties.getProperty(PROPERTIES_PREFIX + "operationDescriptionsUri")); + config.definitionDescriptionsEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "definitionDescriptionsEnabled")); + if (safeProperties.containsKey(PROPERTIES_PREFIX + "definitionDescriptionsUri")) + config.definitionDescriptionsUri = URI.create(safeProperties.getProperty(PROPERTIES_PREFIX + "definitionDescriptionsUri")); + config.separatedDefinitionsEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "separatedDefinitionsEnabled")); + config.separatedOperationsEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "separatedOperationsEnabled")); + config.operationsGroupedBy = GroupBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "operationsGroupedBy")); + config.outputLanguage = Language.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "outputLanguage")); + config.inlineSchemaDepthLevel = Integer.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "inlineSchemaDepthLevel")); + config.interDocumentCrossReferencesEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "interDocumentCrossReferencesEnabled")); + config.interDocumentCrossReferencesPrefix = safeProperties.getProperty(PROPERTIES_PREFIX + "interDocumentCrossReferencesPrefix"); + config.flatBodyEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "flatBodyEnabled")); + config.anchorPrefix = safeProperties.getProperty(PROPERTIES_PREFIX + "anchorPrefix"); + config.overviewDocument = safeProperties.getProperty(PROPERTIES_PREFIX + "overviewDocument"); + config.pathsDocument = safeProperties.getProperty(PROPERTIES_PREFIX + "pathsDocument"); + config.definitionsDocument = safeProperties.getProperty(PROPERTIES_PREFIX + "definitionsDocument"); + config.securityDocument = safeProperties.getProperty(PROPERTIES_PREFIX + "securityDocument"); + config.separatedOperationsFolder = safeProperties.getProperty(PROPERTIES_PREFIX + "separatedOperationsFolder"); + config.separatedDefinitionsFolder = safeProperties.getProperty(PROPERTIES_PREFIX + "separatedDefinitionsFolder"); + config.tagOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "tagOrderBy")); + config.operationOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "operationOrderBy")); + config.definitionOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "definitionOrderBy")); + config.parameterOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "parameterOrderBy")); + config.propertyOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "propertyOrderBy")); + config.responseOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "responseOrderBy")); + String lineSeparator = safeProperties.getProperty(PROPERTIES_PREFIX + "lineSeparator"); + if(StringUtils.isNoneBlank(lineSeparator)){ + config.lineSeparator = LineSeparator.valueOf(lineSeparator); + } + } + + private Properties defaultProperties() { + Properties defaultProperties = new Properties(); + try { + InputStream defaultPropertiesStream = Swagger2MarkupConfigBuilder.class.getResourceAsStream(PROPERTIES_DEFAULT); + if (defaultPropertiesStream == null) + throw new RuntimeException(String.format("Can't load default properties '%s'", PROPERTIES_DEFAULT)); + defaultProperties.load(defaultPropertiesStream); + } catch (IOException e) { + throw new RuntimeException(String.format("Can't load default properties '%s'", PROPERTIES_DEFAULT), e); + } + + return defaultProperties; + } + + public Swagger2MarkupConfig build() { + buildNaturalOrdering(); + + return config; + } + + private void buildNaturalOrdering() { + if (config.tagOrderBy == OrderBy.NATURAL) + config.tagOrdering = Ordering.natural(); + if (config.operationOrderBy == OrderBy.NATURAL) + config.operationOrdering = OPERATION_PATH_NATURAL_ORDERING.compound(OPERATION_METHOD_NATURAL_ORDERING); + if (config.definitionOrderBy == OrderBy.NATURAL) + config.definitionOrdering = Ordering.natural(); + if (config.parameterOrderBy == OrderBy.NATURAL) + config.parameterOrdering = PARAMETER_IN_NATURAL_ORDERING.compound(PARAMETER_NAME_NATURAL_ORDERING); + if (config.propertyOrderBy == OrderBy.NATURAL) + config.propertyOrdering = Ordering.natural(); + if (config.responseOrderBy == OrderBy.NATURAL) + config.responseOrdering = Ordering.natural(); + } + + /** + * Specifies the markup language which should be used to generate the files + * + * @param markupLanguage the markup language which is used to generate the files + * @return this builder + */ + public Swagger2MarkupConfigBuilder withMarkupLanguage(MarkupLanguage markupLanguage) { + Validate.notNull(markupLanguage, "%s must not be null", "markupLanguage"); + config.markupLanguage = markupLanguage; + return this; + } + + /** + * Include generated examples into the Paths document + * + * @return this builder + */ + public Swagger2MarkupConfigBuilder withGeneratedExamples() { + config.generatedExamplesEnabled = true; + return this; + } + + /** + * Include hand-written descriptions into the Paths document + * + * @param operationDescriptionsUri the URI to the folder where the description documents reside. + * @return this builder + */ + public Swagger2MarkupConfigBuilder withOperationDescriptions(URI operationDescriptionsUri) { + Validate.notNull(operationDescriptionsUri, "%s must not be null", "operationDescriptionsUri"); + config.operationDescriptionsEnabled = true; + config.operationDescriptionsUri = operationDescriptionsUri; + return this; + } + + /** + * Include hand-written descriptions into the Paths document + * + * @param operationDescriptionsPath the path to the folder where the description documents reside. + * @return this builder + */ + public Swagger2MarkupConfigBuilder withOperationDescriptions(Path operationDescriptionsPath) { + Validate.notNull(operationDescriptionsPath, "%s must not be null", "operationDescriptionsPath"); + return withOperationDescriptions(operationDescriptionsPath.toUri()); + } + + /** + * Include hand-written descriptions into the Paths document.
+ * Use default URI. + * + * @return this builder + */ + public Swagger2MarkupConfigBuilder withOperationDescriptions() { + config.operationDescriptionsEnabled = true; + return this; + } + + /** + * Include hand-written descriptions into the Definitions document + * + * @param definitionDescriptionsUri the URI to the folder where the description documents reside. + * @return this builder + */ + public Swagger2MarkupConfigBuilder withDefinitionDescriptions(URI definitionDescriptionsUri) { + Validate.notNull(definitionDescriptionsUri, "%s must not be null", "definitionDescriptionsUri"); + config.definitionDescriptionsEnabled = true; + config.definitionDescriptionsUri = definitionDescriptionsUri; + return this; + } + + /** + * Include hand-written descriptions into the Definitions document + * + * @param definitionDescriptionsPath the path to the folder where the description documents reside. + * @return this builder + */ + public Swagger2MarkupConfigBuilder withDefinitionDescriptions(Path definitionDescriptionsPath) { + Validate.notNull(definitionDescriptionsPath, "%s must not be null", "definitionDescriptionsPath"); + return withDefinitionDescriptions(definitionDescriptionsPath.toUri()); + } + + /** + * Include hand-written descriptions into the Definitions document.
+ * Use default URI. + * + * @return this builder + */ + public Swagger2MarkupConfigBuilder withDefinitionDescriptions() { + config.definitionDescriptionsEnabled = true; + return this; + } + + /** + * In addition to the definitions file, also create separate definition files for each model definition. + * + * @return this builder + */ + public Swagger2MarkupConfigBuilder withSeparatedDefinitions() { + config.separatedDefinitionsEnabled = true; + return this; + } + + + /** + * In addition to the paths file, also create separate path files for each path. + * + * @return this builder + */ + public Swagger2MarkupConfigBuilder withSeparatedOperations() { + config.separatedOperationsEnabled = true; + return this; + } + + + /** + * Specifies if the paths should be grouped by tags or stay as-is. + * + * @param pathsGroupedBy the GroupBy enum + * @return this builder + */ + public Swagger2MarkupConfigBuilder withPathsGroupedBy(GroupBy pathsGroupedBy) { + Validate.notNull(pathsGroupedBy, "%s must not be null", "pathsGroupedBy"); + config.operationsGroupedBy = pathsGroupedBy; + return this; + } + + /** + * Specifies labels language of output files + * + * @param language the enum + * @return this builder + */ + public Swagger2MarkupConfigBuilder withOutputLanguage(Language language) { + Validate.notNull(language, "%s must not be null", "language"); + config.outputLanguage = language; + return this; + } + + /** + * Specifies maximum depth level for inline object schema displaying (0 = no inline schemasEnabled) + * + * @param inlineSchemaDepthLevel number of recursion levels for inline schemasEnabled display + * @return this builder + */ + public Swagger2MarkupConfigBuilder withInlineSchemaDepthLevel(int inlineSchemaDepthLevel) { + Validate.isTrue(inlineSchemaDepthLevel >= 0, "%s must be >= 0", "inlineSchemaDepthLevel"); + config.inlineSchemaDepthLevel = inlineSchemaDepthLevel; + return this; + } + + /** + * Specifies tag ordering.
+ * By default tag ordering == {@link io.github.swagger2markup.OrderBy#NATURAL}.
+ * Use {@link #withTagOrdering(Comparator)} to set a custom ordering. + * + * @param orderBy tag ordering + * @return this builder + */ + public Swagger2MarkupConfigBuilder withTagOrdering(OrderBy orderBy) { + Validate.notNull(orderBy, "%s must not be null", "orderBy"); + Validate.isTrue(orderBy != OrderBy.CUSTOM, "You must provide a custom comparator if orderBy == OrderBy.CUSTOM"); + config.tagOrderBy = orderBy; + return this; + } + + /** + * Specifies a custom comparator function to order tags. + * + * @param tagOrdering tag ordering + * @return this builder + */ + public Swagger2MarkupConfigBuilder withTagOrdering(Comparator tagOrdering) { + Validate.notNull(tagOrdering, "%s must not be null", "tagOrdering"); + config.tagOrderBy = OrderBy.CUSTOM; + config.tagOrdering = tagOrdering; + return this; + } + + /** + * Specifies operation ordering.
+ * By default operation ordering == {@link io.github.swagger2markup.OrderBy#AS_IS}.
+ * Use {@link #withOperationOrdering(Comparator)} to set a custom ordering. + * + * @param orderBy operation ordering + * @return this builder + */ + public Swagger2MarkupConfigBuilder withOperationOrdering(OrderBy orderBy) { + Validate.notNull(orderBy, "%s must not be null", "orderBy"); + Validate.isTrue(orderBy != OrderBy.CUSTOM, "You must provide a custom comparator if orderBy == OrderBy.CUSTOM"); + config.operationOrderBy = orderBy; + return this; + } + + /** + * Specifies a custom comparator function to order operations. + * + * @param operationOrdering operation ordering + * @return this builder + */ + public Swagger2MarkupConfigBuilder withOperationOrdering(Comparator operationOrdering) { + Validate.notNull(operationOrdering, "%s must not be null", "operationOrdering"); + config.operationOrderBy = OrderBy.CUSTOM; + config.operationOrdering = operationOrdering; + return this; + } + + /** + * Specifies definition ordering.
+ * By default definition ordering == {@link io.github.swagger2markup.OrderBy#NATURAL}.
+ * Use {@link #withDefinitionOrdering(Comparator)} to set a custom ordering. + * + * @param orderBy definition ordering + * @return this builder + */ + public Swagger2MarkupConfigBuilder withDefinitionOrdering(OrderBy orderBy) { + Validate.notNull(orderBy, "%s must not be null", "orderBy"); + Validate.isTrue(orderBy != OrderBy.CUSTOM, "You must provide a custom comparator if orderBy == OrderBy.CUSTOM"); + config.definitionOrderBy = orderBy; + return this; + } + + /** + * Specifies a custom comparator function to order definitions. + * + * @param definitionOrdering definition ordering + * @return this builder + */ + public Swagger2MarkupConfigBuilder withDefinitionOrdering(Comparator definitionOrdering) { + Validate.notNull(definitionOrdering, "%s must not be null", "definitionOrdering"); + config.definitionOrderBy = OrderBy.CUSTOM; + config.definitionOrdering = definitionOrdering; + return this; + } + + /** + * Specifies parameter ordering.
+ * By default parameter ordering == {@link OrderBy#NATURAL}.
+ * Use {@link #withParameterOrdering(Comparator)} to set a custom ordering. + * + * @param orderBy parameter ordering + * @return this builder + */ + public Swagger2MarkupConfigBuilder withParameterOrdering(OrderBy orderBy) { + Validate.notNull(orderBy, "%s must not be null", "orderBy"); + Validate.isTrue(orderBy != OrderBy.CUSTOM, "You must provide a custom comparator if orderBy == OrderBy.CUSTOM"); + config.parameterOrderBy = orderBy; + return this; + } + + /** + * Specifies a custom comparator function to order parameters. + * + * @param parameterOrdering parameter ordering + * @return this builder + */ + public Swagger2MarkupConfigBuilder withParameterOrdering(Comparator parameterOrdering) { + Validate.notNull(parameterOrdering, "%s must not be null", "parameterOrdering"); + + config.parameterOrderBy = OrderBy.CUSTOM; + config.parameterOrdering = parameterOrdering; + return this; + } + + /** + * Specifies property ordering.
+ * By default property ordering == {@link io.github.swagger2markup.OrderBy#NATURAL}.
+ * Use {@link #withPropertyOrdering(Comparator)} to set a custom ordering. + * + * @param orderBy property ordering + * @return this builder + */ + public Swagger2MarkupConfigBuilder withPropertyOrdering(OrderBy orderBy) { + Validate.notNull(orderBy, "%s must not be null", "orderBy"); + Validate.isTrue(orderBy != OrderBy.CUSTOM, "You must provide a custom comparator if orderBy == OrderBy.CUSTOM"); + config.propertyOrderBy = orderBy; + return this; + } + + /** + * Specifies a custom comparator function to order propertys. + * + * @param propertyOrdering property ordering + * @return this builder + */ + public Swagger2MarkupConfigBuilder withPropertyOrdering(Comparator propertyOrdering) { + Validate.notNull(propertyOrdering, "%s must not be null", "propertyOrdering"); + + config.propertyOrderBy = OrderBy.CUSTOM; + config.propertyOrdering = propertyOrdering; + return this; + } + + /** + * Specifies response ordering.
+ * By default response ordering == {@link io.github.swagger2markup.OrderBy#NATURAL}.
+ * Use {@link #withResponseOrdering(Comparator)} to set a custom ordering. + * + * @param orderBy response ordering + * @return this builder + */ + public Swagger2MarkupConfigBuilder withResponseOrdering(OrderBy orderBy) { + Validate.notNull(orderBy, "%s must not be null", "orderBy"); + Validate.isTrue(orderBy != OrderBy.CUSTOM, "You must provide a custom comparator if orderBy == OrderBy.CUSTOM"); + config.responseOrderBy = orderBy; + return this; + } + + /** + * Specifies a custom comparator function to order responses. + * + * @param responseOrdering response ordering + * @return this builder + */ + public Swagger2MarkupConfigBuilder withResponseOrdering(Comparator responseOrdering) { + Validate.notNull(responseOrdering, "%s must not be null", "responseOrdering"); + + config.responseOrderBy = OrderBy.CUSTOM; + config.responseOrdering = responseOrdering; + return this; + } + + /** + * Enable use of inter-document cross-references when needed + * + * @param prefix Prefix to document in all inter-document cross-references. + * @return this builder + */ + public Swagger2MarkupConfigBuilder withInterDocumentCrossReferences(String prefix) { + Validate.notNull(prefix, "%s must not be null", "prefix"); + config.interDocumentCrossReferencesEnabled = true; + config.interDocumentCrossReferencesPrefix = prefix; + return this; + } + + /** + * Enable use of inter-document cross-references when needed. + * + * @return this builder + */ + public Swagger2MarkupConfigBuilder withInterDocumentCrossReferences() { + config.interDocumentCrossReferencesEnabled = true; + return this; + } + + /** + * Optionally isolate the body parameter, if any, from other parameters + * + * @return this builder + */ + public Swagger2MarkupConfigBuilder withFlatBody() { + config.flatBodyEnabled = true; + return this; + } + + /** + * Optionally prefix all anchors for unicity + *. + * @param anchorPrefix anchor prefix. + * @return this builder + */ + public Swagger2MarkupConfigBuilder withAnchorPrefix(String anchorPrefix) { + Validate.notNull(anchorPrefix, "%s must no be null", "anchorPrefix"); + config.anchorPrefix = anchorPrefix; + return this; + } + + /** + * Specifies the line separator which should be used . + * + * @param lineSeparator the lineSeparator + * @return this builder + */ + public Swagger2MarkupConfigBuilder withLineSeparator(LineSeparator lineSeparator) { + Validate.notNull(lineSeparator, "%s must no be null", "lineSeparator"); + config.lineSeparator = lineSeparator; + return this; + } + + static class DefaultSwagger2MarkupConfig implements Swagger2MarkupConfig{ + + private MarkupLanguage markupLanguage; + private boolean generatedExamplesEnabled; + private boolean operationDescriptionsEnabled; + private URI operationDescriptionsUri; + private boolean definitionDescriptionsEnabled; + private URI definitionDescriptionsUri; + private boolean separatedDefinitionsEnabled; + private boolean separatedOperationsEnabled; + private GroupBy operationsGroupedBy; + private Language outputLanguage; + private int inlineSchemaDepthLevel; + private OrderBy tagOrderBy; + private Comparator tagOrdering; + private OrderBy operationOrderBy; + private Comparator operationOrdering; + private OrderBy definitionOrderBy; + private Comparator definitionOrdering; + private OrderBy parameterOrderBy; + private Comparator parameterOrdering; + private OrderBy propertyOrderBy; + private Comparator propertyOrdering; + private OrderBy responseOrderBy; + private Comparator responseOrdering; + private boolean interDocumentCrossReferencesEnabled; + private String interDocumentCrossReferencesPrefix; + private boolean flatBodyEnabled; + private String anchorPrefix; + private LineSeparator lineSeparator; + + private String overviewDocument; + private String pathsDocument; + private String definitionsDocument; + private String securityDocument; + private String separatedOperationsFolder; + private String separatedDefinitionsFolder; + + @Override + public MarkupLanguage getMarkupLanguage() { + return markupLanguage; + } + + @Override + public boolean isGeneratedExamplesEnabled() { + return generatedExamplesEnabled; + } + + @Override + public boolean isOperationDescriptionsEnabled() { + return operationDescriptionsEnabled; + } + + @Override + public URI getOperationDescriptionsUri() { + return operationDescriptionsUri; + } + + @Override + public boolean isDefinitionDescriptionsEnabled() { + return definitionDescriptionsEnabled; + } + + @Override + public URI getDefinitionDescriptionsUri() { + return definitionDescriptionsUri; + } + + @Override + public boolean isSeparatedDefinitionsEnabled() { + return separatedDefinitionsEnabled; + } + + @Override + public boolean isSeparatedOperationsEnabled() { + return separatedOperationsEnabled; + } + + @Override + public GroupBy getOperationsGroupedBy() { + return operationsGroupedBy; + } + + @Override + public Language getOutputLanguage() { + return outputLanguage; + } + + @Override + public int getInlineSchemaDepthLevel() { + return inlineSchemaDepthLevel; + } + + @Override + public OrderBy getTagOrderBy() { + return tagOrderBy; + } + + @Override + public Comparator getTagOrdering() { + return tagOrdering; + } + + @Override + public OrderBy getOperationOrderBy() { + return operationOrderBy; + } + + @Override + public Comparator getOperationOrdering() { + return operationOrdering; + } + + @Override + public OrderBy getDefinitionOrderBy() { + return definitionOrderBy; + } + + @Override + public Comparator getDefinitionOrdering() { + return definitionOrdering; + } + + @Override + public OrderBy getParameterOrderBy() { + return parameterOrderBy; + } + + @Override + public Comparator getParameterOrdering() { + return parameterOrdering; + } + + @Override + public OrderBy getPropertyOrderBy() { + return propertyOrderBy; + } + + @Override + public Comparator getPropertyOrdering() { + return propertyOrdering; + } + + @Override + public OrderBy getResponseOrderBy() { + return responseOrderBy; + } + + @Override + public Comparator getResponseOrdering() { + return responseOrdering; + } + + @Override + public boolean isInterDocumentCrossReferencesEnabled() { + return interDocumentCrossReferencesEnabled; + } + + @Override + public String getInterDocumentCrossReferencesPrefix() { + return interDocumentCrossReferencesPrefix; + } + + @Override + public boolean isFlatBodyEnabled() { + return flatBodyEnabled; + } + + @Override + public String getAnchorPrefix() { + return anchorPrefix; + } + + @Override + public String getOverviewDocument() { + return overviewDocument; + } + + @Override + public String getPathsDocument() { + return pathsDocument; + } + + @Override + public String getDefinitionsDocument() { + return definitionsDocument; + } + + @Override + public String getSecurityDocument() { + return securityDocument; + } + + @Override + public String getSeparatedOperationsFolder() { + return separatedOperationsFolder; + } + + @Override + public String getSeparatedDefinitionsFolder() { + return separatedDefinitionsFolder; + } + + @Override + public LineSeparator getLineSeparator() { + return lineSeparator; + } + } +} \ No newline at end of file diff --git a/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupExtensionRegistryBuilder.java b/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupExtensionRegistryBuilder.java new file mode 100644 index 00000000..b498385b --- /dev/null +++ b/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupExtensionRegistryBuilder.java @@ -0,0 +1,128 @@ +/* + * Copyright 2016 Robert Winkler + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.github.swagger2markup.builder; + +import io.github.swagger2markup.Swagger2MarkupExtensionRegistry; +import io.github.swagger2markup.spi.*; + +import java.util.List; + +import static java.util.ServiceLoader.load; +import static org.apache.commons.collections4.IteratorUtils.toList; + +public class Swagger2MarkupExtensionRegistryBuilder { + + private final Context context; + + public Swagger2MarkupExtensionRegistryBuilder() { + List swaggerModelExtensions = toList(load(SwaggerModelExtension.class).iterator()); + List overviewDocumentExtensions = toList(load(OverviewDocumentExtension.class).iterator()); + List definitionsDocumentExtensions = toList(load(DefinitionsDocumentExtension.class).iterator()); + List pathsDocumentExtensions = toList(load(PathsDocumentExtension.class).iterator()); + List securityDocumentExtensions = toList(load(SecurityDocumentExtension.class).iterator()); + context = new Context( + swaggerModelExtensions, + overviewDocumentExtensions, + definitionsDocumentExtensions, + pathsDocumentExtensions, + securityDocumentExtensions); + } + + public Swagger2MarkupExtensionRegistry build() { + return new DefaultSwagger2MarkupExtensionRegistry(context); + } + + public Swagger2MarkupExtensionRegistryBuilder withSwaggerModelExtension(SwaggerModelExtension extension) { + context.swaggerModelExtensions.add(extension); + return this; + } + + public Swagger2MarkupExtensionRegistryBuilder withOverviewDocumentExtension(OverviewDocumentExtension extension) { + context.overviewDocumentExtensions.add(extension); + return this; + } + + public Swagger2MarkupExtensionRegistryBuilder withDefinitionsDocumentExtension(DefinitionsDocumentExtension extension) { + context.definitionsDocumentExtensions.add(extension); + return this; + } + + public Swagger2MarkupExtensionRegistryBuilder withPathsDocumentExtension(PathsDocumentExtension extension) { + context.pathsDocumentExtensions.add(extension); + return this; + } + + public Swagger2MarkupExtensionRegistryBuilder withSecurityDocumentExtension(SecurityDocumentExtension extension) { + context.securityDocumentExtensions.add(extension); + return this; + } + + static class DefaultSwagger2MarkupExtensionRegistry implements Swagger2MarkupExtensionRegistry{ + + private Context context; + + DefaultSwagger2MarkupExtensionRegistry(Context context) { + this.context = context; + } + + @Override + public List getSwaggerModelExtensions(){ + return context.swaggerModelExtensions; + } + + @Override + public List getOverviewDocumentExtensions(){ + return context.overviewDocumentExtensions; + } + + @Override + public List getDefinitionsDocumentExtensions(){ + return context.definitionsDocumentExtensions; + } + + @Override + public List getSecurityDocumentExtensions(){ + return context.securityDocumentExtensions; + } + + @Override + public List getPathsDocumentExtensions(){ + return context.pathsDocumentExtensions; + } + + } + + private static class Context { + public final List swaggerModelExtensions; + public final List overviewDocumentExtensions; + public final List definitionsDocumentExtensions; + public final List pathsDocumentExtensions; + public final List securityDocumentExtensions; + + public Context(List swaggerModelExtensions, + List overviewDocumentExtensions, + List definitionsDocumentExtensions, + List pathsDocumentExtensions, + List securityDocumentExtensions){ + this.swaggerModelExtensions = swaggerModelExtensions; + this.overviewDocumentExtensions = overviewDocumentExtensions; + this.definitionsDocumentExtensions = definitionsDocumentExtensions; + this.pathsDocumentExtensions = pathsDocumentExtensions; + this.securityDocumentExtensions = securityDocumentExtensions; + } + } +} diff --git a/src/test/java/io/github/swagger2markup/AsciidocConverterTest.java b/src/test/java/io/github/swagger2markup/AsciidocConverterTest.java index 88c0ec68..824e59f7 100644 --- a/src/test/java/io/github/swagger2markup/AsciidocConverterTest.java +++ b/src/test/java/io/github/swagger2markup/AsciidocConverterTest.java @@ -16,6 +16,7 @@ package io.github.swagger2markup; import io.github.swagger2markup.assertions.DiffUtils; +import io.github.swagger2markup.builder.Swagger2MarkupConfigBuilder; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.junit.Before; @@ -68,7 +69,7 @@ public class AsciidocConverterTest { FileUtils.deleteQuietly(outputDirectory.toFile()); //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .build(); Swagger2MarkupConverter.from(file).withConfig(config).build() @@ -90,7 +91,7 @@ public class AsciidocConverterTest { FileUtils.deleteQuietly(outputDirectory.toFile()); //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .build(); Swagger2MarkupConverter.from(swaggerJsonString).withConfig(config).build() @@ -112,7 +113,7 @@ public class AsciidocConverterTest { FileUtils.deleteQuietly(outputDirectory.toFile()); //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .build(); Swagger2MarkupConverter.from(swaggerJsonString) @@ -135,7 +136,7 @@ public class AsciidocConverterTest { FileUtils.deleteQuietly(outputDirectory.toFile()); //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withGeneratedExamples() .build(); @@ -159,7 +160,7 @@ public class AsciidocConverterTest { FileUtils.deleteQuietly(outputDirectory.toFile()); //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withInlineSchemaDepthLevel(1) .build(); Swagger2MarkupConverter.from(file) @@ -181,7 +182,7 @@ public class AsciidocConverterTest { Path outputDirectory = Paths.get("build/docs/asciidoc/group_by_tags"); FileUtils.deleteQuietly(outputDirectory.toFile()); //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withPathsGroupedBy(GroupBy.TAGS) .build(); Swagger2MarkupConverter.from(file) @@ -204,7 +205,7 @@ public class AsciidocConverterTest { FileUtils.deleteQuietly(outputDirectory.toFile()); //When try { - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withPathsGroupedBy(GroupBy.TAGS) .build(); @@ -227,7 +228,7 @@ public class AsciidocConverterTest { FileUtils.deleteQuietly(outputDirectory.toFile()); //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withDefinitionDescriptions(Paths.get("src/test/resources/docs/asciidoc/definitions")) .build(); @@ -287,7 +288,7 @@ public class AsciidocConverterTest { FileUtils.deleteQuietly(outputDirectory.toFile()); //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withSeparatedDefinitions() .build(); Swagger2MarkupConverter.from(file).withConfig(config).build() @@ -312,7 +313,7 @@ public class AsciidocConverterTest { FileUtils.deleteQuietly(outputDirectory.toFile()); //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withSeparatedOperations() .build(); Swagger2MarkupConverter.from(file).withConfig(config).build() @@ -336,7 +337,7 @@ public class AsciidocConverterTest { FileUtils.deleteQuietly(outputDirectory.toFile()); //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withOutputLanguage(Language.RU) .build(); Swagger2MarkupConverter.from(file) @@ -357,7 +358,7 @@ public class AsciidocConverterTest { FileUtils.deleteQuietly(outputDirectory.toFile()); //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withOutputLanguage(Language.FR) .build(); Swagger2MarkupConverter.from(file) diff --git a/src/test/java/io/github/swagger2markup/GeneralConverterTest.java b/src/test/java/io/github/swagger2markup/GeneralConverterTest.java index 5412c06a..ac4018d8 100644 --- a/src/test/java/io/github/swagger2markup/GeneralConverterTest.java +++ b/src/test/java/io/github/swagger2markup/GeneralConverterTest.java @@ -15,6 +15,7 @@ */ package io.github.swagger2markup; +import io.github.swagger2markup.builder.Swagger2MarkupConfigBuilder; import io.github.swagger2markup.utils.IOUtils; import io.swagger.models.Swagger; import org.junit.Test; @@ -35,7 +36,7 @@ public class GeneralConverterTest { Path file = Paths.get(GeneralConverterTest.class.getResource("/yaml/swagger_petstore.yaml").toURI()); //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withDefinitionDescriptions() .withOperationDescriptions() .build(); @@ -55,7 +56,7 @@ public class GeneralConverterTest { //Given //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withDefinitionDescriptions() .withOperationDescriptions() .build(); @@ -73,7 +74,7 @@ public class GeneralConverterTest { public void testDefaultPathsWithoutFile() { //Given //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withDefinitionDescriptions() .build(); diff --git a/src/test/java/io/github/swagger2markup/MarkdownConverterTest.java b/src/test/java/io/github/swagger2markup/MarkdownConverterTest.java index ccd836b7..e09b3ee3 100644 --- a/src/test/java/io/github/swagger2markup/MarkdownConverterTest.java +++ b/src/test/java/io/github/swagger2markup/MarkdownConverterTest.java @@ -21,6 +21,7 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; import io.github.robwin.markup.builder.MarkupLanguage; import io.github.swagger2markup.assertions.DiffUtils; +import io.github.swagger2markup.builder.Swagger2MarkupConfigBuilder; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; @@ -64,7 +65,7 @@ public class MarkdownConverterTest { FileUtils.deleteQuietly(outputDirectory.toFile()); //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withMarkupLanguage(MarkupLanguage.MARKDOWN) .build(); Swagger2MarkupConverter.from(file) @@ -88,7 +89,7 @@ public class MarkdownConverterTest { FileUtils.deleteQuietly(outputDirectory.toFile()); //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withDefinitionDescriptions(Paths.get("src/test/resources/docs/markdown/definitions")) .withMarkupLanguage(MarkupLanguage.MARKDOWN) .build(); @@ -110,7 +111,7 @@ public class MarkdownConverterTest { FileUtils.deleteQuietly(outputDirectory.toFile()); //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withSeparatedDefinitions() .withMarkupLanguage(MarkupLanguage.MARKDOWN) .build(); @@ -138,7 +139,7 @@ public class MarkdownConverterTest { FileUtils.deleteQuietly(outputDirectory.toFile()); //When - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults() + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() .withSeparatedDefinitions() .withMarkupLanguage(MarkupLanguage.MARKDOWN) .build(); diff --git a/src/test/java/io/github/swagger2markup/spi/MySwaggerModelExtension.java b/src/test/java/io/github/swagger2markup/builder/MySwaggerModelExtension.java similarity index 89% rename from src/test/java/io/github/swagger2markup/spi/MySwaggerModelExtension.java rename to src/test/java/io/github/swagger2markup/builder/MySwaggerModelExtension.java index 46b87168..3d42b843 100644 --- a/src/test/java/io/github/swagger2markup/spi/MySwaggerModelExtension.java +++ b/src/test/java/io/github/swagger2markup/builder/MySwaggerModelExtension.java @@ -13,8 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.swagger2markup.spi; +package io.github.swagger2markup.builder; +import io.github.swagger2markup.spi.SwaggerModelExtension; import io.swagger.models.Swagger; public class MySwaggerModelExtension extends SwaggerModelExtension { diff --git a/src/test/java/io/github/swagger2markup/Swagger2MarkupConfigTest.java b/src/test/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilderTest.java similarity index 87% rename from src/test/java/io/github/swagger2markup/Swagger2MarkupConfigTest.java rename to src/test/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilderTest.java index f1cece52..ec3d64f0 100644 --- a/src/test/java/io/github/swagger2markup/Swagger2MarkupConfigTest.java +++ b/src/test/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilderTest.java @@ -13,10 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.swagger2markup; +package io.github.swagger2markup.builder; import com.google.common.collect.Ordering; import io.github.robwin.markup.builder.MarkupLanguage; +import io.github.swagger2markup.GroupBy; +import io.github.swagger2markup.Language; +import io.github.swagger2markup.OrderBy; +import io.github.swagger2markup.Swagger2MarkupConfig; import org.junit.Test; import java.io.IOException; @@ -25,11 +29,11 @@ import java.util.Properties; import static org.assertj.core.api.BDDAssertions.assertThat; -public class Swagger2MarkupConfigTest { +public class Swagger2MarkupConfigBuilderTest { @Test public void testConfigOfDefaults() { - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofDefaults().build(); + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder().build(); assertThat(config.getAnchorPrefix()).isNull(); assertThat(config.getDefinitionOrderBy()).isEqualTo(OrderBy.NATURAL); @@ -48,7 +52,7 @@ public class Swagger2MarkupConfigTest { assertThat(config.getOutputLanguage()).isEqualTo(Language.EN); assertThat(config.getOverviewDocument()).isEqualTo("overview"); assertThat(config.getParameterOrderBy()).isEqualTo(OrderBy.NATURAL); - assertThat(config.getParameterOrdering()).isEqualTo(Swagger2MarkupConfig.Builder.PARAMETER_IN_NATURAL_ORDERING.compound(Swagger2MarkupConfig.Builder.PARAMETER_NAME_NATURAL_ORDERING)); + assertThat(config.getParameterOrdering()).isEqualTo(Swagger2MarkupConfigBuilder.PARAMETER_IN_NATURAL_ORDERING.compound(Swagger2MarkupConfigBuilder.PARAMETER_NAME_NATURAL_ORDERING)); assertThat(config.getPathsDocument()).isEqualTo("paths"); assertThat(config.getOperationsGroupedBy()).isEqualTo(GroupBy.AS_IS); assertThat(config.getPropertyOrderBy()).isEqualTo(OrderBy.NATURAL); @@ -71,9 +75,9 @@ public class Swagger2MarkupConfigTest { public void testConfigOfProperties() throws IOException { Properties properties = new Properties(); - properties.load(Swagger2MarkupConfigTest.class.getResourceAsStream("/config/config.properties")); + properties.load(Swagger2MarkupConfigBuilderTest.class.getResourceAsStream("/config/config.properties")); - Swagger2MarkupConfig config = Swagger2MarkupConfig.ofProperties(properties).build(); + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder(properties).build(); assertThat(config.getAnchorPrefix()).isEqualTo("anchorPrefix"); assertThat(config.getDefinitionOrderBy()).isEqualTo(OrderBy.AS_IS); @@ -88,7 +92,7 @@ public class Swagger2MarkupConfigTest { assertThat(config.getInterDocumentCrossReferencesPrefix()).isEqualTo("xrefPrefix"); assertThat(config.getMarkupLanguage()).isEqualTo(MarkupLanguage.MARKDOWN); assertThat(config.getOperationOrderBy()).isEqualTo(OrderBy.NATURAL); - assertThat(config.getOperationOrdering()).isEqualTo(Swagger2MarkupConfig.Builder.OPERATION_PATH_NATURAL_ORDERING.compound(Swagger2MarkupConfig.Builder.OPERATION_METHOD_NATURAL_ORDERING)); + assertThat(config.getOperationOrdering()).isEqualTo(Swagger2MarkupConfigBuilder.OPERATION_PATH_NATURAL_ORDERING.compound(Swagger2MarkupConfigBuilder.OPERATION_METHOD_NATURAL_ORDERING)); assertThat(config.getOutputLanguage()).isEqualTo(Language.RU); assertThat(config.getOverviewDocument()).isEqualTo("overviewTest"); assertThat(config.getParameterOrderBy()).isEqualTo(OrderBy.AS_IS); @@ -112,7 +116,7 @@ public class Swagger2MarkupConfigTest { @Test public void testConfigBuilder() { - Swagger2MarkupConfig.Builder builder = Swagger2MarkupConfig.ofDefaults(); + Swagger2MarkupConfigBuilder builder = new Swagger2MarkupConfigBuilder(); try { builder.withTagOrdering(OrderBy.CUSTOM); @@ -128,9 +132,9 @@ public class Swagger2MarkupConfigTest { } catch (IllegalArgumentException e) { assertThat(e.getMessage()).isEqualTo("You must provide a custom comparator if orderBy == OrderBy.CUSTOM"); } - builder.withOperationOrdering(Swagger2MarkupConfig.Builder.OPERATION_PATH_NATURAL_ORDERING); + builder.withOperationOrdering(Swagger2MarkupConfigBuilder.OPERATION_PATH_NATURAL_ORDERING); assertThat(builder.config.getOperationOrderBy()).isEqualTo(OrderBy.CUSTOM); - assertThat(builder.config.getOperationOrdering()).isEqualTo(Swagger2MarkupConfig.Builder.OPERATION_PATH_NATURAL_ORDERING); + assertThat(builder.config.getOperationOrdering()).isEqualTo(Swagger2MarkupConfigBuilder.OPERATION_PATH_NATURAL_ORDERING); try { builder.withDefinitionOrdering(OrderBy.CUSTOM); @@ -146,9 +150,9 @@ public class Swagger2MarkupConfigTest { } catch (IllegalArgumentException e) { assertThat(e.getMessage()).isEqualTo("You must provide a custom comparator if orderBy == OrderBy.CUSTOM"); } - builder.withParameterOrdering(Swagger2MarkupConfig.Builder.PARAMETER_NAME_NATURAL_ORDERING); + builder.withParameterOrdering(Swagger2MarkupConfigBuilder.PARAMETER_NAME_NATURAL_ORDERING); assertThat(builder.config.getParameterOrderBy()).isEqualTo(OrderBy.CUSTOM); - assertThat(builder.config.getParameterOrdering()).isEqualTo(Swagger2MarkupConfig.Builder.PARAMETER_NAME_NATURAL_ORDERING); + assertThat(builder.config.getParameterOrdering()).isEqualTo(Swagger2MarkupConfigBuilder.PARAMETER_NAME_NATURAL_ORDERING); try { builder.withPropertyOrdering(OrderBy.CUSTOM); diff --git a/src/test/java/io/github/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java b/src/test/java/io/github/swagger2markup/builder/Swagger2MarkupExtensionRegistryBuilderTest.java similarity index 83% rename from src/test/java/io/github/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java rename to src/test/java/io/github/swagger2markup/builder/Swagger2MarkupExtensionRegistryBuilderTest.java index 7bcb6ae7..57dfe4e2 100644 --- a/src/test/java/io/github/swagger2markup/spi/Swagger2MarkupExtensionRegistryTest.java +++ b/src/test/java/io/github/swagger2markup/builder/Swagger2MarkupExtensionRegistryBuilderTest.java @@ -13,9 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.github.swagger2markup.spi; +package io.github.swagger2markup.builder; import io.github.swagger2markup.Swagger2MarkupExtensionRegistry; +import io.github.swagger2markup.spi.SwaggerModelExtension; import io.swagger.models.Swagger; import org.junit.Test; @@ -23,11 +24,11 @@ import java.util.List; import static org.assertj.core.api.Assertions.assertThat; -public class Swagger2MarkupExtensionRegistryTest { +public class Swagger2MarkupExtensionRegistryBuilderTest { @Test public void testRegistering() { - Swagger2MarkupExtensionRegistry.Builder registryBuilder = Swagger2MarkupExtensionRegistry.ofEmpty(); + Swagger2MarkupExtensionRegistryBuilder registryBuilder = new Swagger2MarkupExtensionRegistryBuilder(); registryBuilder.withSwaggerModelExtension(new MySwaggerModelExtension()); } @@ -40,7 +41,7 @@ public class Swagger2MarkupExtensionRegistryTest { } }; - Swagger2MarkupExtensionRegistry registry = Swagger2MarkupExtensionRegistry.ofEmpty() + Swagger2MarkupExtensionRegistry registry = new Swagger2MarkupExtensionRegistryBuilder() .withSwaggerModelExtension(ext2) .withSwaggerModelExtension(ext3) .withSwaggerModelExtension(ext1) From 831e949d9112f44ce2ab56f4a45a4840fc99e4e6 Mon Sep 17 00:00:00 2001 From: Robert Winkler Date: Tue, 15 Mar 2016 11:04:53 +0100 Subject: [PATCH 11/17] Uncommented tests which are not necessary anymore. --- .../io/github/swagger2markup/GeneralConverterTest.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/test/java/io/github/swagger2markup/GeneralConverterTest.java b/src/test/java/io/github/swagger2markup/GeneralConverterTest.java index ac4018d8..d76bf397 100644 --- a/src/test/java/io/github/swagger2markup/GeneralConverterTest.java +++ b/src/test/java/io/github/swagger2markup/GeneralConverterTest.java @@ -16,20 +16,16 @@ package io.github.swagger2markup; import io.github.swagger2markup.builder.Swagger2MarkupConfigBuilder; -import io.github.swagger2markup.utils.IOUtils; -import io.swagger.models.Swagger; import org.junit.Test; import java.net.MalformedURLException; import java.net.URI; -import java.net.URISyntaxException; -import java.nio.file.Path; -import java.nio.file.Paths; import static org.assertj.core.api.Assertions.assertThat; public class GeneralConverterTest { + /* @Test public void testConfigDefaultPaths() throws URISyntaxException { //Given @@ -50,6 +46,7 @@ public class GeneralConverterTest { assertThat(converter.getContext().getConfig().getDefinitionDescriptionsUri()).isEqualTo(baseUri); assertThat(converter.getContext().getConfig().getOperationDescriptionsUri()).isEqualTo(baseUri); } + */ @Test public void testConfigDefaultPathsWithUri() throws MalformedURLException { @@ -70,6 +67,7 @@ public class GeneralConverterTest { assertThat(converterBuilder.getContext().getConfig().getOperationDescriptionsUri()).isNull(); } + /* @Test public void testDefaultPathsWithoutFile() { //Given @@ -84,4 +82,5 @@ public class GeneralConverterTest { .build(); assertThat(converter.getContext().getConfig().isDefinitionDescriptionsEnabled()).isFalse(); } + */ } From d892f0b39d6896554b081d80b53368d6510fe539 Mon Sep 17 00:00:00 2001 From: Hugo de Paix de Coeur Date: Tue, 15 Mar 2016 11:23:52 +0100 Subject: [PATCH 12/17] fixes package paths after massive package refactoring --- .../swagger2markup/builder/Swagger2MarkupConfigBuilder.java | 2 +- .../document/builder/DefinitionsDocumentBuilder.java | 2 +- .../internal/document/builder/MarkupDocumentBuilder.java | 4 ++-- .../internal/document/builder/OverviewDocumentBuilder.java | 5 +++-- .../internal/document/builder/PathsDocumentBuilder.java | 4 ++-- .../internal/document/builder/SecurityDocumentBuilder.java | 2 +- 6 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java b/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java index 99a063cf..17ac85b6 100644 --- a/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java +++ b/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java @@ -43,7 +43,7 @@ public class Swagger2MarkupConfigBuilder { private static final Logger logger = LoggerFactory.getLogger(Swagger2MarkupConfigBuilder.class); private static final String PROPERTIES_PREFIX = "swagger2markup."; - private static final String PROPERTIES_DEFAULT = "/io/github/robwin/swagger2markup/config/default.properties"; + private static final String PROPERTIES_DEFAULT = "/io/github/swagger2markup/config/default.properties"; static final Ordering OPERATION_METHOD_NATURAL_ORDERING = Ordering .explicit(HttpMethod.POST, HttpMethod.GET, HttpMethod.PUT, HttpMethod.DELETE, HttpMethod.PATCH, HttpMethod.HEAD, HttpMethod.OPTIONS) diff --git a/src/main/java/io/github/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java b/src/main/java/io/github/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java index e8c3968d..21357391 100644 --- a/src/main/java/io/github/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java +++ b/src/main/java/io/github/swagger2markup/internal/document/builder/DefinitionsDocumentBuilder.java @@ -61,7 +61,7 @@ public class DefinitionsDocumentBuilder extends MarkupDocumentBuilder { public DefinitionsDocumentBuilder(Swagger2MarkupConverter.Context context, Path outputPath) { super(context, outputPath); - ResourceBundle labels = ResourceBundle.getBundle("io/github/robwin/swagger2markup/lang/labels", config.getOutputLanguage().toLocale()); + ResourceBundle labels = ResourceBundle.getBundle("io/github/swagger2markup/lang/labels", config.getOutputLanguage().toLocale()); DEFINITIONS = labels.getString("definitions"); if (config.isDefinitionDescriptionsEnabled()) { diff --git a/src/main/java/io/github/swagger2markup/internal/document/builder/MarkupDocumentBuilder.java b/src/main/java/io/github/swagger2markup/internal/document/builder/MarkupDocumentBuilder.java index ec5315f2..23afc81c 100644 --- a/src/main/java/io/github/swagger2markup/internal/document/builder/MarkupDocumentBuilder.java +++ b/src/main/java/io/github/swagger2markup/internal/document/builder/MarkupDocumentBuilder.java @@ -26,8 +26,8 @@ import io.github.swagger2markup.internal.type.DefinitionDocumentResolver; import io.github.swagger2markup.internal.type.ObjectType; import io.github.swagger2markup.internal.type.RefType; import io.github.swagger2markup.internal.type.Type; -import io.github.swagger2markup.utils.IOUtils; import io.github.swagger2markup.internal.utils.PropertyUtils; +import io.github.swagger2markup.utils.IOUtils; import io.swagger.models.properties.Property; import io.swagger.util.Json; import org.apache.commons.collections4.MapUtils; @@ -75,7 +75,7 @@ public abstract class MarkupDocumentBuilder { this.markupDocBuilder = MarkupDocBuilders.documentBuilder(config.getMarkupLanguage(), config.getLineSeparator()).withAnchorPrefix(config.getAnchorPrefix()); - ResourceBundle labels = ResourceBundle.getBundle("io/github/robwin/swagger2markup/lang/labels", config.getOutputLanguage().toLocale()); + ResourceBundle labels = ResourceBundle.getBundle("io/github/swagger2markup/lang/labels", config.getOutputLanguage().toLocale()); DEFAULT_COLUMN = labels.getString("default_column"); EXAMPLE_COLUMN = labels.getString("example_column"); REQUIRED_COLUMN = labels.getString("required_column"); diff --git a/src/main/java/io/github/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java b/src/main/java/io/github/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java index da715466..cbb2c288 100644 --- a/src/main/java/io/github/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java +++ b/src/main/java/io/github/swagger2markup/internal/document/builder/OverviewDocumentBuilder.java @@ -25,7 +25,8 @@ import java.util.ArrayList; import java.util.List; import java.util.ResourceBundle; -import static io.github.swagger2markup.spi.OverviewDocumentExtension.*; +import static io.github.swagger2markup.spi.OverviewDocumentExtension.Context; +import static io.github.swagger2markup.spi.OverviewDocumentExtension.Position; import static org.apache.commons.collections4.CollectionUtils.isNotEmpty; import static org.apache.commons.lang3.StringUtils.*; @@ -51,7 +52,7 @@ public class OverviewDocumentBuilder extends MarkupDocumentBuilder { public OverviewDocumentBuilder(Swagger2MarkupConverter.Context context, Path outputPath){ super(context, outputPath); - ResourceBundle labels = ResourceBundle.getBundle("io/github/robwin/swagger2markup/lang/labels", config.getOutputLanguage().toLocale()); + ResourceBundle labels = ResourceBundle.getBundle("io/github/swagger2markup/lang/labels", config.getOutputLanguage().toLocale()); OVERVIEW = labels.getString("overview"); CURRENT_VERSION = labels.getString("current_version"); VERSION = labels.getString("version"); diff --git a/src/main/java/io/github/swagger2markup/internal/document/builder/PathsDocumentBuilder.java b/src/main/java/io/github/swagger2markup/internal/document/builder/PathsDocumentBuilder.java index 00c6f500..23c9c313 100644 --- a/src/main/java/io/github/swagger2markup/internal/document/builder/PathsDocumentBuilder.java +++ b/src/main/java/io/github/swagger2markup/internal/document/builder/PathsDocumentBuilder.java @@ -22,7 +22,6 @@ import io.github.robwin.markup.builder.*; import io.github.swagger2markup.GroupBy; import io.github.swagger2markup.Swagger2MarkupConverter; import io.github.swagger2markup.internal.document.MarkupDocument; -import io.github.swagger2markup.model.PathOperation; import io.github.swagger2markup.internal.type.ObjectType; import io.github.swagger2markup.internal.type.RefType; import io.github.swagger2markup.internal.type.Type; @@ -30,6 +29,7 @@ import io.github.swagger2markup.internal.utils.ExamplesUtil; import io.github.swagger2markup.internal.utils.ParameterUtils; import io.github.swagger2markup.internal.utils.PropertyUtils; import io.github.swagger2markup.internal.utils.TagUtils; +import io.github.swagger2markup.model.PathOperation; import io.github.swagger2markup.spi.PathsDocumentExtension; import io.swagger.models.*; import io.swagger.models.auth.SecuritySchemeDefinition; @@ -90,7 +90,7 @@ public class PathsDocumentBuilder extends MarkupDocumentBuilder { public PathsDocumentBuilder(Swagger2MarkupConverter.Context globalContext, java.nio.file.Path outputPath) { super(globalContext, outputPath); - ResourceBundle labels = ResourceBundle.getBundle("io/github/robwin/swagger2markup/lang/labels", config.getOutputLanguage().toLocale()); + ResourceBundle labels = ResourceBundle.getBundle("io/github/swagger2markup/lang/labels", config.getOutputLanguage().toLocale()); RESPONSE = labels.getString("response"); REQUEST = labels.getString("request"); PATHS = labels.getString("paths"); diff --git a/src/main/java/io/github/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java b/src/main/java/io/github/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java index bd2948e7..ef5c1f5f 100644 --- a/src/main/java/io/github/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java +++ b/src/main/java/io/github/swagger2markup/internal/document/builder/SecurityDocumentBuilder.java @@ -50,7 +50,7 @@ public class SecurityDocumentBuilder extends MarkupDocumentBuilder { public SecurityDocumentBuilder(Swagger2MarkupConverter.Context context, Path outputPath) { super(context, outputPath); - ResourceBundle labels = ResourceBundle.getBundle("io/github/robwin/swagger2markup/lang/labels", config.getOutputLanguage().toLocale()); + ResourceBundle labels = ResourceBundle.getBundle("io/github/swagger2markup/lang/labels", config.getOutputLanguage().toLocale()); SECURITY = labels.getString("security"); TYPE = labels.getString("security_type"); NAME = labels.getString("security_name"); From 4bce1234af3f6c54abb0d088a2e190e9f2c4dcd3 Mon Sep 17 00:00:00 2001 From: Hugo de Paix de Coeur Date: Tue, 15 Mar 2016 12:12:44 +0100 Subject: [PATCH 13/17] fixes package paths after massive package refactoring (2/2) --- .../github/{robwin => }/swagger2markup/config/default.properties | 0 .../github/{robwin => }/swagger2markup/lang/labels_en.properties | 0 .../github/{robwin => }/swagger2markup/lang/labels_fr.properties | 0 .../github/{robwin => }/swagger2markup/lang/labels_ru.properties | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/io/github/{robwin => }/swagger2markup/config/default.properties (100%) rename src/main/resources/io/github/{robwin => }/swagger2markup/lang/labels_en.properties (100%) rename src/main/resources/io/github/{robwin => }/swagger2markup/lang/labels_fr.properties (100%) rename src/main/resources/io/github/{robwin => }/swagger2markup/lang/labels_ru.properties (100%) diff --git a/src/main/resources/io/github/robwin/swagger2markup/config/default.properties b/src/main/resources/io/github/swagger2markup/config/default.properties similarity index 100% rename from src/main/resources/io/github/robwin/swagger2markup/config/default.properties rename to src/main/resources/io/github/swagger2markup/config/default.properties diff --git a/src/main/resources/io/github/robwin/swagger2markup/lang/labels_en.properties b/src/main/resources/io/github/swagger2markup/lang/labels_en.properties similarity index 100% rename from src/main/resources/io/github/robwin/swagger2markup/lang/labels_en.properties rename to src/main/resources/io/github/swagger2markup/lang/labels_en.properties diff --git a/src/main/resources/io/github/robwin/swagger2markup/lang/labels_fr.properties b/src/main/resources/io/github/swagger2markup/lang/labels_fr.properties similarity index 100% rename from src/main/resources/io/github/robwin/swagger2markup/lang/labels_fr.properties rename to src/main/resources/io/github/swagger2markup/lang/labels_fr.properties diff --git a/src/main/resources/io/github/robwin/swagger2markup/lang/labels_ru.properties b/src/main/resources/io/github/swagger2markup/lang/labels_ru.properties similarity index 100% rename from src/main/resources/io/github/robwin/swagger2markup/lang/labels_ru.properties rename to src/main/resources/io/github/swagger2markup/lang/labels_ru.properties From 8d8d4cd5d0aee562ffa72e86381a7df3e7852748 Mon Sep 17 00:00:00 2001 From: Robert Winkler Date: Tue, 15 Mar 2016 13:42:36 +0100 Subject: [PATCH 14/17] Added a method getExtensionsProperties to Swagger2MarkupConfig and withExtensionProperties to Swagger2MarkupConfigBuilder so that a user is able to configure its Swagger2Markup extension. --- .../swagger2markup/Swagger2MarkupConfig.java | 3 + .../builder/Swagger2MarkupConfigBuilder.java | 98 +++++++++++++------ .../Swagger2MarkupConfigBuilderTest.java | 20 +++- src/test/resources/config/config.properties | 4 + 4 files changed, 93 insertions(+), 32 deletions(-) diff --git a/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java b/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java index cbb235ee..94087fa0 100644 --- a/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java +++ b/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java @@ -8,6 +8,7 @@ import io.swagger.models.parameters.Parameter; import java.net.URI; import java.util.Comparator; +import java.util.Map; public interface Swagger2MarkupConfig { MarkupLanguage getMarkupLanguage(); @@ -77,4 +78,6 @@ public interface Swagger2MarkupConfig { String getSeparatedDefinitionsFolder(); LineSeparator getLineSeparator(); + + Map getExtensionsProperties(); } diff --git a/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java b/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java index 17ac85b6..3b9ee1f0 100644 --- a/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java +++ b/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java @@ -16,6 +16,8 @@ package io.github.swagger2markup.builder; import com.google.common.base.Function; +import com.google.common.base.Predicate; +import com.google.common.collect.Maps; import com.google.common.collect.Ordering; import io.github.robwin.markup.builder.LineSeparator; import io.github.robwin.markup.builder.MarkupLanguage; @@ -26,16 +28,19 @@ import io.github.swagger2markup.Swagger2MarkupConfig; import io.github.swagger2markup.model.PathOperation; import io.swagger.models.HttpMethod; import io.swagger.models.parameters.Parameter; +import org.apache.commons.collections4.map.HashedMap; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nullable; import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.nio.file.Path; import java.util.Comparator; +import java.util.Map; import java.util.Properties; public class Swagger2MarkupConfigBuilder { @@ -80,47 +85,65 @@ public class Swagger2MarkupConfigBuilder { DefaultSwagger2MarkupConfig config = new DefaultSwagger2MarkupConfig(); public Swagger2MarkupConfigBuilder() { - this(new Properties()); + this(new HashedMap()); } - public Swagger2MarkupConfigBuilder(Properties properties) { + public Swagger2MarkupConfigBuilder(Properties properties) { + this(convertPropertiesToMap(properties)); + } - Properties safeProperties = new Properties(defaultProperties()); + private static Map convertPropertiesToMap(Properties properties) { + Map propertiesMap = new HashedMap<>(); + for(String propertyName : properties.stringPropertyNames()){ + propertiesMap.put(propertyName, properties.getProperty(propertyName)); + } + return propertiesMap; + } + + public Swagger2MarkupConfigBuilder(Map properties) { + Map safeProperties = convertPropertiesToMap(defaultProperties()); safeProperties.putAll(properties); - config.markupLanguage = MarkupLanguage.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "markupLanguage")); - config.generatedExamplesEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "generatedExamplesEnabled")); - config.operationDescriptionsEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "operationDescriptionsEnabled")); + config.markupLanguage = MarkupLanguage.valueOf(safeProperties.get(PROPERTIES_PREFIX + "markupLanguage")); + config.generatedExamplesEnabled = Boolean.valueOf(safeProperties.get(PROPERTIES_PREFIX + "generatedExamplesEnabled")); + config.operationDescriptionsEnabled = Boolean.valueOf(safeProperties.get(PROPERTIES_PREFIX + "operationDescriptionsEnabled")); if (safeProperties.containsKey(PROPERTIES_PREFIX + "operationDescriptionsUri")) - config.operationDescriptionsUri = URI.create(safeProperties.getProperty(PROPERTIES_PREFIX + "operationDescriptionsUri")); - config.definitionDescriptionsEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "definitionDescriptionsEnabled")); + config.operationDescriptionsUri = URI.create(safeProperties.get(PROPERTIES_PREFIX + "operationDescriptionsUri")); + config.definitionDescriptionsEnabled = Boolean.valueOf(safeProperties.get(PROPERTIES_PREFIX + "definitionDescriptionsEnabled")); if (safeProperties.containsKey(PROPERTIES_PREFIX + "definitionDescriptionsUri")) - config.definitionDescriptionsUri = URI.create(safeProperties.getProperty(PROPERTIES_PREFIX + "definitionDescriptionsUri")); - config.separatedDefinitionsEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "separatedDefinitionsEnabled")); - config.separatedOperationsEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "separatedOperationsEnabled")); - config.operationsGroupedBy = GroupBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "operationsGroupedBy")); - config.outputLanguage = Language.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "outputLanguage")); - config.inlineSchemaDepthLevel = Integer.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "inlineSchemaDepthLevel")); - config.interDocumentCrossReferencesEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "interDocumentCrossReferencesEnabled")); - config.interDocumentCrossReferencesPrefix = safeProperties.getProperty(PROPERTIES_PREFIX + "interDocumentCrossReferencesPrefix"); - config.flatBodyEnabled = Boolean.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "flatBodyEnabled")); - config.anchorPrefix = safeProperties.getProperty(PROPERTIES_PREFIX + "anchorPrefix"); - config.overviewDocument = safeProperties.getProperty(PROPERTIES_PREFIX + "overviewDocument"); - config.pathsDocument = safeProperties.getProperty(PROPERTIES_PREFIX + "pathsDocument"); - config.definitionsDocument = safeProperties.getProperty(PROPERTIES_PREFIX + "definitionsDocument"); - config.securityDocument = safeProperties.getProperty(PROPERTIES_PREFIX + "securityDocument"); - config.separatedOperationsFolder = safeProperties.getProperty(PROPERTIES_PREFIX + "separatedOperationsFolder"); - config.separatedDefinitionsFolder = safeProperties.getProperty(PROPERTIES_PREFIX + "separatedDefinitionsFolder"); - config.tagOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "tagOrderBy")); - config.operationOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "operationOrderBy")); - config.definitionOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "definitionOrderBy")); - config.parameterOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "parameterOrderBy")); - config.propertyOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "propertyOrderBy")); - config.responseOrderBy = OrderBy.valueOf(safeProperties.getProperty(PROPERTIES_PREFIX + "responseOrderBy")); - String lineSeparator = safeProperties.getProperty(PROPERTIES_PREFIX + "lineSeparator"); + config.definitionDescriptionsUri = URI.create(safeProperties.get(PROPERTIES_PREFIX + "definitionDescriptionsUri")); + config.separatedDefinitionsEnabled = Boolean.valueOf(safeProperties.get(PROPERTIES_PREFIX + "separatedDefinitionsEnabled")); + config.separatedOperationsEnabled = Boolean.valueOf(safeProperties.get(PROPERTIES_PREFIX + "separatedOperationsEnabled")); + config.operationsGroupedBy = GroupBy.valueOf(safeProperties.get(PROPERTIES_PREFIX + "operationsGroupedBy")); + config.outputLanguage = Language.valueOf(safeProperties.get(PROPERTIES_PREFIX + "outputLanguage")); + config.inlineSchemaDepthLevel = Integer.valueOf(safeProperties.get(PROPERTIES_PREFIX + "inlineSchemaDepthLevel")); + config.interDocumentCrossReferencesEnabled = Boolean.valueOf(safeProperties.get(PROPERTIES_PREFIX + "interDocumentCrossReferencesEnabled")); + config.interDocumentCrossReferencesPrefix = safeProperties.get(PROPERTIES_PREFIX + "interDocumentCrossReferencesPrefix"); + config.flatBodyEnabled = Boolean.valueOf(safeProperties.get(PROPERTIES_PREFIX + "flatBodyEnabled")); + config.anchorPrefix = safeProperties.get(PROPERTIES_PREFIX + "anchorPrefix"); + config.overviewDocument = safeProperties.get(PROPERTIES_PREFIX + "overviewDocument"); + config.pathsDocument = safeProperties.get(PROPERTIES_PREFIX + "pathsDocument"); + config.definitionsDocument = safeProperties.get(PROPERTIES_PREFIX + "definitionsDocument"); + config.securityDocument = safeProperties.get(PROPERTIES_PREFIX + "securityDocument"); + config.separatedOperationsFolder = safeProperties.get(PROPERTIES_PREFIX + "separatedOperationsFolder"); + config.separatedDefinitionsFolder = safeProperties.get(PROPERTIES_PREFIX + "separatedDefinitionsFolder"); + config.tagOrderBy = OrderBy.valueOf(safeProperties.get(PROPERTIES_PREFIX + "tagOrderBy")); + config.operationOrderBy = OrderBy.valueOf(safeProperties.get(PROPERTIES_PREFIX + "operationOrderBy")); + config.definitionOrderBy = OrderBy.valueOf(safeProperties.get(PROPERTIES_PREFIX + "definitionOrderBy")); + config.parameterOrderBy = OrderBy.valueOf(safeProperties.get(PROPERTIES_PREFIX + "parameterOrderBy")); + config.propertyOrderBy = OrderBy.valueOf(safeProperties.get(PROPERTIES_PREFIX + "propertyOrderBy")); + config.responseOrderBy = OrderBy.valueOf(safeProperties.get(PROPERTIES_PREFIX + "responseOrderBy")); + String lineSeparator = safeProperties.get(PROPERTIES_PREFIX + "lineSeparator"); if(StringUtils.isNoneBlank(lineSeparator)){ config.lineSeparator = LineSeparator.valueOf(lineSeparator); } + + config.extensionsProperties = Maps.filterKeys(safeProperties, new Predicate(){ + @Override + public boolean apply(@Nullable String propertyName) { + return StringUtils.contains(propertyName, "extensions"); + } + }); } private Properties defaultProperties() { @@ -536,6 +559,12 @@ public class Swagger2MarkupConfigBuilder { return this; } + public Swagger2MarkupConfigBuilder withExtensionsProperties(Map extensionsProperties) { + Validate.notEmpty(extensionsProperties, "%s must no be null", "extensionsProperties"); + config.extensionsProperties = extensionsProperties; + return this; + } + static class DefaultSwagger2MarkupConfig implements Swagger2MarkupConfig{ private MarkupLanguage markupLanguage; @@ -574,6 +603,8 @@ public class Swagger2MarkupConfigBuilder { private String separatedOperationsFolder; private String separatedDefinitionsFolder; + private Map extensionsProperties; + @Override public MarkupLanguage getMarkupLanguage() { return markupLanguage; @@ -743,5 +774,10 @@ public class Swagger2MarkupConfigBuilder { public LineSeparator getLineSeparator() { return lineSeparator; } + + @Override + public Map getExtensionsProperties() { + return extensionsProperties; + } } } \ No newline at end of file diff --git a/src/test/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilderTest.java b/src/test/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilderTest.java index ec3d64f0..89f11210 100644 --- a/src/test/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilderTest.java +++ b/src/test/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilderTest.java @@ -25,6 +25,8 @@ import org.junit.Test; import java.io.IOException; import java.net.URI; +import java.util.HashMap; +import java.util.Map; import java.util.Properties; import static org.assertj.core.api.BDDAssertions.assertThat; @@ -33,7 +35,13 @@ public class Swagger2MarkupConfigBuilderTest { @Test public void testConfigOfDefaults() { - Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder().build(); + Map extensionsProperties = new HashMap<>(); + extensionsProperties.put("swagger2markup.extensions.uniqueId1.customProperty1", "123"); + extensionsProperties.put("swagger2markup.extensions.uniqueId1.customProperty2", "123"); + + Swagger2MarkupConfig config = new Swagger2MarkupConfigBuilder() + .withExtensionsProperties(extensionsProperties) + .build(); assertThat(config.getAnchorPrefix()).isNull(); assertThat(config.getDefinitionOrderBy()).isEqualTo(OrderBy.NATURAL); @@ -68,6 +76,10 @@ public class Swagger2MarkupConfigBuilderTest { assertThat(config.isInterDocumentCrossReferencesEnabled()).isFalse(); assertThat(config.isSeparatedDefinitionsEnabled()).isFalse(); assertThat(config.isSeparatedOperationsEnabled()).isFalse(); + assertThat(config.getExtensionsProperties()).hasSize(2) + .containsKeys("swagger2markup.extensions.uniqueId1.customProperty1", + "swagger2markup.extensions.uniqueId1.customProperty2" + ); } @@ -112,6 +124,12 @@ public class Swagger2MarkupConfigBuilderTest { assertThat(config.isInterDocumentCrossReferencesEnabled()).isTrue(); assertThat(config.isSeparatedDefinitionsEnabled()).isTrue(); assertThat(config.isSeparatedOperationsEnabled()).isTrue(); + assertThat(config.getExtensionsProperties()).hasSize(4) + .containsKeys("swagger2markup.extensions.uniqueId1.customProperty1", + "swagger2markup.extensions.uniqueId1.customProperty2", + "swagger2markup.extensions.uniqueId2.customProperty1", + "swagger2markup.extensions.uniqueId2.customProperty2" + ); } @Test diff --git a/src/test/resources/config/config.properties b/src/test/resources/config/config.properties index cbf8636a..60c66fcf 100644 --- a/src/test/resources/config/config.properties +++ b/src/test/resources/config/config.properties @@ -25,4 +25,8 @@ swagger2markup.definitionOrderBy=AS_IS swagger2markup.parameterOrderBy=AS_IS swagger2markup.propertyOrderBy=AS_IS swagger2markup.responseOrderBy=AS_IS +swagger2markup.extensions.uniqueId1.customProperty1=test +swagger2markup.extensions.uniqueId1.customProperty2=test +swagger2markup.extensions.uniqueId2.customProperty1=test +swagger2markup.extensions.uniqueId2.customProperty2=test From eff69079a6ad3d1830f0f0fece715cd536fdafc1 Mon Sep 17 00:00:00 2001 From: Hugo de Paix de Coeur Date: Tue, 15 Mar 2016 14:44:36 +0100 Subject: [PATCH 15/17] added Swagger2MarkupConfig, Swagger2MarkupExtensionRegistry documentation --- .../swagger2markup/Swagger2MarkupConfig.java | 106 ++++++++++++++++++ .../Swagger2MarkupExtensionRegistry.java | 23 ++++ .../builder/Swagger2MarkupConfigBuilder.java | 34 +++--- .../spi/DefinitionsDocumentExtension.java | 6 +- .../spi/OverviewDocumentExtension.java | 2 +- .../spi/PathsDocumentExtension.java | 6 +- .../spi/SecurityDocumentExtension.java | 3 +- .../spi/SwaggerModelExtension.java | 2 +- 8 files changed, 153 insertions(+), 29 deletions(-) diff --git a/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java b/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java index 94087fa0..83c52608 100644 --- a/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java +++ b/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java @@ -10,73 +10,179 @@ import java.net.URI; import java.util.Comparator; import java.util.Map; +/** + * Swagger2Markup configuration interface. + */ public interface Swagger2MarkupConfig { + + /** + * Specifies the markup language which should be used to generate the files. + */ MarkupLanguage getMarkupLanguage(); + /** + * Include generated examples into the documents. + */ boolean isGeneratedExamplesEnabled(); + /** + * Include hand-written descriptions into the Paths document. + */ boolean isOperationDescriptionsEnabled(); + /** + * Hand-written operation descriptions URI. + */ URI getOperationDescriptionsUri(); + /** + * Include hand-written descriptions into the Definitions document. + */ boolean isDefinitionDescriptionsEnabled(); + /** + * Hand-written definition descriptions URI. + */ URI getDefinitionDescriptionsUri(); + /** + * In addition to the Definitions file, also create separate definition files for each model definition. + */ boolean isSeparatedDefinitionsEnabled(); + /** + * In addition to the Paths file, also create separate operation files for each operation. + */ boolean isSeparatedOperationsEnabled(); + /** + * Specifies if the operations should be grouped by tags or stay as-is. + */ GroupBy getOperationsGroupedBy(); + /** + * Specifies labels language of output files. + */ Language getOutputLanguage(); + /** + * Specifies maximum depth level for inline object schema displaying (0 = no inline schemasEnabled). + */ int getInlineSchemaDepthLevel(); + /** + * Specifies tag ordering. + */ OrderBy getTagOrderBy(); + /** + * Specifies a custom comparator function to order tags. + */ Comparator getTagOrdering(); + /** + * Specifies operation ordering. + */ OrderBy getOperationOrderBy(); + /** + * Specifies a custom comparator function to order operations. + */ Comparator getOperationOrdering(); + /** + * Specifies definition ordering. + */ OrderBy getDefinitionOrderBy(); + /** + * Specifies a custom comparator function to order definitions. + */ Comparator getDefinitionOrdering(); + /** + * Specifies parameter ordering. + */ OrderBy getParameterOrderBy(); + /** + * Specifies a custom comparator function to order parameters. + */ Comparator getParameterOrdering(); + /** + * Specifies property ordering. + */ OrderBy getPropertyOrderBy(); + /** + * Specifies a custom comparator function to order properties. + */ Comparator getPropertyOrdering(); + /** + * Specifies response ordering. + */ OrderBy getResponseOrderBy(); + /** + * Specifies a custom comparator function to order responses. + */ Comparator getResponseOrdering(); + /** + * Enable use of inter-document cross-references when needed. + */ boolean isInterDocumentCrossReferencesEnabled(); + /** + * Inter-document cross-references optional prefix. + */ String getInterDocumentCrossReferencesPrefix(); + /** + * Optionally isolate the body parameter, if any, from other parameters. + */ boolean isFlatBodyEnabled(); + /** + * Optionally prefix all anchors for uniqueness. + */ String getAnchorPrefix(); + /** + * Overview document name (without extension). + */ String getOverviewDocument(); + /** + * Paths document name (without extension). + */ String getPathsDocument(); + /** + * Definitions document name (without extension). + */ String getDefinitionsDocument(); + /** + * Security document name (without extension). + */ String getSecurityDocument(); + /** + * Separated operations sub-folder name. + */ String getSeparatedOperationsFolder(); + /** + * Separated definitions sub-folder name. + */ String getSeparatedDefinitionsFolder(); + /** + * Specifies the line separator which should be used. + */ LineSeparator getLineSeparator(); Map getExtensionsProperties(); diff --git a/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java b/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java index 303d647d..a7b67cb7 100644 --- a/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java +++ b/src/main/java/io/github/swagger2markup/Swagger2MarkupExtensionRegistry.java @@ -19,14 +19,37 @@ import io.github.swagger2markup.spi.*; import java.util.List; +/** + * Extension points registry interface. + */ public interface Swagger2MarkupExtensionRegistry { + /** + * SwaggerModelExtension extension point can be used to preprocess the Swagger model. + * @return registered extensions extending SwaggerModelExtension extension point + */ List getSwaggerModelExtensions(); + /** + * OverviewDocumentExtension extension point can be used to extend the overview document content. + * @return registered extensions extending OverviewDocumentExtension extension point + */ List getOverviewDocumentExtensions(); + /** + * DefinitionsDocumentExtension extension point can be used to extend the definitions document content. + * @return registered extensions extending DefinitionsDocumentExtension extension point + */ List getDefinitionsDocumentExtensions(); + /** + * SecurityContentExtension extension point can be used to extend the security document content. + * @return registered extensions extending SecurityContentExtension extension point + */ List getSecurityDocumentExtensions(); + /** + * PathsDocumentExtension extension point can be used to extend the paths document content. + * @return registered extensions extending PathsDocumentExtension extension point + */ List getPathsDocumentExtensions(); } diff --git a/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java b/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java index 3b9ee1f0..3a137a59 100644 --- a/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java +++ b/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java @@ -182,7 +182,7 @@ public class Swagger2MarkupConfigBuilder { } /** - * Specifies the markup language which should be used to generate the files + * Specifies the markup language which should be used to generate the files. * * @param markupLanguage the markup language which is used to generate the files * @return this builder @@ -194,7 +194,7 @@ public class Swagger2MarkupConfigBuilder { } /** - * Include generated examples into the Paths document + * Include generated examples into the documents. * * @return this builder */ @@ -204,7 +204,7 @@ public class Swagger2MarkupConfigBuilder { } /** - * Include hand-written descriptions into the Paths document + * Include hand-written descriptions into the Paths document. * * @param operationDescriptionsUri the URI to the folder where the description documents reside. * @return this builder @@ -217,7 +217,7 @@ public class Swagger2MarkupConfigBuilder { } /** - * Include hand-written descriptions into the Paths document + * Include hand-written descriptions into the Paths document. * * @param operationDescriptionsPath the path to the folder where the description documents reside. * @return this builder @@ -239,7 +239,7 @@ public class Swagger2MarkupConfigBuilder { } /** - * Include hand-written descriptions into the Definitions document + * Include hand-written descriptions into the Definitions document. * * @param definitionDescriptionsUri the URI to the folder where the description documents reside. * @return this builder @@ -252,7 +252,7 @@ public class Swagger2MarkupConfigBuilder { } /** - * Include hand-written descriptions into the Definitions document + * Include hand-written descriptions into the Definitions document. * * @param definitionDescriptionsPath the path to the folder where the description documents reside. * @return this builder @@ -274,7 +274,7 @@ public class Swagger2MarkupConfigBuilder { } /** - * In addition to the definitions file, also create separate definition files for each model definition. + * In addition to the Definitions file, also create separate definition files for each model definition. * * @return this builder */ @@ -285,7 +285,7 @@ public class Swagger2MarkupConfigBuilder { /** - * In addition to the paths file, also create separate path files for each path. + * In addition to the Paths file, also create separate operation files for each operation. * * @return this builder */ @@ -296,7 +296,7 @@ public class Swagger2MarkupConfigBuilder { /** - * Specifies if the paths should be grouped by tags or stay as-is. + * Specifies if the operations should be grouped by tags or stay as-is. * * @param pathsGroupedBy the GroupBy enum * @return this builder @@ -308,7 +308,7 @@ public class Swagger2MarkupConfigBuilder { } /** - * Specifies labels language of output files + * Specifies labels language of output files. * * @param language the enum * @return this builder @@ -320,7 +320,7 @@ public class Swagger2MarkupConfigBuilder { } /** - * Specifies maximum depth level for inline object schema displaying (0 = no inline schemasEnabled) + * Specifies maximum depth level for inline object schema displaying (0 = no inline schemasEnabled). * * @param inlineSchemaDepthLevel number of recursion levels for inline schemasEnabled display * @return this builder @@ -460,7 +460,7 @@ public class Swagger2MarkupConfigBuilder { } /** - * Specifies a custom comparator function to order propertys. + * Specifies a custom comparator function to order properties. * * @param propertyOrdering property ordering * @return this builder @@ -503,7 +503,7 @@ public class Swagger2MarkupConfigBuilder { } /** - * Enable use of inter-document cross-references when needed + * Enable use of inter-document cross-references when needed. * * @param prefix Prefix to document in all inter-document cross-references. * @return this builder @@ -526,7 +526,7 @@ public class Swagger2MarkupConfigBuilder { } /** - * Optionally isolate the body parameter, if any, from other parameters + * Optionally isolate the body parameter, if any, from other parameters. * * @return this builder */ @@ -536,8 +536,8 @@ public class Swagger2MarkupConfigBuilder { } /** - * Optionally prefix all anchors for unicity - *. + * Optionally prefix all anchors for uniqueness. + * * @param anchorPrefix anchor prefix. * @return this builder */ @@ -548,7 +548,7 @@ public class Swagger2MarkupConfigBuilder { } /** - * Specifies the line separator which should be used . + * Specifies the line separator which should be used. * * @param lineSeparator the lineSeparator * @return this builder diff --git a/src/main/java/io/github/swagger2markup/spi/DefinitionsDocumentExtension.java b/src/main/java/io/github/swagger2markup/spi/DefinitionsDocumentExtension.java index 9bdcb649..189488e9 100644 --- a/src/main/java/io/github/swagger2markup/spi/DefinitionsDocumentExtension.java +++ b/src/main/java/io/github/swagger2markup/spi/DefinitionsDocumentExtension.java @@ -16,15 +16,13 @@ package io.github.swagger2markup.spi; -import org.apache.commons.lang3.Validate; - import com.google.common.base.Optional; - import io.github.robwin.markup.builder.MarkupDocBuilder; import io.swagger.models.Model; +import org.apache.commons.lang3.Validate; /** - * A SecurityContentExtension can be used to extend the definitions document. + * DefinitionsDocumentExtension extension point can be used to extend the definitions document content. */ public abstract class DefinitionsDocumentExtension extends AbstractExtension { diff --git a/src/main/java/io/github/swagger2markup/spi/OverviewDocumentExtension.java b/src/main/java/io/github/swagger2markup/spi/OverviewDocumentExtension.java index c3e86773..5eeaaeb9 100644 --- a/src/main/java/io/github/swagger2markup/spi/OverviewDocumentExtension.java +++ b/src/main/java/io/github/swagger2markup/spi/OverviewDocumentExtension.java @@ -19,7 +19,7 @@ package io.github.swagger2markup.spi; import io.github.robwin.markup.builder.MarkupDocBuilder; /** - * A SecurityContentExtension can be used to extend the overview document. + * OverviewDocumentExtension extension point can be used to extend the overview document content. */ public abstract class OverviewDocumentExtension extends AbstractExtension { diff --git a/src/main/java/io/github/swagger2markup/spi/PathsDocumentExtension.java b/src/main/java/io/github/swagger2markup/spi/PathsDocumentExtension.java index 222993af..228d28a0 100644 --- a/src/main/java/io/github/swagger2markup/spi/PathsDocumentExtension.java +++ b/src/main/java/io/github/swagger2markup/spi/PathsDocumentExtension.java @@ -16,16 +16,14 @@ package io.github.swagger2markup.spi; -import org.apache.commons.lang3.Validate; - import com.google.common.base.Optional; - import io.github.robwin.markup.builder.MarkupDocBuilder; import io.github.swagger2markup.GroupBy; import io.github.swagger2markup.model.PathOperation; +import org.apache.commons.lang3.Validate; /** - * A SecurityContentExtension can be used to extend the paths document. + * PathsDocumentExtension extension point can be used to extend the paths document content. */ public abstract class PathsDocumentExtension extends AbstractExtension { diff --git a/src/main/java/io/github/swagger2markup/spi/SecurityDocumentExtension.java b/src/main/java/io/github/swagger2markup/spi/SecurityDocumentExtension.java index f48cbdb8..b13ac0ca 100644 --- a/src/main/java/io/github/swagger2markup/spi/SecurityDocumentExtension.java +++ b/src/main/java/io/github/swagger2markup/spi/SecurityDocumentExtension.java @@ -22,7 +22,7 @@ import io.swagger.models.auth.SecuritySchemeDefinition; import org.apache.commons.lang3.Validate; /** - * A SecurityContentExtension can be used to extend the security document. + * SecurityContentExtension extension point can be used to extend the security document content. */ public abstract class SecurityDocumentExtension extends AbstractExtension { @@ -32,7 +32,6 @@ public abstract class SecurityDocumentExtension extends AbstractExtension { DOCUMENT_END, DEFINITION_BEGIN, DEFINITION_END - } public static class Context extends ContentContext { diff --git a/src/main/java/io/github/swagger2markup/spi/SwaggerModelExtension.java b/src/main/java/io/github/swagger2markup/spi/SwaggerModelExtension.java index e4f60382..3ad5e5e7 100644 --- a/src/main/java/io/github/swagger2markup/spi/SwaggerModelExtension.java +++ b/src/main/java/io/github/swagger2markup/spi/SwaggerModelExtension.java @@ -19,7 +19,7 @@ package io.github.swagger2markup.spi; import io.swagger.models.Swagger; /** - * A SwaggerExtension can be used to preprocess the Swagger model. + * SwaggerModelExtension extension point can be used to preprocess the Swagger model. */ public abstract class SwaggerModelExtension extends AbstractExtension { From c25b6be1f36b7d39759fad6d3d0ac45a71313cf2 Mon Sep 17 00:00:00 2001 From: Robert Winkler Date: Tue, 15 Mar 2016 15:49:27 +0100 Subject: [PATCH 16/17] Moved String constants PROPERTIES_PREFIX and EXTENSION_PREFIX into Swagger2MarkupConfig interfaces --- .../io/github/swagger2markup/Swagger2MarkupConfig.java | 10 ++++++++++ .../builder/Swagger2MarkupConfigBuilder.java | 5 +++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java b/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java index 83c52608..a8d64cc3 100644 --- a/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java +++ b/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java @@ -15,6 +15,16 @@ import java.util.Map; */ public interface Swagger2MarkupConfig { + /** + * Prefix for Swagger2Markup properties + */ + String PROPERTIES_PREFIX = "swagger2markup."; + + /** + * Prefix for Swagger2Markup extension properties + */ + String EXTENSION_PREFIX = PROPERTIES_PREFIX + "extensions."; + /** * Specifies the markup language which should be used to generate the files. */ diff --git a/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java b/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java index 3a137a59..33c058e3 100644 --- a/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java +++ b/src/main/java/io/github/swagger2markup/builder/Swagger2MarkupConfigBuilder.java @@ -43,11 +43,12 @@ import java.util.Comparator; import java.util.Map; import java.util.Properties; +import static io.github.swagger2markup.Swagger2MarkupConfig.*; + public class Swagger2MarkupConfigBuilder { private static final Logger logger = LoggerFactory.getLogger(Swagger2MarkupConfigBuilder.class); - private static final String PROPERTIES_PREFIX = "swagger2markup."; private static final String PROPERTIES_DEFAULT = "/io/github/swagger2markup/config/default.properties"; static final Ordering OPERATION_METHOD_NATURAL_ORDERING = Ordering @@ -141,7 +142,7 @@ public class Swagger2MarkupConfigBuilder { config.extensionsProperties = Maps.filterKeys(safeProperties, new Predicate(){ @Override public boolean apply(@Nullable String propertyName) { - return StringUtils.contains(propertyName, "extensions"); + return StringUtils.startsWith(propertyName, EXTENSION_PREFIX); } }); } From e3f946ecf83aaccdf1f0bd490ca04b2218aef07f Mon Sep 17 00:00:00 2001 From: Robert Winkler Date: Tue, 15 Mar 2016 15:51:08 +0100 Subject: [PATCH 17/17] Added missing javadoc to Swagger2MarkupConfig. --- .../java/io/github/swagger2markup/Swagger2MarkupConfig.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java b/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java index a8d64cc3..9757dec7 100644 --- a/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java +++ b/src/main/java/io/github/swagger2markup/Swagger2MarkupConfig.java @@ -195,5 +195,8 @@ public interface Swagger2MarkupConfig { */ LineSeparator getLineSeparator(); + /** + * Returns properties for extensions. + */ Map getExtensionsProperties(); }