Skip to content

Commit

Permalink
Refactored ParameterAdapter and moved ParameterAdapter and PropertyAd…
Browse files Browse the repository at this point in the history
…apter into a new package.
  • Loading branch information
Robert Winkler committed Nov 16, 2016
1 parent 25d4311 commit 2096ec0
Show file tree
Hide file tree
Showing 16 changed files with 153 additions and 39 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.github.swagger2markup.internal.utils;
package io.github.swagger2markup.internal.adapter;

import io.github.swagger2markup.Swagger2MarkupConfig;
import io.github.swagger2markup.internal.resolver.DocumentResolver;
import io.github.swagger2markup.internal.type.*;
import io.github.swagger2markup.internal.utils.InlineSchemaUtils;
import io.github.swagger2markup.internal.utils.ModelUtils;
import io.github.swagger2markup.model.PathOperation;
import io.swagger.models.Model;
import io.swagger.models.parameters.AbstractSerializableParameter;
import io.swagger.models.parameters.BodyParameter;
Expand All @@ -26,30 +30,55 @@
import org.apache.commons.lang3.Validate;
import org.apache.commons.lang3.text.WordUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;

public class ParameterAdapter {

private final Parameter parameter;

public ParameterAdapter(Parameter parameter){
private Type type;
private final List<ObjectType> inlineDefinitions = new ArrayList<>();

public ParameterAdapter(Swagger2MarkupConfig config,
PathOperation operation,
Parameter parameter,
Map<String, Model> definitions,
DocumentResolver definitionDocumentResolver){
Validate.notNull(parameter, "parameter must not be null");
this.parameter = parameter;
type = getType(definitions, definitionDocumentResolver);
if (config.isInlineSchemaEnabled()){
if(config.isFlatBodyEnabled()) {
if (!(type instanceof ObjectType)){
type = InlineSchemaUtils.createInlineType(type, parameter.getName(), operation.getId() + " " + parameter.getName(), inlineDefinitions);
}
}else{
type = InlineSchemaUtils.createInlineType(type, parameter.getName(), operation.getId() + " " + parameter.getName(), inlineDefinitions);
}
}
}

public String getIn(){
return WordUtils.capitalize(parameter.getIn());
}

public Type getType(){
return type;
}

public List<ObjectType> getInlineDefinitions(){
return inlineDefinitions;
}

/**
* Retrieves the type of a parameter, or otherwise null
*
* @param definitionDocumentResolver the defintion document resolver
* @return the type of the parameter, or otherwise null
*/
public Type getType(Map<String, Model> definitions, DocumentResolver definitionDocumentResolver){
private Type getType(Map<String, Model> definitions, DocumentResolver definitionDocumentResolver){
Validate.notNull(parameter, "parameter must not be null!");
Type type = null;

Expand All @@ -60,7 +89,7 @@ public Type getType(Map<String, Model> definitions, DocumentResolver definitionD
if(model != null){
type = ModelUtils.getType(model, definitions, definitionDocumentResolver);
}else{
type = new BasicType("string", null);
type = new BasicType("string", bodyParameter.getName());
}

}
Expand All @@ -70,14 +99,14 @@ else if(parameter instanceof AbstractSerializableParameter){
List<String> enums = serializableParameter.getEnum();

if(CollectionUtils.isNotEmpty(enums)){
type = new EnumType(null, enums);
type = new EnumType(serializableParameter.getName(), enums);
}else{
type = new BasicType(serializableParameter.getType(), null, serializableParameter.getFormat());
type = new BasicType(serializableParameter.getType(), serializableParameter.getName(), serializableParameter.getFormat());
}
if(serializableParameter.getType().equals("array")){
String collectionFormat = serializableParameter.getCollectionFormat();

type = new ArrayType(null, new PropertyAdapter(serializableParameter.getItems()).getType(definitionDocumentResolver), collectionFormat);
type = new ArrayType(serializableParameter.getName(), new PropertyAdapter(serializableParameter.getItems()).getType(definitionDocumentResolver), collectionFormat);
}
}
else if(parameter instanceof RefParameter){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.github.swagger2markup.internal.utils;
package io.github.swagger2markup.internal.adapter;

import io.github.swagger2markup.internal.resolver.DocumentResolver;
import io.github.swagger2markup.internal.type.*;
Expand Down Expand Up @@ -266,7 +266,7 @@ public Optional<Object> getExample(boolean generateMissingExamples, MarkupDocBui
* @param markupDocBuilder doc builder
* @return a generated example for the property
*/
static Object generateExample(Property property, MarkupDocBuilder markupDocBuilder) {
public static Object generateExample(Property property, MarkupDocBuilder markupDocBuilder) {
switch (property.getType()) {
case "integer":
return 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import io.github.swagger2markup.internal.resolver.DocumentResolver;
import io.github.swagger2markup.internal.type.ObjectType;
import io.github.swagger2markup.internal.type.Type;
import io.github.swagger2markup.internal.utils.ParameterAdapter;
import io.github.swagger2markup.internal.adapter.ParameterAdapter;
import io.github.swagger2markup.markup.builder.MarkupDocBuilder;
import io.github.swagger2markup.model.PathOperation;
import io.github.swagger2markup.spi.MarkupComponent;
Expand All @@ -37,7 +37,6 @@
import java.util.Map;

import static io.github.swagger2markup.Labels.*;
import static io.github.swagger2markup.internal.utils.InlineSchemaUtils.createInlineType;
import static org.apache.commons.lang3.StringUtils.isNotBlank;

public class BodyParameterComponent extends MarkupComponent<BodyParameterComponent.Parameters> {
Expand Down Expand Up @@ -80,16 +79,10 @@ public MarkupDocBuilder apply(MarkupDocBuilder markupDocBuilder, Parameters para
if (CollectionUtils.isNotEmpty(parameters)) {
for (Parameter parameter : parameters) {
if (StringUtils.equals(parameter.getIn(), "body")) {
ParameterAdapter parameterAdapter = new ParameterAdapter(parameter);
ParameterAdapter parameterAdapter = new ParameterAdapter(config, operation, parameter, definitions, definitionDocumentResolver);


Type type = parameterAdapter.getType(definitions, definitionDocumentResolver);

if (!(type instanceof ObjectType)) {
if (config.isInlineSchemaEnabled()) {
type = createInlineType(type, parameter.getName(), operation.getId() + " " + parameter.getName(), inlineDefinitions);
}
}
Type type = parameterAdapter.getType();
inlineDefinitions.addAll(parameterAdapter.getInlineDefinitions());

buildSectionTitle(markupDocBuilder, labels.getLabel(BODY_PARAMETER));
String description = parameter.getDescription();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@


import ch.netzwerg.paleo.StringColumn;
import io.github.swagger2markup.Swagger2MarkupConverter;
import io.github.swagger2markup.Labels;
import io.github.swagger2markup.Swagger2MarkupConverter;
import io.github.swagger2markup.internal.resolver.DocumentResolver;
import io.github.swagger2markup.internal.type.ObjectType;
import io.github.swagger2markup.internal.type.Type;
import io.github.swagger2markup.internal.utils.ParameterAdapter;
import io.github.swagger2markup.internal.adapter.ParameterAdapter;
import io.github.swagger2markup.markup.builder.MarkupDocBuilder;
import io.github.swagger2markup.model.PathOperation;
import io.github.swagger2markup.spi.MarkupComponent;
Expand All @@ -41,7 +41,6 @@

import static ch.netzwerg.paleo.ColumnIds.StringColumnId;
import static io.github.swagger2markup.Labels.*;
import static io.github.swagger2markup.internal.utils.InlineSchemaUtils.createInlineType;
import static org.apache.commons.lang3.StringUtils.isNotBlank;

public class ParameterTableComponent extends MarkupComponent<ParameterTableComponent.Parameters> {
Expand Down Expand Up @@ -110,12 +109,10 @@ public MarkupDocBuilder apply(MarkupDocBuilder markupDocBuilder, Parameters para
.putMetaData(TableComponent.HEADER_COLUMN, "true");

for (Parameter parameter : filteredParameters) {
ParameterAdapter parameterAdapter = new ParameterAdapter(parameter);
ParameterAdapter parameterAdapter = new ParameterAdapter(config, operation, parameter, definitions, definitionDocumentResolver);

Type type = parameterAdapter.getType(definitions, definitionDocumentResolver);
if (config.isInlineSchemaEnabled()){
type = createInlineType(type, parameter.getName(), operation.getId() + " " + parameter.getName(), inlineDefinitions);
}
Type type = parameterAdapter.getType();
inlineDefinitions.addAll(parameterAdapter.getInlineDefinitions());

typeColumnBuilder.add(boldText(markupDocBuilder, parameterAdapter.getIn()));
nameColumnBuilder.add(getParameterNameColumnContent(markupDocBuilder, parameter));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import io.github.swagger2markup.internal.resolver.DocumentResolver;
import io.github.swagger2markup.internal.type.ObjectType;
import io.github.swagger2markup.internal.type.Type;
import io.github.swagger2markup.internal.utils.PropertyAdapter;
import io.github.swagger2markup.internal.adapter.PropertyAdapter;
import io.github.swagger2markup.markup.builder.MarkupDocBuilder;
import io.github.swagger2markup.spi.MarkupComponent;
import io.swagger.models.properties.Property;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import io.github.swagger2markup.internal.resolver.DocumentResolver;
import io.github.swagger2markup.internal.type.ObjectType;
import io.github.swagger2markup.internal.type.Type;
import io.github.swagger2markup.internal.utils.PropertyAdapter;
import io.github.swagger2markup.internal.adapter.PropertyAdapter;
import io.github.swagger2markup.markup.builder.MarkupDocBuilder;
import io.github.swagger2markup.model.PathOperation;
import io.github.swagger2markup.spi.MarkupComponent;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package io.github.swagger2markup.internal.utils;

import io.github.swagger2markup.internal.adapter.ParameterAdapter;
import io.github.swagger2markup.internal.adapter.PropertyAdapter;
import io.github.swagger2markup.internal.resolver.DocumentResolver;
import io.github.swagger2markup.internal.type.ObjectType;
import io.github.swagger2markup.markup.builder.MarkupDocBuilder;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
package io.github.swagger2markup.internal.utils;

import com.google.common.collect.ImmutableMap;
import io.github.swagger2markup.internal.adapter.PropertyAdapter;
import io.github.swagger2markup.internal.resolver.DocumentResolver;
import io.github.swagger2markup.internal.type.*;
import io.swagger.models.*;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public void setUp(){
@Test
public void testDefinitionComponent() throws URISyntaxException {
//Given
Path file = Paths.get(AsciidocConverterTest.class.getResource("/yaml/swagger_petstore.yaml").toURI());
Path file = Paths.get(DefinitionComponentTest.class.getResource("/yaml/swagger_petstore.yaml").toURI());
Swagger2MarkupConverter converter = Swagger2MarkupConverter.from(file).build();
Swagger swagger = converter.getContext().getSwagger();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public void setUp(){
@Test
public void testParameterTableComponent() throws URISyntaxException {
//Given
Path file = Paths.get(AsciidocConverterTest.class.getResource("/yaml/swagger_petstore.yaml").toURI());
Path file = Paths.get(ParameterTableComponentTest.class.getResource("/yaml/swagger_petstore.yaml").toURI());
Swagger2MarkupConverter converter = Swagger2MarkupConverter.from(file).build();
Swagger swagger = converter.getContext().getSwagger();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public void testPathOperationComponent() throws URISyntaxException {
FileUtils.deleteQuietly(outputDirectory.toFile());

//Given
Path file = Paths.get(AsciidocConverterTest.class.getResource("/yaml/swagger_petstore.yaml").toURI());
Path file = Paths.get(PathOperationComponentTest.class.getResource("/yaml/swagger_petstore.yaml").toURI());
Swagger2MarkupConverter converter = Swagger2MarkupConverter.from(file).build();
Swagger swagger = converter.getContext().getSwagger();

Expand Down Expand Up @@ -73,7 +73,7 @@ public void testInlineSchema() throws URISyntaxException {
FileUtils.deleteQuietly(outputDirectory.toFile());

//Given
Path file = Paths.get(AsciidocConverterTest.class.getResource("/yaml/swagger_inlineSchema.yaml").toURI());
Path file = Paths.get(PathOperationComponentTest.class.getResource("/yaml/swagger_inlineSchema.yaml").toURI());
Swagger2MarkupConverter converter = Swagger2MarkupConverter.from(file).build();
Swagger swagger = converter.getContext().getSwagger();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public void setUp(){
@Test
public void testPropertiesTableComponent() throws URISyntaxException {
//Given
Path file = Paths.get(AsciidocConverterTest.class.getResource("/yaml/swagger_petstore.yaml").toURI());
Path file = Paths.get(PropertiesTableComponentTest.class.getResource("/yaml/swagger_petstore.yaml").toURI());
Swagger2MarkupConverter converter = Swagger2MarkupConverter.from(file).build();
Swagger swagger = converter.getContext().getSwagger();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public void setUp(){
@Test
public void testResponsesComponent() throws URISyntaxException {
//Given
Path file = Paths.get(AsciidocConverterTest.class.getResource("/yaml/swagger_petstore.yaml").toURI());
Path file = Paths.get(ResponsesComponentTest.class.getResource("/yaml/swagger_petstore.yaml").toURI());
Swagger2MarkupConverter converter = Swagger2MarkupConverter.from(file).build();
Swagger swagger = converter.getContext().getSwagger();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public void setUp(){
@Test
public void testSecuritySchemeComponent() throws URISyntaxException {
//Given
Path file = Paths.get(AsciidocConverterTest.class.getResource("/yaml/swagger_petstore.yaml").toURI());
Path file = Paths.get(SecuritySchemeComponentTest.class.getResource("/yaml/swagger_petstore.yaml").toURI());
Swagger2MarkupConverter converter = Swagger2MarkupConverter.from(file).build();
Swagger swagger = converter.getContext().getSwagger();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public void setUp(){
@Test
public void testSecuritySchemeDefinitionComponent() throws URISyntaxException {
//Given
Path file = Paths.get(AsciidocConverterTest.class.getResource("/yaml/swagger_petstore.yaml").toURI());
Path file = Paths.get(SecuritySchemeDefinitionComponentTest.class.getResource("/yaml/swagger_petstore.yaml").toURI());
Swagger2MarkupConverter converter = Swagger2MarkupConverter.from(file).build();
Swagger swagger = converter.getContext().getSwagger();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
/*
* 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.internal.utils;


import io.github.swagger2markup.Swagger2MarkupConverter;
import io.github.swagger2markup.internal.adapter.ParameterAdapter;
import io.github.swagger2markup.internal.resolver.DefinitionDocumentResolverFromOperation;
import io.github.swagger2markup.internal.type.BasicType;
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.model.PathOperation;
import io.swagger.models.Swagger;
import io.swagger.models.parameters.Parameter;
import org.junit.Test;

import java.net.URISyntaxException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

public class ParameterAdapterTest {

@Test
public void testParameterWrapper() throws URISyntaxException {
//Given
Path file = Paths.get(ParameterAdapterTest.class.getResource("/yaml/swagger_inlineSchema.yaml").toURI());
Swagger2MarkupConverter converter = Swagger2MarkupConverter.from(file).build();
Swagger2MarkupConverter.Context context = converter.getContext();
Swagger swagger = context.getSwagger();

io.swagger.models.Path path = swagger.getPaths().get("/LaunchCommand");
List<PathOperation> pathOperations = PathUtils.toPathOperationsList("/LaunchCommand", path);

PathOperation operation = pathOperations.get(0);
List<Parameter> parameters = operation.getOperation().getParameters();
DefinitionDocumentResolverFromOperation resolverFromOperation = new DefinitionDocumentResolverFromOperation(context);

//Test Query Parameter
Parameter parameter = parameters.get(0);
ParameterAdapter parameterAdapter = new ParameterAdapter(
context.getConfig(),
operation,
parameter,
swagger.getDefinitions(),
resolverFromOperation);
Type type = parameterAdapter.getType();

assertThat(parameterAdapter.getIn()).isEqualTo("Query");
assertThat(type).isInstanceOf(BasicType.class);
assertThat(type.getName()).isEqualTo("Version");
assertThat(type.getUniqueName()).isEqualTo("Version");
assertThat(((BasicType)type).getType()).isEqualTo("string");

//Test Body Parameter
parameter = parameters.get(2);
parameterAdapter = new ParameterAdapter(
context.getConfig(),
operation,
parameter,
swagger.getDefinitions(),
resolverFromOperation);
type = parameterAdapter.getType();

assertThat(parameterAdapter.getIn()).isEqualTo("Body");
assertThat(type).isInstanceOf(RefType.class);
Type refType = ((RefType)type).getRefType();
assertThat(refType).isInstanceOf(ObjectType.class);
ObjectType objectType = (ObjectType)refType;
assertThat(objectType.getProperties()).hasSize(3);

//Inline Schema

assertThat(parameterAdapter.getInlineDefinitions()).hasSize(1);
}
}

0 comments on commit 2096ec0

Please sign in to comment.