Migrate to markup-document-builder 0.1.6-SNAPSHOT

This commit is contained in:
Hugo de Paix de Coeur
2016-02-04 17:34:10 +01:00
parent 9df1c73641
commit 836d9fbae7
12 changed files with 52 additions and 131 deletions

View File

@@ -36,6 +36,9 @@ tasks.withType(JavaCompile) {
}
repositories {
maven {
url "https://oss.jfrog.org/artifactory/oss-snapshot-local"
}
jcenter()
mavenCentral()
mavenLocal()
@@ -55,7 +58,7 @@ dependencies {
dependencyManagement {
dependencies {
dependency "io.github.robwin:markup-document-builder:0.1.5"
dependency "io.github.robwin:markup-document-builder:0.1.6-SNAPSHOT"
dependency "io.swagger:swagger-compat-spec-parser:1.0.16"
dependency "commons-collections:commons-collections:3.2.1"
dependency "commons-io:commons-io:2.4"

View File

@@ -25,7 +25,6 @@ import io.github.robwin.swagger2markup.OrderBy;
import io.github.robwin.swagger2markup.config.Swagger2MarkupConfig;
import io.github.robwin.swagger2markup.type.ObjectType;
import io.github.robwin.swagger2markup.type.Type;
import io.github.robwin.swagger2markup.utils.MarkupDocBuilderUtils;
import io.swagger.models.ComposedModel;
import io.swagger.models.Model;
import io.swagger.models.RefModel;
@@ -353,9 +352,9 @@ public class DefinitionsDocument extends MarkupDocument {
* Inline definitions should never been referenced in TOC, so they are just text.
*/
private void addInlineDefinitionTitle(String title, String anchor, MarkupDocBuilder docBuilder) {
MarkupDocBuilderUtils.anchor(anchor, docBuilder);
docBuilder.boldTextLine(title);
docBuilder.anchor(anchor);
docBuilder.newLine();
docBuilder.boldTextLine(title);
}

View File

@@ -21,11 +21,11 @@ package io.github.robwin.swagger2markup.builder.document;
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.config.Swagger2MarkupConfig;
import io.github.robwin.swagger2markup.type.ObjectType;
import io.github.robwin.swagger2markup.type.RefType;
import io.github.robwin.swagger2markup.type.Type;
import io.github.robwin.swagger2markup.utils.MarkupDocBuilderUtils;
import io.github.robwin.swagger2markup.utils.PropertyUtils;
import io.swagger.models.Swagger;
import io.swagger.models.properties.Property;
@@ -117,8 +117,12 @@ public abstract class MarkupDocument {
if (type instanceof ObjectType) {
ObjectType objectType = (ObjectType) type;
List<List<String>> cells = new ArrayList<>();
List<String> header = Arrays.asList(NAME_COLUMN, DESCRIPTION_COLUMN, REQUIRED_COLUMN, SCHEMA_COLUMN, DEFAULT_COLUMN);
cells.add(header);
List<MarkupTableColumn> cols = Arrays.asList(
new MarkupTableColumn(NAME_COLUMN, 1),
new MarkupTableColumn(DESCRIPTION_COLUMN, 6),
new MarkupTableColumn(REQUIRED_COLUMN, 1),
new MarkupTableColumn(SCHEMA_COLUMN, 1),
new MarkupTableColumn(DEFAULT_COLUMN, 1));
if (MapUtils.isNotEmpty(objectType.getProperties())) {
for (Map.Entry<String, Property> propertyEntry : objectType.getProperties().entrySet()) {
Property property = propertyEntry.getValue();
@@ -138,20 +142,18 @@ public abstract class MarkupDocument {
propertyName,
propertyDescriptor.getDescription(property, propertyName),
Boolean.toString(property.getRequired()),
propertyType.displaySchema(markupLanguage),
propertyType.displaySchema(docBuilder),
PropertyUtils.getDefaultValue(property));
cells.add(content);
}
MarkupDocBuilderUtils.tableWithHeaderRow(Arrays.asList(1, 6, 1, 1, 1), cells, docBuilder);
docBuilder.tableWithColumnSpecs(cols, cells);
}
else {
docBuilder.textLine(NO_CONTENT);
docBuilder.newLine();
}
}
else {
docBuilder.textLine(NO_CONTENT);
docBuilder.newLine();
}
return localDefinitions;

View File

@@ -87,12 +87,10 @@ public class OverviewDocument extends MarkupDocument {
this.markupDocBuilder.sectionTitleLevel1(OVERVIEW);
if(isNotBlank(info.getDescription())){
this.markupDocBuilder.textLine(info.getDescription());
this.markupDocBuilder.newLine();
}
if(isNotBlank(info.getVersion())){
this.markupDocBuilder.sectionTitleLevel2(CURRENT_VERSION);
this.markupDocBuilder.textLine(VERSION + info.getVersion());
this.markupDocBuilder.newLine();
}
Contact contact = info.getContact();
if(contact != null){
@@ -103,7 +101,6 @@ public class OverviewDocument extends MarkupDocument {
if(isNotBlank(contact.getEmail())){
this.markupDocBuilder.textLine(CONTACT_EMAIL + contact.getEmail());
}
this.markupDocBuilder.newLine();
}
License license = info.getLicense();
@@ -115,11 +112,9 @@ public class OverviewDocument extends MarkupDocument {
if (isNotBlank(license.getUrl())) {
this.markupDocBuilder.textLine(LICENSE_URL + license.getUrl());
}
this.markupDocBuilder.newLine();
}
if(isNotBlank(info.getTermsOfService())){
this.markupDocBuilder.textLine(TERMS_OF_SERVICE + info.getTermsOfService());
this.markupDocBuilder.newLine();
}
if(isNotBlank(swagger.getHost()) || isNotBlank(swagger.getBasePath()) || isNotEmpty(swagger.getSchemes())) {
@@ -137,7 +132,6 @@ public class OverviewDocument extends MarkupDocument {
}
this.markupDocBuilder.textLine(SCHEMES + join(schemes, ", "));
}
this.markupDocBuilder.newLine();
}
if(isNotEmpty(swagger.getTags())){
@@ -153,19 +147,16 @@ public class OverviewDocument extends MarkupDocument {
}
}
this.markupDocBuilder.unorderedList(tags);
this.markupDocBuilder.newLine();
}
if(isNotEmpty(swagger.getConsumes())){
this.markupDocBuilder.sectionTitleLevel2(CONSUMES);
this.markupDocBuilder.unorderedList(swagger.getConsumes());
this.markupDocBuilder.newLine();
}
if(isNotEmpty(swagger.getProduces())){
this.markupDocBuilder.sectionTitleLevel2(PRODUCES);
this.markupDocBuilder.unorderedList(swagger.getProduces());
this.markupDocBuilder.newLine();
}
}

View File

@@ -20,12 +20,12 @@ package io.github.robwin.swagger2markup.builder.document;
import com.google.common.base.Optional;
import com.google.common.collect.Multimap;
import io.github.robwin.markup.builder.MarkupTableColumn;
import io.github.robwin.swagger2markup.GroupBy;
import io.github.robwin.swagger2markup.config.Swagger2MarkupConfig;
import io.github.robwin.swagger2markup.type.ObjectType;
import io.github.robwin.swagger2markup.type.RefType;
import io.github.robwin.swagger2markup.type.Type;
import io.github.robwin.swagger2markup.utils.MarkupDocBuilderUtils;
import io.github.robwin.swagger2markup.utils.ParameterUtils;
import io.github.robwin.swagger2markup.utils.PropertyUtils;
import io.swagger.models.*;
@@ -286,9 +286,13 @@ public class PathsDocument extends MarkupDocument {
List<Type> localDefinitions = new ArrayList<>();
if(CollectionUtils.isNotEmpty(parameters)){
List<List<String>> cells = new ArrayList<>();
// Table header row
List<String> header = Arrays.asList(TYPE_COLUMN, NAME_COLUMN, DESCRIPTION_COLUMN, REQUIRED_COLUMN, SCHEMA_COLUMN, DEFAULT_COLUMN);
cells.add(header);
List<MarkupTableColumn> cols = Arrays.asList(
new MarkupTableColumn(TYPE_COLUMN, 1),
new MarkupTableColumn(NAME_COLUMN, 1),
new MarkupTableColumn(DESCRIPTION_COLUMN, 6),
new MarkupTableColumn(REQUIRED_COLUMN, 1),
new MarkupTableColumn(SCHEMA_COLUMN, 1),
new MarkupTableColumn(DEFAULT_COLUMN, 1));
for(Parameter parameter : parameters){
Type type = ParameterUtils.getType(parameter);
if (inlineSchemaDepthLevel > 0 && type instanceof ObjectType) {
@@ -308,12 +312,12 @@ public class PathsDocument extends MarkupDocument {
parameter.getName(),
parameterDescription(operation, parameter),
Boolean.toString(parameter.getRequired()),
type.displaySchema(markupLanguage),
type.displaySchema(markupDocBuilder),
ParameterUtils.getDefaultValue(parameter));
cells.add(content);
}
addPathSectionTitle(PARAMETERS);
MarkupDocBuilderUtils.tableWithHeaderRow(Arrays.asList(1, 1, 6, 1, 1, 1), cells, this.markupDocBuilder);
markupDocBuilder.tableWithColumnSpecs(cols, cells);
}
return localDefinitions;
@@ -489,7 +493,10 @@ public class PathsDocument extends MarkupDocument {
List<Type> localDefinitions = new ArrayList<>();
if(MapUtils.isNotEmpty(responses)){
List<List<String>> cells = new ArrayList<>();
cells.add(Arrays.asList(HTTP_CODE_COLUMN, DESCRIPTION_COLUMN, SCHEMA_COLUMN));
List<MarkupTableColumn> cols = Arrays.asList(
new MarkupTableColumn(HTTP_CODE_COLUMN, 1),
new MarkupTableColumn(DESCRIPTION_COLUMN, 6),
new MarkupTableColumn(SCHEMA_COLUMN, 1));
for(Map.Entry<String, Response> entry : responses.entrySet()){
Response response = entry.getValue();
if(response.getSchema() != null){
@@ -505,13 +512,13 @@ public class PathsDocument extends MarkupDocument {
type = new RefType(type);
}
}
cells.add(Arrays.asList(entry.getKey(), response.getDescription(), type.displaySchema(markupLanguage)));
cells.add(Arrays.asList(entry.getKey(), response.getDescription(), type.displaySchema(markupDocBuilder)));
}else{
cells.add(Arrays.asList(entry.getKey(), response.getDescription(), NO_CONTENT));
}
}
addPathSectionTitle(RESPONSES);
MarkupDocBuilderUtils.tableWithHeaderRow(Arrays.asList(1, 6, 1), cells, this.markupDocBuilder);
markupDocBuilder.tableWithColumnSpecs(cols, cells);
}
return localDefinitions;
}
@@ -520,9 +527,9 @@ public class PathsDocument extends MarkupDocument {
* Inline definitions should never been referenced in TOC, so they are just text.
*/
private void addInlineDefinitionTitle(String title, String anchor) {
MarkupDocBuilderUtils.anchor(anchor, this.markupDocBuilder);
markupDocBuilder.anchor(anchor);
markupDocBuilder.newLine();
this.markupDocBuilder.boldTextLine(title);
this.markupDocBuilder.newLine();
}
private void inlineDefinitions(List<Type> definitions, int depth) {

View File

@@ -1,6 +1,6 @@
package io.github.robwin.swagger2markup.type;
import io.github.robwin.markup.builder.MarkupLanguage;
import io.github.robwin.markup.builder.MarkupDocBuilder;
public class ArrayType extends Type {
@@ -18,10 +18,10 @@ public class ArrayType extends Type {
}
@Override
public String displaySchema(MarkupLanguage language) {
public String displaySchema(MarkupDocBuilder docBuilder) {
String collectionFormat = "";
if (this.collectionFormat != null)
collectionFormat = this.collectionFormat + " ";
return collectionFormat + ofType.displaySchema(language) + " array";
return collectionFormat + ofType.displaySchema(docBuilder) + " array";
}
}

View File

@@ -1,6 +1,6 @@
package io.github.robwin.swagger2markup.type;
import io.github.robwin.markup.builder.MarkupLanguage;
import io.github.robwin.markup.builder.MarkupDocBuilder;
import static org.apache.commons.lang3.StringUtils.isNotBlank;
@@ -18,7 +18,7 @@ public class BasicType extends Type {
}
@Override
public String displaySchema(MarkupLanguage language) {
public String displaySchema(MarkupDocBuilder docBuilder) {
if (isNotBlank(this.format))
return this.name + "(" + this.format + ")";
else

View File

@@ -1,6 +1,6 @@
package io.github.robwin.swagger2markup.type;
import io.github.robwin.markup.builder.MarkupLanguage;
import io.github.robwin.markup.builder.MarkupDocBuilder;
import java.util.List;
@@ -16,7 +16,7 @@ public class EnumType extends Type {
}
@Override
public String displaySchema(MarkupLanguage language) {
public String displaySchema(MarkupDocBuilder docBuilder) {
return "enum" + " (" + join(values, ", ") + ")";
}
}

View File

@@ -1,7 +1,8 @@
package io.github.robwin.swagger2markup.type;
import io.github.robwin.markup.builder.MarkupLanguage;
import io.github.robwin.markup.builder.MarkupDocBuilder;
import io.swagger.models.properties.Property;
import org.apache.commons.collections.MapUtils;
import java.util.Map;
@@ -15,8 +16,11 @@ public class ObjectType extends Type {
}
@Override
public String displaySchema(MarkupLanguage language) {
return "object";
public String displaySchema(MarkupDocBuilder docBuilder) {
if (MapUtils.isEmpty(properties))
return "empty object";
else
return "object";
}
public Map<String, Property> getProperties() {

View File

@@ -1,7 +1,6 @@
package io.github.robwin.swagger2markup.type;
import io.github.robwin.markup.builder.MarkupLanguage;
import io.github.robwin.swagger2markup.utils.MarkupDocBuilderUtils;
import io.github.robwin.markup.builder.MarkupDocBuilder;
public class RefType extends Type {
@@ -14,7 +13,7 @@ public class RefType extends Type {
}
@Override
public String displaySchema(MarkupLanguage language) {
return MarkupDocBuilderUtils.crossReference(getName(), getUniqueName(), language);
public String displaySchema(MarkupDocBuilder docBuilder) {
return docBuilder.crossReferenceAsString(getUniqueName(), getName());
}
}

View File

@@ -1,6 +1,6 @@
package io.github.robwin.swagger2markup.type;
import io.github.robwin.markup.builder.MarkupLanguage;
import io.github.robwin.markup.builder.MarkupDocBuilder;
import org.apache.commons.lang3.Validate;
public abstract class Type {
@@ -35,5 +35,5 @@ public abstract class Type {
this.uniqueName = uniqueName;
}
public abstract String displaySchema(MarkupLanguage language);
public abstract String displaySchema(MarkupDocBuilder docBuilder);
}

View File

@@ -1,84 +0,0 @@
package io.github.robwin.swagger2markup.utils;
import com.google.common.base.Function;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import io.github.robwin.markup.builder.MarkupDocBuilder;
import io.github.robwin.markup.builder.MarkupLanguage;
import io.github.robwin.markup.builder.asciidoc.AsciiDoc;
import io.github.robwin.markup.builder.asciidoc.AsciiDocBuilder;
import io.github.robwin.markup.builder.markdown.Markdown;
import io.github.robwin.markup.builder.markdown.MarkdownBuilder;
import java.util.List;
import static org.apache.commons.lang3.StringUtils.join;
/*
* FIXME : this code should go to markup-document-builder project
*/
public class MarkupDocBuilderUtils {
public static String normalizeAsciiDocAnchor(String anchor) {
return anchor.replaceAll("[^0-9a-zA-Z]", "_");
}
public static void anchor(String text, MarkupDocBuilder docBuilder) {
if (docBuilder instanceof AsciiDocBuilder) {
docBuilder.textLine("[[" + normalizeAsciiDocAnchor(text) + "]]");
}
}
public static void crossReference(String text, String anchor, MarkupDocBuilder docBuilder) {
if (docBuilder instanceof AsciiDocBuilder)
docBuilder.textLine(crossReference(text, anchor, MarkupLanguage.ASCIIDOC));
else if (docBuilder instanceof MarkdownBuilder)
docBuilder.textLine(crossReference(text, anchor, MarkupLanguage.MARKDOWN));
}
public static String crossReference(String text, String anchor, MarkupLanguage language) {
if (language == MarkupLanguage.ASCIIDOC) {
String normalizedAnchor = normalizeAsciiDocAnchor(anchor);
if (text == null && !anchor.equals(normalizedAnchor))
text = anchor;
if (text == null)
return AsciiDoc.CROSS_REFERENCE_START + normalizedAnchor + AsciiDoc.CROSS_REFERENCE_END;
else
return AsciiDoc.CROSS_REFERENCE_START + normalizedAnchor + "," + text + AsciiDoc.CROSS_REFERENCE_END;
} else {
if (text == null)
return anchor;
else
return text;
}
}
public static void tableWithHeaderRow(List<Integer> columnWidthRatios, List<List<String>> cells, MarkupDocBuilder docBuilder) {
if (docBuilder instanceof AsciiDocBuilder) {
docBuilder.textLine("[options=\"header\",cols=\"" + join(columnWidthRatios, ",") + "\"]");
docBuilder.textLine(AsciiDoc.TABLE.toString());
for (List<String> cols : cells) {
String row = AsciiDoc.TABLE_COLUMN_DELIMITER + join(Collections2.transform(cols, new Function<String, String>() {
public String apply(final String col) {
return col.replace(AsciiDoc.TABLE_COLUMN_DELIMITER.toString(), "{vbar}");
}
}), AsciiDoc.TABLE_COLUMN_DELIMITER.toString());
docBuilder.textLine(row);
}
docBuilder.textLine(AsciiDoc.TABLE.toString());
} else if (docBuilder instanceof MarkdownBuilder) {
List<String> rows = Lists.newArrayList(Collections2.transform(cells, new Function<List<String>, String>() {
public String apply(List<String> cols) {
return join(Collections2.transform(cols, new Function<String, String>() {
public String apply(final String col) {
return col.replace(Markdown.TABLE_COLUMN_DELIMITER.toString(), "&#124;");
}
}), Markdown.TABLE_COLUMN_DELIMITER.toString());
}
}));
docBuilder.tableWithHeaderRow(rows);
}
}
}