use of io.apicurio.datamodels.openapi.v3.models.Oas30RequestBody in project apicurio-data-models by Apicurio.
the class DeleteRequestBodyCommand method readNode.
/**
* @see io.apicurio.datamodels.cmd.commands.DeleteNodeCommand#readNode(io.apicurio.datamodels.core.models.Document,
* java.lang.Object)
*/
@Override
protected Oas30RequestBody readNode(Document doc, Object node) {
Oas30Operation operation = (Oas30Operation) this._parentPath.resolve(doc);
Oas30RequestBody requestBody = operation.createRequestBody();
Library.readNode(node, requestBody);
return requestBody;
}
use of io.apicurio.datamodels.openapi.v3.models.Oas30RequestBody in project apicurio-data-models by Apicurio.
the class Oas30DataModelReader method readRequestBody.
/**
* Reads an OAS 3.0 Request Body object from the given JS data.
* @param json
* @param node
*/
public void readRequestBody(Object json, Oas30RequestBody node) {
String $ref = JsonCompat.consumePropertyString(json, Constants.PROP_$REF);
String description = JsonCompat.consumePropertyString(json, Constants.PROP_DESCRIPTION);
Object content = JsonCompat.consumeProperty(json, Constants.PROP_CONTENT);
Boolean required = JsonCompat.consumePropertyBoolean(json, Constants.PROP_REQUIRED);
node.$ref = $ref;
node.description = description;
node.required = required;
if (content != null) {
JsonCompat.keys(content).forEach(name -> {
Object mediaType = JsonCompat.consumeProperty(content, name);
Oas30MediaType mediaTypeModel = node.createMediaType(name);
this.readMediaType(mediaType, mediaTypeModel);
node.addMediaType(name, mediaTypeModel);
});
}
this.readExtensions(json, node);
this.readExtraProperties(json, node);
}
use of io.apicurio.datamodels.openapi.v3.models.Oas30RequestBody in project apicurio-data-models by Apicurio.
the class Oas30IReferenceManipulationStrategy method attachAsComponent.
@Override
public ReferenceAndNode attachAsComponent(Document document, String name, Node component) {
// TODO visitor?
if (// TODO get documenttype
!(document instanceof Oas30Document))
throw new IllegalArgumentException("Oas30Document expected.");
Oas30Document model = (Oas30Document) document;
if (component instanceof Oas30Schema) {
if (model.components.getSchemaDefinition(name) != null)
throw new IllegalArgumentException("Definition with that name already exists: " + name);
Oas30SchemaDefinition definition = wrap(component, new Oas30SchemaDefinition(name), model);
// TODO this should be done by vvv
definition.attachToParent(model.components);
model.components.addSchemaDefinition(definition.getName(), definition);
return new ReferenceAndNode(PREFIX + "schemas/" + name, definition);
}
if (component instanceof Oas30Response) {
if (model.components.getResponseDefinition(name) != null)
throw new IllegalArgumentException("Definition with that name already exists: " + name);
Oas30ResponseDefinition definition = wrap(component, new Oas30ResponseDefinition(name), model);
definition.attachToParent(model.components);
model.components.addResponseDefinition(definition.getName(), definition);
return new ReferenceAndNode(PREFIX + "responses/" + name, definition);
}
if (component instanceof Oas30Parameter) {
if (model.components.getParameterDefinition(name) != null)
throw new IllegalArgumentException("Definition with that name already exists: " + name);
Oas30ParameterDefinition definition = wrap(component, new Oas30ParameterDefinition(name), model);
definition.attachToParent(model.components);
model.components.addParameterDefinition(definition.getName(), definition);
return new ReferenceAndNode(PREFIX + "parameters/" + name, definition);
}
if (component instanceof Oas30Example) {
if (model.components.getExampleDefinition(name) != null)
throw new IllegalArgumentException("Definition with that name already exists: " + name);
Oas30ExampleDefinition definition = wrap(component, new Oas30ExampleDefinition(name), model);
definition.attachToParent(model.components);
model.components.addExampleDefinition(definition.getName(), definition);
return new ReferenceAndNode(PREFIX + "examples/" + name, definition);
}
if (component instanceof Oas30RequestBody) {
if (model.components.getRequestBodyDefinition(name) != null)
throw new IllegalArgumentException("Definition with that name already exists: " + name);
Oas30RequestBodyDefinition definition = wrap(component, new Oas30RequestBodyDefinition(name), model);
definition.attachToParent(model.components);
model.components.addRequestBodyDefinition(definition.getName(), definition);
return new ReferenceAndNode(PREFIX + "requestBodies/" + name, definition);
}
if (component instanceof Oas30Header) {
if (model.components.getHeaderDefinition(name) != null)
throw new IllegalArgumentException("Definition with that name already exists: " + name);
Oas30HeaderDefinition definition = wrap(component, new Oas30HeaderDefinition(name), model);
definition.attachToParent(model.components);
model.components.addHeaderDefinition(definition.getName(), definition);
return new ReferenceAndNode(PREFIX + "headers/" + name, definition);
}
if (component instanceof ModernSecurityScheme) {
if (model.components.getSecurityScheme(name) != null)
throw new IllegalArgumentException("Definition with that name already exists: " + name);
Oas30SecurityScheme definition = wrap(component, new Oas30SecurityScheme(name), model);
definition.attachToParent(model.components);
model.components.addSecurityScheme(definition.getName(), definition);
return new ReferenceAndNode(PREFIX + "securitySchemes/" + name, definition);
}
if (component instanceof Oas30Link) {
if (model.components.getLinkDefinition(name) != null)
throw new IllegalArgumentException("Definition with that name already exists: " + name);
Oas30LinkDefinition definition = wrap(component, new Oas30LinkDefinition(name), model);
definition.attachToParent(model.components);
model.components.addLinkDefinition(definition.getName(), definition);
return new ReferenceAndNode(PREFIX + "links/" + name, definition);
}
if (component instanceof Oas30Callback) {
if (model.components.getCallbackDefinition(name) != null)
throw new IllegalArgumentException("Definition with that name already exists: " + name);
Oas30CallbackDefinition definition = wrap(component, new Oas30CallbackDefinition(name), model);
definition.attachToParent(model.components);
model.components.addCallbackDefinition(definition.getName(), definition);
return new ReferenceAndNode(PREFIX + "callbacks/" + name, definition);
}
return null;
}
use of io.apicurio.datamodels.openapi.v3.models.Oas30RequestBody in project syndesis by syndesisio.
the class Oas30DataShapeGeneratorHelper method findBodySchema.
/**
* Find schema that is specified to define the body if any.
* @param openApiDoc the OpenAPI document.
* @param operation maybe holding a body schema.
* @return the body schema.
*/
static Optional<DataShapeGenerator.NameAndSchema> findBodySchema(Oas30Document openApiDoc, Oas30Operation operation, String mediaType) {
if (operation.requestBody == null) {
return empty();
}
Oas30RequestBody bodyToUse = resolveRequestBody(openApiDoc, operation.requestBody);
Optional<Oas30MediaType> body = Oas30ModelHelper.getMediaType(bodyToUse, mediaType);
if (body.isPresent()) {
String name = ofNullable(body.get().getName()).orElse(bodyToUse.description);
return Optional.of(new DataShapeGenerator.NameAndSchema(name, body.get().schema));
}
return empty();
}
use of io.apicurio.datamodels.openapi.v3.models.Oas30RequestBody in project apicurio-data-models by Apicurio.
the class Oas20to30TransformationVisitor method visitParameter.
/**
* @see io.apicurio.datamodels.core.visitors.IVisitor#visitParameter(io.apicurio.datamodels.core.models.common.Parameter)
*/
@Override
public void visitParameter(Parameter node) {
Oas20Parameter param20 = (Oas20Parameter) node;
if (NodeCompat.equals(param20.in, "body")) {
Oas30Operation operation30 = (Oas30Operation) this.lookup(this.findParentOperation(param20));
if (!NodeCompat.isNullOrUndefined(operation30)) {
Oas30RequestBody body30 = (Oas30RequestBody) operation30.createRequestBody();
operation30.requestBody = body30;
body30.description = param20.description;
body30.required = param20.required;
if (!NodeCompat.isNullOrUndefined(param20.schema)) {
List<String> consumes = this.findConsumes(param20);
Oas20Schema schema = (Oas20Schema) param20.schema;
consumes.forEach(ct -> {
Oas30MediaType mediaType30 = body30.createMediaType(ct);
body30.addMediaType(ct, mediaType30);
Oas30Schema schema30 = mediaType30.createSchema();
mediaType30.schema = this.toSchema(schema, schema30, true);
this.mapNode(schema, schema30);
});
}
}
} else if (NodeCompat.equals(param20.in, "formData")) {
Oas30Operation operation30 = (Oas30Operation) this.lookup(this.findParentOperation(param20));
if (!NodeCompat.isNullOrUndefined(operation30)) {
List<String> consumes = this.findConsumes(param20);
if (!this.hasFormDataMimeType(consumes)) {
consumes = NodeCompat.asList("application/x-www-form-urlencoded");
}
consumes.forEach(ct -> {
if (this.isFormDataMimeType(ct)) {
Oas30RequestBody body30 = operation30.requestBody;
if (NodeCompat.isNullOrUndefined(body30)) {
body30 = operation30.createRequestBody();
operation30.requestBody = body30;
body30.required = true;
}
Oas30MediaType mediaType30 = body30.getMediaType(ct);
if (NodeCompat.isNullOrUndefined(mediaType30)) {
mediaType30 = body30.createMediaType(ct);
body30.addMediaType(ct, mediaType30);
}
Oas30Schema schema30 = mediaType30.schema;
if (NodeCompat.isNullOrUndefined(schema30)) {
schema30 = mediaType30.createSchema();
mediaType30.schema = schema30;
schema30.type = "object";
}
Oas30PropertySchema property30 = (Oas30PropertySchema) schema30.createPropertySchema(param20.name);
schema30.addProperty(param20.name, property30);
property30.description = param20.description;
this.toSchema(param20, property30, false);
this.mapNode(param20, schema30);
}
});
}
} else {
if (this.isRef(param20)) {
Oas20ParameterDefinition paramDef = (Oas20ParameterDefinition) ReferenceUtil.resolveRef(param20.$ref, param20);
// Request Bodies. So a reference to a "body" param should become a reference to a request body.
if (!NodeCompat.isNullOrUndefined(paramDef) && NodeCompat.equals(paramDef.in, "body")) {
Oas30Operation parent30 = (Oas30Operation) this.lookup(this.findParentOperation(param20));
if (!NodeCompat.isNullOrUndefined(parent30)) {
Oas30RequestBody body30 = parent30.createRequestBody();
parent30.requestBody = body30;
body30.$ref = "#/components/requestBodies/" + paramDef.getName();
this.mapNode(param20, body30);
return;
}
}
// treat the param as though it is inlined (which will result in a requestBody model).
if (!NodeCompat.isNullOrUndefined(paramDef) && NodeCompat.equals(paramDef.in, "formData")) {
// Inline the parameter definition and then re-visit it.
Library.readNode(Library.writeNode(paramDef), param20);
param20.$ref = null;
this.visitParameter(param20);
return;
}
}
// Now we have normal handling of a parameter, examples include path params, query params, header params, etc.
IOasParameterParent parent30 = (IOasParameterParent) this.lookup(param20.parent());
Oas30Parameter param30 = (Oas30Parameter) parent30.createParameter();
parent30.addParameter(param30);
this.transformParam(param20, param30);
this.mapNode(param20, param30);
}
}
Aggregations