Search in sources :

Example 61 with Model

use of io.swagger.models.Model in project swagger-core by swagger-api.

the class SpecFilter method filter.

public Swagger filter(Swagger swagger, SwaggerSpecFilter filter, Map<String, List<String>> params, Map<String, String> cookies, Map<String, List<String>> headers) {
    Swagger clone = new Swagger();
    clone.info(swagger.getInfo()).tags(swagger.getTags() == null ? null : new ArrayList<Tag>(swagger.getTags())).host(swagger.getHost()).basePath(swagger.getBasePath()).schemes(swagger.getSchemes()).consumes(swagger.getConsumes()).produces(swagger.getProduces()).externalDocs(swagger.getExternalDocs()).vendorExtensions(swagger.getVendorExtensions());
    final Set<String> filteredTags = new HashSet<String>();
    final Set<String> allowedTags = new HashSet<String>();
    for (String resourcePath : swagger.getPaths().keySet()) {
        Path path = swagger.getPaths().get(resourcePath);
        Map<String, Operation> ops = new HashMap<String, Operation>();
        ops.put("get", path.getGet());
        ops.put("head", path.getHead());
        ops.put("put", path.getPut());
        ops.put("post", path.getPost());
        ops.put("delete", path.getDelete());
        ops.put("patch", path.getPatch());
        ops.put("options", path.getOptions());
        Path clonedPath = new Path();
        for (String key : ops.keySet()) {
            Operation op = ops.get(key);
            if (op != null) {
                ApiDescription desc = new ApiDescription(resourcePath, key);
                final Set<String> tags;
                if (filter.isOperationAllowed(op, desc, params, cookies, headers)) {
                    clonedPath.set(key, filterOperation(filter, op, desc, params, cookies, headers));
                    tags = allowedTags;
                } else {
                    tags = filteredTags;
                }
                if (op.getTags() != null) {
                    tags.addAll(op.getTags());
                }
            }
        }
        if (!clonedPath.isEmpty()) {
            clone.path(resourcePath, clonedPath);
        }
    }
    final List<Tag> tags = clone.getTags();
    filteredTags.removeAll(allowedTags);
    if (tags != null && !filteredTags.isEmpty()) {
        for (Iterator<Tag> it = tags.iterator(); it.hasNext(); ) {
            if (filteredTags.contains(it.next().getName())) {
                it.remove();
            }
        }
        if (clone.getTags().isEmpty()) {
            clone.setTags(null);
        }
    }
    Map<String, Model> definitions = filterDefinitions(filter, swagger.getDefinitions(), params, cookies, headers);
    clone.setSecurityDefinitions(swagger.getSecurityDefinitions());
    clone.setSecurity(swagger.getSecurity());
    clone.setDefinitions(definitions);
    // existing client filters directly implementing SwaggerSpecFilter.
    if (filter instanceof AbstractSpecFilter) {
        if (((AbstractSpecFilter) filter).isRemovingUnreferencedDefinitions()) {
            clone = removeBrokenReferenceDefinitions(clone);
        }
    }
    return clone;
}
Also used : Path(io.swagger.models.Path) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Operation(io.swagger.models.Operation) Swagger(io.swagger.models.Swagger) Model(io.swagger.models.Model) RefModel(io.swagger.models.RefModel) ComposedModel(io.swagger.models.ComposedModel) ArrayModel(io.swagger.models.ArrayModel) Tag(io.swagger.models.Tag) ApiDescription(io.swagger.model.ApiDescription) HashSet(java.util.HashSet) LinkedHashSet(java.util.LinkedHashSet)

Example 62 with Model

use of io.swagger.models.Model in project swagger-core by swagger-api.

the class SpecFilter method filterDefinitions.

