use of io.swagger.v3.oas.annotations.media.Schema in project swagger-parser by swagger-api.
the class ResolverFully method resolvePath.
public void resolvePath(PathItem pathItem) {
for (Operation op : pathItem.readOperations()) {
// inputs
if (op.getParameters() != null) {
for (Parameter parameter : op.getParameters()) {
parameter = parameter.get$ref() != null ? resolveParameter(parameter) : parameter;
if (parameter.getSchema() != null) {
Schema resolved = resolveSchema(parameter.getSchema());
if (resolved != null) {
parameter.setSchema(resolved);
}
}
if (parameter.getContent() != null) {
Map<String, MediaType> content = parameter.getContent();
for (String key : content.keySet()) {
if (content.get(key) != null && content.get(key).getSchema() != null) {
Schema resolvedSchema = resolveSchema(content.get(key).getSchema());
if (resolvedSchema != null) {
content.get(key).setSchema(resolvedSchema);
}
}
}
}
}
}
if (op.getCallbacks() != null) {
Map<String, Callback> callbacks = op.getCallbacks();
for (String name : callbacks.keySet()) {
Callback callback = callbacks.get(name);
callback = callback.get$ref() != null ? resolveCallback(callback) : callback;
if (callback != null) {
for (String callbackName : callback.keySet()) {
PathItem path = callback.get(callbackName);
if (path != null) {
resolvePath(path);
}
}
}
op.getCallbacks().put(name, callback);
}
}
RequestBody refRequestBody = op.getRequestBody();
if (refRequestBody != null) {
RequestBody requestBody = refRequestBody.get$ref() != null ? resolveRequestBody(refRequestBody) : refRequestBody;
op.setRequestBody(requestBody);
if (requestBody.getContent() != null) {
Map<String, MediaType> content = requestBody.getContent();
for (String key : content.keySet()) {
if (content.get(key) != null && content.get(key).getSchema() != null) {
Schema resolved = resolveSchema(content.get(key).getSchema());
if (resolved != null) {
content.get(key).setSchema(resolved);
}
}
}
}
}
// responses
ApiResponses responses = op.getResponses();
if (responses != null) {
for (String code : responses.keySet()) {
ApiResponse response = responses.get(code);
if (response.getContent() != null) {
Map<String, MediaType> content = response.getContent();
for (String mediaType : content.keySet()) {
if (content.get(mediaType).getSchema() != null) {
Schema resolved = resolveSchema(content.get(mediaType).getSchema());
response.getContent().get(mediaType).setSchema(resolved);
}
if (content.get(mediaType).getExamples() != null) {
Map<String, Example> resolved = resolveExample(content.get(mediaType).getExamples());
response.getContent().get(mediaType).setExamples(resolved);
}
}
}
resolveHeaders(response.getHeaders());
Map<String, Link> links = response.getLinks();
if (links != null) {
for (Map.Entry<String, Link> link : links.entrySet()) {
Link value = link.getValue();
Link resolvedValue = value.get$ref() != null ? resolveLink(value) : value;
link.setValue(resolvedValue);
}
}
}
}
}
}
use of io.swagger.v3.oas.annotations.media.Schema in project swagger-parser by swagger-api.
the class InlineModelResolver method modelFromProperty.
@SuppressWarnings("static-method")
public Schema modelFromProperty(Schema object, @SuppressWarnings("unused") String path) {
String description = object.getDescription();
String example = null;
Object obj = object.getExample();
if (obj != null) {
example = obj.toString();
}
ArraySchema model = new ArraySchema();
model.setDescription(description);
model.setExample(example);
if (object.getAdditionalProperties() != null && !(object.getAdditionalProperties() instanceof Boolean)) {
model.setItems((Schema) object.getAdditionalProperties());
}
return model;
}
use of io.swagger.v3.oas.annotations.media.Schema in project swagger-parser by swagger-api.
the class InlineModelResolver method flattenDefinitions.
private void flattenDefinitions(Map<String, Schema> models) {
if (models == null) {
return;
}
List<String> modelNames = new ArrayList<String>(models.keySet());
for (String modelName : modelNames) {
Schema model = models.get(modelName);
if (model.getProperties() != null) {
Map<String, Schema> properties = model.getProperties();
flattenProperties(properties, modelName);
fixStringModel(model);
} else if (model instanceof ArraySchema) {
ArraySchema m = (ArraySchema) model;
Schema inner = m.getItems();
if (isObjectSchema(inner)) {
if (inner.getProperties() != null && inner.getProperties().size() > 0) {
String innerModelName = resolveModelName(inner.getTitle(), modelName + "_inner");
String existing = matchGenerated(inner);
if (existing == null) {
openAPI.getComponents().addSchemas(innerModelName, inner);
addGenerated(innerModelName, inner);
m.setItems(new Schema().$ref(innerModelName));
} else {
m.setItems(new Schema().$ref(existing));
}
} else if (inner instanceof ComposedSchema && this.flattenComposedSchemas) {
flattenComposedSchema(inner, modelName);
if (inner.get$ref() == null) {
modelName = resolveModelName(inner.getTitle(), "inline_array_items_" + modelName);
m.setItems(this.makeRefProperty(modelName, inner));
addGenerated(modelName, inner);
openAPI.getComponents().addSchemas(modelName, inner);
}
}
}
} else if (model instanceof ComposedSchema) {
ComposedSchema composedSchema = (ComposedSchema) model;
String inlineModelName = "";
List<Schema> list = null;
if (composedSchema.getAllOf() != null) {
list = composedSchema.getAllOf();
inlineModelName = "AllOf";
} else if (composedSchema.getAnyOf() != null) {
list = composedSchema.getAnyOf();
inlineModelName = "AnyOf";
} else if (composedSchema.getOneOf() != null) {
list = composedSchema.getOneOf();
inlineModelName = "OneOf";
}
for (int i = 0; i < list.size(); i++) {
if (list.get(i).get$ref() == null) {
Schema inline = list.get(i);
if (inline.getProperties() != null) {
flattenProperties(inline.getProperties(), modelName);
}
if (this.flattenComposedSchemas) {
int position = i + 1;
inlineModelName = resolveModelName(inline.getTitle(), modelName + inlineModelName + "_" + position);
list.set(i, new Schema().$ref(inlineModelName));
addGenerated(inlineModelName, inline);
openAPI.getComponents().addSchemas(inlineModelName, inline);
}
}
}
}
}
}
use of io.swagger.v3.oas.annotations.media.Schema in project swagger-parser by swagger-api.
the class InlineModelResolver method flattenParams.
private void flattenParams(String pathname, List<Parameter> parameters) {
if (parameters == null) {
return;
}
for (Parameter parameter : parameters) {
if (parameter.getSchema() != null) {
Schema model = parameter.getSchema();
if (model.getProperties() != null) {
if (model.getType() == null || "object".equals(model.getType())) {
if (model.getProperties() != null && model.getProperties().size() > 0) {
flattenProperties(model.getProperties(), pathname);
String modelName = resolveModelName(model.getTitle(), parameter.getName());
parameter.setSchema(new Schema().$ref(modelName));
addGenerated(modelName, model);
openAPI.getComponents().addSchemas(modelName, model);
}
}
} else if (model instanceof ComposedSchema) {
String modelName = resolveModelName(model.getTitle(), parameter.getName());
parameter.setSchema(new Schema().$ref(modelName));
addGenerated(modelName, model);
openAPI.getComponents().addSchemas(modelName, model);
} else if (model instanceof ArraySchema) {
ArraySchema am = (ArraySchema) model;
Schema inner = am.getItems();
if (isObjectSchema(inner)) {
if (inner.getProperties() != null && inner.getProperties().size() > 0) {
flattenProperties(inner.getProperties(), pathname);
String modelName = resolveModelName(inner.getTitle(), parameter.getName());
String existing = matchGenerated(inner);
if (existing != null) {
am.setItems(new Schema().$ref(existing));
} else {
am.setItems(new Schema().$ref(modelName));
addGenerated(modelName, am);
openAPI.getComponents().addSchemas(modelName, am);
}
} else if (inner instanceof ComposedSchema && this.flattenComposedSchemas) {
flattenComposedSchema(inner, parameter.getName());
if (inner.get$ref() == null) {
String modelName = resolveModelName(inner.getTitle(), "inline_parameter_items_" + parameter.getName());
am.setItems(this.makeRefProperty(modelName, inner));
addGenerated(modelName, inner);
openAPI.getComponents().addSchemas(modelName, inner);
}
}
}
}
}
}
}
use of io.swagger.v3.oas.annotations.media.Schema in project swagger-parser by swagger-api.
the class InlineModelResolver method flattenComposedSchema.
private void flattenComposedSchema(Schema inner, String key) {
ComposedSchema composedSchema = (ComposedSchema) inner;
String inlineModelName = "";
List<Schema> list = null;
if (composedSchema.getAllOf() != null) {
list = composedSchema.getAllOf();
inlineModelName = "AllOf";
} else if (composedSchema.getAnyOf() != null) {
list = composedSchema.getAnyOf();
inlineModelName = "AnyOf";
} else if (composedSchema.getOneOf() != null) {
list = composedSchema.getOneOf();
inlineModelName = "OneOf";
}
for (int i = 0; i < list.size(); i++) {
if (list.get(i).get$ref() == null) {
Schema inline = list.get(i);
if (inline.getProperties() != null) {
flattenProperties(inline.getProperties(), key);
}
if (this.flattenComposedSchemas) {
int position = i + 1;
inlineModelName = resolveModelName(inline.getTitle(), key + inlineModelName + "_" + position);
list.set(i, new Schema().$ref(inlineModelName));
addGenerated(inlineModelName, inline);
openAPI.getComponents().addSchemas(inlineModelName, inline);
}
}
}
}
Aggregations