diff --git a/build.gradle b/build.gradle index 3507259b..5509bf95 100644 --- a/build.gradle +++ b/build.gradle @@ -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" diff --git a/src/main/java/io/github/robwin/swagger2markup/builder/document/DefinitionsDocument.java b/src/main/java/io/github/robwin/swagger2markup/builder/document/DefinitionsDocument.java index 5d5aed64..3af38af6 100644 --- a/src/main/java/io/github/robwin/swagger2markup/builder/document/DefinitionsDocument.java +++ b/src/main/java/io/github/robwin/swagger2markup/builder/document/DefinitionsDocument.java @@ -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); } diff --git a/src/main/java/io/github/robwin/swagger2markup/builder/document/MarkupDocument.java b/src/main/java/io/github/robwin/swagger2markup/builder/document/MarkupDocument.java index 27d77819..78105fa6 100644 --- a/src/main/java/io/github/robwin/swagger2markup/builder/document/MarkupDocument.java +++ b/src/main/java/io/github/robwin/swagger2markup/builder/document/MarkupDocument.java @@ -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> cells = new ArrayList<>(); - List header = Arrays.asList(NAME_COLUMN, DESCRIPTION_COLUMN, REQUIRED_COLUMN, SCHEMA_COLUMN, DEFAULT_COLUMN); - cells.add(header); + List 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 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; diff --git a/src/main/java/io/github/robwin/swagger2markup/builder/document/OverviewDocument.java b/src/main/java/io/github/robwin/swagger2markup/builder/document/OverviewDocument.java index 9d194bb6..8be64943 100644 --- a/src/main/java/io/github/robwin/swagger2markup/builder/document/OverviewDocument.java +++ b/src/main/java/io/github/robwin/swagger2markup/builder/document/OverviewDocument.java @@ -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(); } } diff --git a/src/main/java/io/github/robwin/swagger2markup/builder/document/PathsDocument.java b/src/main/java/io/github/robwin/swagger2markup/builder/document/PathsDocument.java index dd9cba18..04a67b46 100644 --- a/src/main/java/io/github/robwin/swagger2markup/builder/document/PathsDocument.java +++ b/src/main/java/io/github/robwin/swagger2markup/builder/document/PathsDocument.java @@ -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 localDefinitions = new ArrayList<>(); if(CollectionUtils.isNotEmpty(parameters)){ List> cells = new ArrayList<>(); - // Table header row - List header = Arrays.asList(TYPE_COLUMN, NAME_COLUMN, DESCRIPTION_COLUMN, REQUIRED_COLUMN, SCHEMA_COLUMN, DEFAULT_COLUMN); - cells.add(header); + List 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 localDefinitions = new ArrayList<>(); if(MapUtils.isNotEmpty(responses)){ List> cells = new ArrayList<>(); - cells.add(Arrays.asList(HTTP_CODE_COLUMN, DESCRIPTION_COLUMN, SCHEMA_COLUMN)); + List cols = Arrays.asList( + new MarkupTableColumn(HTTP_CODE_COLUMN, 1), + new MarkupTableColumn(DESCRIPTION_COLUMN, 6), + new MarkupTableColumn(SCHEMA_COLUMN, 1)); for(Map.Entry 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 definitions, int depth) { diff --git a/src/main/java/io/github/robwin/swagger2markup/type/ArrayType.java b/src/main/java/io/github/robwin/swagger2markup/type/ArrayType.java index 797ca5a2..f6a333f1 100644 --- a/src/main/java/io/github/robwin/swagger2markup/type/ArrayType.java +++ b/src/main/java/io/github/robwin/swagger2markup/type/ArrayType.java @@ -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"; } } diff --git a/src/main/java/io/github/robwin/swagger2markup/type/BasicType.java b/src/main/java/io/github/robwin/swagger2markup/type/BasicType.java index 3af7459c..22c4cf20 100644 --- a/src/main/java/io/github/robwin/swagger2markup/type/BasicType.java +++ b/src/main/java/io/github/robwin/swagger2markup/type/BasicType.java @@ -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 diff --git a/src/main/java/io/github/robwin/swagger2markup/type/EnumType.java b/src/main/java/io/github/robwin/swagger2markup/type/EnumType.java index 9ed9ff29..95812622 100644 --- a/src/main/java/io/github/robwin/swagger2markup/type/EnumType.java +++ b/src/main/java/io/github/robwin/swagger2markup/type/EnumType.java @@ -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, ", ") + ")"; } } diff --git a/src/main/java/io/github/robwin/swagger2markup/type/ObjectType.java b/src/main/java/io/github/robwin/swagger2markup/type/ObjectType.java index 36731c33..85d68c98 100644 --- a/src/main/java/io/github/robwin/swagger2markup/type/ObjectType.java +++ b/src/main/java/io/github/robwin/swagger2markup/type/ObjectType.java @@ -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 getProperties() { diff --git a/src/main/java/io/github/robwin/swagger2markup/type/RefType.java b/src/main/java/io/github/robwin/swagger2markup/type/RefType.java index f6a41441..d6e9186c 100644 --- a/src/main/java/io/github/robwin/swagger2markup/type/RefType.java +++ b/src/main/java/io/github/robwin/swagger2markup/type/RefType.java @@ -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()); } } diff --git a/src/main/java/io/github/robwin/swagger2markup/type/Type.java b/src/main/java/io/github/robwin/swagger2markup/type/Type.java index 2660cccd..00360672 100644 --- a/src/main/java/io/github/robwin/swagger2markup/type/Type.java +++ b/src/main/java/io/github/robwin/swagger2markup/type/Type.java @@ -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); } diff --git a/src/main/java/io/github/robwin/swagger2markup/utils/MarkupDocBuilderUtils.java b/src/main/java/io/github/robwin/swagger2markup/utils/MarkupDocBuilderUtils.java deleted file mode 100644 index 6f950ee9..00000000 --- a/src/main/java/io/github/robwin/swagger2markup/utils/MarkupDocBuilderUtils.java +++ /dev/null @@ -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 columnWidthRatios, List> cells, MarkupDocBuilder docBuilder) { - if (docBuilder instanceof AsciiDocBuilder) { - docBuilder.textLine("[options=\"header\",cols=\"" + join(columnWidthRatios, ",") + "\"]"); - docBuilder.textLine(AsciiDoc.TABLE.toString()); - - for (List cols : cells) { - String row = AsciiDoc.TABLE_COLUMN_DELIMITER + join(Collections2.transform(cols, new Function() { - 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 rows = Lists.newArrayList(Collections2.transform(cells, new Function, String>() { - public String apply(List cols) { - return join(Collections2.transform(cols, new Function() { - public String apply(final String col) { - return col.replace(Markdown.TABLE_COLUMN_DELIMITER.toString(), "|"); - } - }), Markdown.TABLE_COLUMN_DELIMITER.toString()); - } - })); - - docBuilder.tableWithHeaderRow(rows); - } - } -}