public Map<String, Model> filterDefinitions(SwaggerSpecFilter filter, Map<String, Model> definitions, Map<String, List<String>> params, Map<String, String> cookies, Map<String, List<String>> headers) {
    if (definitions == null) {
        return null;
    }
    Map<String, Model> clonedDefinitions = new LinkedHashMap<String, Model>();
    for (String key : definitions.keySet()) {
        Model definition = definitions.get(key);
        Map<String, Property> clonedProperties = new LinkedHashMap<String, Property>();
        if (definition.getProperties() != null) {
            for (String propName : definition.getProperties().keySet()) {
                Property property = definition.getProperties().get(propName);
                if (property != null) {
                    boolean shouldInclude = filter.isPropertyAllowed(definition, property, propName, params, cookies, headers);
                    if (shouldInclude) {
                        clonedProperties.put(propName, property);
                    }
                }
            }
        }
        Model clonedModel = (Model) definition.clone();
        if (clonedModel.getProperties() != null) {
            clonedModel.getProperties().clear();
        }
        if (definition.getVendorExtensions() != null && clonedModel.getVendorExtensions() != null) {
            clonedModel.getVendorExtensions().putAll(definition.getVendorExtensions());
        }
        clonedModel.setProperties(clonedProperties);
        clonedDefinitions.put(key, clonedModel);
    }
    return clonedDefinitions;
}
Also used : Model(io.swagger.models.Model) RefModel(io.swagger.models.RefModel) ComposedModel(io.swagger.models.ComposedModel) ArrayModel(io.swagger.models.ArrayModel) ArrayProperty(io.swagger.models.properties.ArrayProperty) RefProperty(io.swagger.models.properties.RefProperty) Property(io.swagger.models.properties.Property) MapProperty(io.swagger.models.properties.MapProperty) LinkedHashMap(java.util.LinkedHashMap)

Example 63 with Model

use of io.swagger.models.Model in project swagger-core by swagger-api.

the class ModelResolver method resolveSubtypes.

private boolean resolveSubtypes(ModelImpl model, BeanDescription bean, ModelConverterContext context) {
    final List<NamedType> types = _intr.findSubtypes(bean.getClassInfo());
    if (types == null) {
        return false;
    }
    /**
         * As the introspector will find @JsonSubTypes for a child class that are present on its super classes, the
         * code segment below will also run the introspector on the parent class, and then remove any sub-types that are
         * found for the parent from the sub-types found for the child. The same logic all applies to implemented
         * interfaces, and is accounted for below.
         */
    removeSuperClassAndInterfaceSubTypes(types, bean);
    int count = 0;
    final Class<?> beanClass = bean.getClassInfo().getAnnotated();
    for (NamedType subtype : types) {
        final Class<?> subtypeType = subtype.getType();
        if (!beanClass.isAssignableFrom(subtypeType)) {
            continue;
        }
        final Model subtypeModel = context.resolve(subtypeType);
        if (subtypeModel instanceof ModelImpl) {
            final ModelImpl impl = (ModelImpl) subtypeModel;
            // check if model name was inherited
            if (impl.getName().equals(model.getName())) {
                impl.setName(_typeNameResolver.nameForType(_mapper.constructType(subtypeType), TypeNameResolver.Options.SKIP_API_MODEL));
            }
            // remove shared properties defined in the parent
            final Map<String, Property> baseProps = model.getProperties();
            final Map<String, Property> subtypeProps = impl.getProperties();
            if (baseProps != null && subtypeProps != null) {
                for (Map.Entry<String, Property> entry : baseProps.entrySet()) {
                    if (entry.getValue().equals(subtypeProps.get(entry.getKey()))) {
                        subtypeProps.remove(entry.getKey());
                    }
                }
            }
            impl.setDiscriminator(null);
            ComposedModel child = new ComposedModel().parent(new RefModel(model.getName())).child(impl);
            context.defineModel(impl.getName(), child, subtypeType, null);
            ++count;
        }
    }
    return count != 0;
}
Also used : RefModel(io.swagger.models.RefModel) NamedType(com.fasterxml.jackson.databind.jsontype.NamedType) ComposedModel(io.swagger.models.ComposedModel) Model(io.swagger.models.Model) RefModel(io.swagger.models.RefModel) ComposedModel(io.swagger.models.ComposedModel) ApiModel(io.swagger.annotations.ApiModel) ModelImpl(io.swagger.models.ModelImpl) JsonProperty(com.fasterxml.jackson.annotation.JsonProperty) StringProperty(io.swagger.models.properties.StringProperty) ArrayProperty(io.swagger.models.properties.ArrayProperty) Property(io.swagger.models.properties.Property) MapProperty(io.swagger.models.properties.MapProperty) UUIDProperty(io.swagger.models.properties.UUIDProperty) ApiModelProperty(io.swagger.annotations.ApiModelProperty) AbstractNumericProperty(io.swagger.models.properties.AbstractNumericProperty) RefProperty(io.swagger.models.properties.RefProperty) IntegerProperty(io.swagger.models.properties.IntegerProperty) Map(java.util.Map) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap)

Example 64 with Model

use of io.swagger.models.Model in project swagger-core by swagger-api.

the class ModelConverterTest method scanModelWithOffset.

