Skip to content

Commit

Permalink
Refactored package structure into an API (root), a SPI (service provi…
Browse files Browse the repository at this point in the history
…der interface) and internal classes which should not be used by a user directly.
  • Loading branch information
Robert Winkler committed Mar 7, 2016
1 parent 9f01adf commit 3189043
Show file tree
Hide file tree
Showing 46 changed files with 246 additions and 209 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.github.robwin.swagger2markup.config;
package io.github.robwin.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.*;
import io.github.robwin.swagger2markup.utils.IOUtils;
import io.github.robwin.swagger2markup.internal.model.PathOperation;
import io.github.robwin.swagger2markup.internal.utils.IOUtils;
import io.swagger.models.HttpMethod;
import io.swagger.models.parameters.Parameter;
import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -89,7 +89,7 @@ public static Builder ofProperties(Properties properties) {
* @param globalContext Partially initialized global context (globalContext.extensionRegistry == null)
*/
public void setGlobalContext(Swagger2MarkupConverter.Context globalContext) {
configureDefaultContentPaths(globalContext.swaggerLocation);
configureDefaultContentPaths(globalContext.getSwaggerLocation());
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,13 @@
*/
package io.github.robwin.swagger2markup;

import io.github.robwin.swagger2markup.builder.DefinitionsDocumentBuilder;
import io.github.robwin.swagger2markup.builder.OverviewDocumentBuilder;
import io.github.robwin.swagger2markup.builder.PathsDocumentBuilder;
import io.github.robwin.swagger2markup.builder.SecurityDocumentBuilder;
import io.github.robwin.swagger2markup.config.Swagger2MarkupConfig;
import io.github.robwin.swagger2markup.extension.Extension;
import io.github.robwin.swagger2markup.extension.Swagger2MarkupExtensionRegistry;
import io.github.robwin.swagger2markup.extension.SwaggerExtension;
import com.google.common.annotations.VisibleForTesting;
import io.github.robwin.swagger2markup.internal.builder.DefinitionsDocumentBuilder;
import io.github.robwin.swagger2markup.internal.builder.OverviewDocumentBuilder;
import io.github.robwin.swagger2markup.internal.builder.PathsDocumentBuilder;
import io.github.robwin.swagger2markup.internal.builder.SecurityDocumentBuilder;
import io.github.robwin.swagger2markup.spi.Extension;
import io.github.robwin.swagger2markup.spi.SwaggerExtension;
import io.swagger.models.Swagger;
import io.swagger.parser.SwaggerParser;
import org.apache.commons.io.IOUtils;
Expand All @@ -43,14 +42,21 @@
*/
public class Swagger2MarkupConverter {

public static class Context {
public Swagger2MarkupConfig config;
public Swagger2MarkupExtensionRegistry extensionRegistry;
public Swagger swagger;
public URI swaggerLocation;
private Context context;

public Swagger2MarkupConverter(Context globalContext) {
this.context = globalContext;
}

Context globalContext;
/**
* Returns the global Context
*
* @return the global Context
*/
@VisibleForTesting
Context getContext(){
return context;
}

/**
* Creates a Swagger2MarkupConverter.Builder using a remote URL.
Expand Down Expand Up @@ -113,12 +119,6 @@ public static Builder from(Reader swaggerReader) throws IOException {
return new Builder(swagger);
}

protected void applySwaggerExtensions() {
for (SwaggerExtension swaggerExtension : globalContext.extensionRegistry.getExtensions(SwaggerExtension.class)) {
swaggerExtension.apply(globalContext);
}
}

/**
* Builds the document with the given markup language and stores
* the files in the given folder.
Expand All @@ -144,17 +144,23 @@ public String asString() throws IOException {
return buildDocuments();
}

private void applySwaggerExtensions() {
for (SwaggerExtension swaggerExtension : context.extensionRegistry.getExtensions(SwaggerExtension.class)) {
swaggerExtension.apply(context);
}
}

/**
* Builds all documents and writes them to a directory
*
* @param outputPath the directory path where the generated file should be stored
* @throws IOException if a file cannot be written
*/
private void buildDocuments(Path outputPath) throws IOException {
new OverviewDocumentBuilder(globalContext, outputPath).build().writeToFile(outputPath.resolve(globalContext.config.getOverviewDocument()), StandardCharsets.UTF_8);
new PathsDocumentBuilder(globalContext, outputPath).build().writeToFile(outputPath.resolve(globalContext.config.getPathsDocument()), StandardCharsets.UTF_8);
new DefinitionsDocumentBuilder(globalContext, outputPath).build().writeToFile(outputPath.resolve(globalContext.config.getDefinitionsDocument()), StandardCharsets.UTF_8);
new SecurityDocumentBuilder(globalContext, outputPath).build().writeToFile(outputPath.resolve(globalContext.config.getSecurityDocument()), StandardCharsets.UTF_8);
new OverviewDocumentBuilder(context, outputPath).build().writeToFile(outputPath.resolve(context.config.getOverviewDocument()), StandardCharsets.UTF_8);
new PathsDocumentBuilder(context, outputPath).build().writeToFile(outputPath.resolve(context.config.getPathsDocument()), StandardCharsets.UTF_8);
new DefinitionsDocumentBuilder(context, outputPath).build().writeToFile(outputPath.resolve(context.config.getDefinitionsDocument()), StandardCharsets.UTF_8);
new SecurityDocumentBuilder(context, outputPath).build().writeToFile(outputPath.resolve(context.config.getSecurityDocument()), StandardCharsets.UTF_8);
}

/**
Expand All @@ -164,10 +170,10 @@ private void buildDocuments(Path outputPath) throws IOException {
*/
private String buildDocuments() {
StringBuilder sb = new StringBuilder();
sb.append(new OverviewDocumentBuilder(globalContext, null).build().toString());
sb.append(new PathsDocumentBuilder(globalContext, null).build().toString());
sb.append(new DefinitionsDocumentBuilder(globalContext, null).build().toString());
sb.append(new SecurityDocumentBuilder(globalContext, null).build().toString());
sb.append(new OverviewDocumentBuilder(context, null).build().toString());
sb.append(new PathsDocumentBuilder(context, null).build().toString());
sb.append(new DefinitionsDocumentBuilder(context, null).build().toString());
sb.append(new SecurityDocumentBuilder(context, null).build().toString());
return sb.toString();
}

Expand Down Expand Up @@ -238,30 +244,49 @@ public Builder withExtensionRegistry(Swagger2MarkupExtensionRegistry registry) {
}

public Swagger2MarkupConverter build() {
Context context = new Context();

context.swagger = this.swagger;
context.swaggerLocation = this.swaggerLocation;

if (config == null)
context.config = Swagger2MarkupConfig.ofDefaults().build();
else
context.config = config;
context.config.setGlobalContext(context);
config = Swagger2MarkupConfig.ofDefaults().build();

if (extensionRegistry == null)
context.extensionRegistry = Swagger2MarkupExtensionRegistry.ofDefaults().build();
else
context.extensionRegistry = extensionRegistry;
for (Extension extension : context.extensionRegistry.getExtensions())
extensionRegistry = Swagger2MarkupExtensionRegistry.ofDefaults().build();

Context context = new Context(config, extensionRegistry, swagger, swaggerLocation);
config.setGlobalContext(context);

for (Extension extension : extensionRegistry.getExtensions())
extension.setGlobalContext(context);
return new Swagger2MarkupConverter(context);
}
}

Swagger2MarkupConverter converter = new Swagger2MarkupConverter();
converter.globalContext = context;
public static class Context {
private Swagger2MarkupConfig config;
private Swagger2MarkupExtensionRegistry extensionRegistry;
private Swagger swagger;
private URI swaggerLocation;

return converter;
Context(Swagger2MarkupConfig config, Swagger2MarkupExtensionRegistry extensionRegistry, Swagger swagger, URI swaggerLocation) {
this.config = config;
this.extensionRegistry = extensionRegistry;
this.swagger = swagger;
this.swaggerLocation = swaggerLocation;
}

public Swagger2MarkupConfig getConfig() {
return config;
}

public Swagger2MarkupExtensionRegistry getExtensionRegistry() {
return extensionRegistry;
}

public Swagger getSwagger() {
return swagger;
}

public URI getSwaggerLocation() {
return swaggerLocation;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,15 @@
* limitations under the License.
*/

package io.github.robwin.swagger2markup.extension;
package io.github.robwin.swagger2markup;

import com.google.common.collect.Multimap;
import com.google.common.collect.MultimapBuilder;
import io.github.robwin.swagger2markup.extension.repository.DynamicDefinitionsContentExtension;
import io.github.robwin.swagger2markup.extension.repository.DynamicOperationsContentExtension;
import io.github.robwin.swagger2markup.extension.repository.DynamicOverviewContentExtension;
import io.github.robwin.swagger2markup.extension.repository.DynamicSecurityContentExtension;
import io.github.robwin.swagger2markup.internal.extensions.DynamicDefinitionsContentExtension;
import io.github.robwin.swagger2markup.internal.extensions.DynamicOperationsContentExtension;
import io.github.robwin.swagger2markup.internal.extensions.DynamicOverviewContentExtension;
import io.github.robwin.swagger2markup.internal.extensions.DynamicSecurityContentExtension;
import io.github.robwin.swagger2markup.spi.*;

import java.util.ArrayList;
import java.util.Arrays;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.github.robwin.swagger2markup.builder;
package io.github.robwin.swagger2markup.internal.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.document.MarkupDocument;
import io.github.robwin.swagger2markup.extension.DefinitionsContentExtension;
import io.github.robwin.swagger2markup.type.ObjectType;
import io.github.robwin.swagger2markup.type.Type;
import io.github.robwin.swagger2markup.internal.document.MarkupDocument;
import io.github.robwin.swagger2markup.spi.DefinitionsContentExtension;
import io.github.robwin.swagger2markup.internal.type.ObjectType;
import io.github.robwin.swagger2markup.internal.type.Type;
import io.swagger.models.ComposedModel;
import io.swagger.models.Model;
import io.swagger.models.RefModel;
Expand All @@ -41,7 +41,7 @@
import java.nio.file.Path;
import java.util.*;

import static io.github.robwin.swagger2markup.utils.IOUtils.normalizeName;
import static io.github.robwin.swagger2markup.internal.utils.IOUtils.normalizeName;
import static org.apache.commons.lang3.StringUtils.defaultString;
import static org.apache.commons.lang3.StringUtils.isNotBlank;

Expand Down Expand Up @@ -89,7 +89,7 @@ public DefinitionsDocumentBuilder(Swagger2MarkupConverter.Context context, Path
*/
@Override
public MarkupDocument build() {
definitions(globalContext.swagger.getDefinitions());
definitions(globalContext.getSwagger().getDefinitions());
return new MarkupDocument(markupDocBuilder);
}

Expand Down Expand Up @@ -142,7 +142,7 @@ private void definitions(Map<String, Model> definitions) {
* @param context context
*/
private void applyDefinitionExtension(DefinitionsContentExtension.Context context) {
for (DefinitionsContentExtension extension : globalContext.extensionRegistry.getExtensions(DefinitionsContentExtension.class)) {
for (DefinitionsContentExtension extension : globalContext.getExtensionRegistry().getExtensions(DefinitionsContentExtension.class)) {
extension.apply(context);
}
}
Expand Down Expand Up @@ -338,7 +338,7 @@ private Optional<String> handWrittenDefinitionDescription(String descriptionFold
for (String fileNameExtension : config.getMarkupLanguage().getFileNameExtensions()) {
URI contentUri = config.getDefinitionDescriptionsUri().resolve(descriptionFolder).resolve(descriptionFileName + fileNameExtension);

try (Reader reader = io.github.robwin.swagger2markup.utils.IOUtils.uriReader(contentUri)) {
try (Reader reader = io.github.robwin.swagger2markup.internal.utils.IOUtils.uriReader(contentUri)) {
if (logger.isInfoEnabled()) {
logger.info("Definition description content processed {}", contentUri);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.github.robwin.swagger2markup.builder;
package io.github.robwin.swagger2markup.internal.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.Swagger2MarkupConverter;
import io.github.robwin.swagger2markup.config.Swagger2MarkupConfig;
import io.github.robwin.swagger2markup.document.MarkupDocument;
import io.github.robwin.swagger2markup.type.DefinitionDocumentResolver;
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.IOUtils;
import io.github.robwin.swagger2markup.utils.PropertyUtils;
import io.github.robwin.swagger2markup.Swagger2MarkupConfig;
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.swagger.models.properties.Property;
import io.swagger.util.Json;
import org.apache.commons.collections.MapUtils;
Expand Down Expand Up @@ -68,7 +68,7 @@ public abstract class MarkupDocumentBuilder {

MarkupDocumentBuilder(Swagger2MarkupConverter.Context globalContext, Path outputPath) {
this.globalContext = globalContext;
this.config = globalContext.config;
this.config = globalContext.getConfig();
this.outputPath = outputPath;

this.markupDocBuilder = MarkupDocBuilders.documentBuilder(config.getMarkupLanguage(), config.getLineSeparator()).withAnchorPrefix(config.getAnchorPrefix());
Expand Down Expand Up @@ -140,7 +140,7 @@ protected List<ObjectType> typeProperties(ObjectType type, String uniquePrefix,
}
}

Object example = PropertyUtils.getExample(globalContext.config.isGeneratedExamplesEnabled(), property, markupDocBuilder);
Object example = PropertyUtils.getExample(config.isGeneratedExamplesEnabled(), property, markupDocBuilder);

List<String> content = Arrays.asList(
propertyName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.github.robwin.swagger2markup.builder;
package io.github.robwin.swagger2markup.internal.builder;

import io.github.robwin.swagger2markup.Swagger2MarkupConverter;
import io.github.robwin.swagger2markup.document.MarkupDocument;
import io.github.robwin.swagger2markup.extension.OverviewContentExtension;
import io.github.robwin.swagger2markup.internal.document.MarkupDocument;
import io.github.robwin.swagger2markup.spi.OverviewContentExtension;
import io.swagger.models.*;

import java.nio.file.Path;
Expand Down Expand Up @@ -86,7 +86,7 @@ private void addOverviewTitle(String title) {
* Builds the document header of the swagger model
*/
private void overview() {
Swagger swagger = globalContext.swagger;
Swagger swagger = globalContext.getSwagger();
Info info = swagger.getInfo();
this.markupDocBuilder.documentTitle(info.getTitle());

Expand Down Expand Up @@ -179,7 +179,7 @@ private void overview() {
* @param context context
*/
private void applyOverviewExtension(OverviewContentExtension.Context context) {
for (OverviewContentExtension extension : globalContext.extensionRegistry.getExtensions(OverviewContentExtension.class)) {
for (OverviewContentExtension extension : globalContext.getExtensionRegistry().getExtensions(OverviewContentExtension.class)) {
extension.apply(context);
}
}
Expand Down

0 comments on commit 3189043

Please sign in to comment.