@Test(description = "it tests a model with java offset")
public void scanModelWithOffset() throws IOException {
    final Map<String, Model> models = readAll(ModelWithOffset.class);
    assertEquals(models.size(), 1);
    final Model model = models.get("ModelWithOffset");
    Property property = model.getProperties().get("offset");
    assertEquals(property.getType(), "string");
    assertEquals(property.getFormat(), "date-time");
}
Also used : AbstractModelWithApiModel(io.swagger.models.composition.AbstractModelWithApiModel) Model(io.swagger.models.Model) ModelWithApiModel(io.swagger.models.ModelWithApiModel) EmptyModel(io.swagger.models.EmptyModel) JodaDateTimeModel(io.swagger.models.JodaDateTimeModel) JacksonReadonlyModel(io.swagger.models.JacksonReadonlyModel) StringProperty(io.swagger.models.properties.StringProperty) ArrayProperty(io.swagger.models.properties.ArrayProperty) LongProperty(io.swagger.models.properties.LongProperty) DecimalProperty(io.swagger.models.properties.DecimalProperty) Property(io.swagger.models.properties.Property) DoubleProperty(io.swagger.models.properties.DoubleProperty) MapProperty(io.swagger.models.properties.MapProperty) ApiModelProperty(io.swagger.annotations.ApiModelProperty) BaseIntegerProperty(io.swagger.models.properties.BaseIntegerProperty) ModelWithUrlProperty(io.swagger.models.composition.ModelWithUrlProperty) RefProperty(io.swagger.models.properties.RefProperty) FloatProperty(io.swagger.models.properties.FloatProperty) IntegerProperty(io.swagger.models.properties.IntegerProperty) Test(org.testng.annotations.Test)

Example 65 with Model

use of io.swagger.models.Model in project swagger-core by swagger-api.

the class ModelConverterTest method setReadOnly.

@Test(description = "it should set readOnly per #854")
public void setReadOnly() {
    final Map<String, Model> schemas = readAll(JacksonReadonlyModel.class);
    final ModelImpl model = (ModelImpl) schemas.get("JacksonReadonlyModel");
    final Property prop = model.getProperties().get("count");
    assertTrue(prop.getReadOnly());
}
Also used : AbstractModelWithApiModel(io.swagger.models.composition.AbstractModelWithApiModel) Model(io.swagger.models.Model) ModelWithApiModel(io.swagger.models.ModelWithApiModel) EmptyModel(io.swagger.models.EmptyModel) JodaDateTimeModel(io.swagger.models.JodaDateTimeModel) JacksonReadonlyModel(io.swagger.models.JacksonReadonlyModel) ModelImpl(io.swagger.models.ModelImpl) StringProperty(io.swagger.models.properties.StringProperty) ArrayProperty(io.swagger.models.properties.ArrayProperty) LongProperty(io.swagger.models.properties.LongProperty) DecimalProperty(io.swagger.models.properties.DecimalProperty) Property(io.swagger.models.properties.Property) DoubleProperty(io.swagger.models.properties.DoubleProperty) MapProperty(io.swagger.models.properties.MapProperty) ApiModelProperty(io.swagger.annotations.ApiModelProperty) BaseIntegerProperty(io.swagger.models.properties.BaseIntegerProperty) ModelWithUrlProperty(io.swagger.models.composition.ModelWithUrlProperty) RefProperty(io.swagger.models.properties.RefProperty) FloatProperty(io.swagger.models.properties.FloatProperty) IntegerProperty(io.swagger.models.properties.IntegerProperty) Test(org.testng.annotations.Test)

Aggregations

Model (io.swagger.models.Model)107 Test (org.testng.annotations.Test)90 Property (io.swagger.models.properties.Property)51 StringProperty (io.swagger.models.properties.StringProperty)33 ArrayModel (io.swagger.models.ArrayModel)30 ArrayProperty (io.swagger.models.properties.ArrayProperty)27 ModelImpl (io.swagger.models.ModelImpl)23 RefProperty (io.swagger.models.properties.RefProperty)23 RefModel (io.swagger.models.RefModel)20 ApiModelProperty (io.swagger.annotations.ApiModelProperty)19 ApiModel (io.swagger.annotations.ApiModel)16 IntegerProperty (io.swagger.models.properties.IntegerProperty)15 Operation (io.swagger.models.Operation)14 BodyParameter (io.swagger.models.parameters.BodyParameter)14 MapProperty (io.swagger.models.properties.MapProperty)14 Path (io.swagger.models.Path)13 LongProperty (io.swagger.models.properties.LongProperty)13 ComposedModel (io.swagger.models.ComposedModel)12 EmptyModel (io.swagger.models.EmptyModel)12 JacksonReadonlyModel (io.swagger.models.JacksonReadonlyModel)12