use of io.apicurio.datamodels.openapi.v3.models.Oas30Schema.Oas30PropertySchema in project apicurio-data-models by Apicurio.
the class Oas20to30TransformationVisitor method visitPropertySchema.
/**
* @see io.apicurio.datamodels.openapi.visitors.IOasVisitor#visitPropertySchema(io.apicurio.datamodels.core.models.common.IPropertySchema)
*/
@Override
public void visitPropertySchema(IPropertySchema node) {
Oas20PropertySchema ps20 = (Oas20PropertySchema) node;
Oas30Schema parent30 = (Oas30Schema) this.lookup(ps20.parent());
Oas30PropertySchema property30 = (Oas30PropertySchema) parent30.createPropertySchema(ps20.getPropertyName());
parent30.addProperty(ps20.getPropertyName(), property30);
this.toSchema(ps20, property30, true);
this.mapNode(ps20, property30);
}
use of io.apicurio.datamodels.openapi.v3.models.Oas30Schema.Oas30PropertySchema in project apicurio-data-models by Apicurio.
the class IoTestRunner method cloneNode.
static Node cloneNode(Node node) {
Constructor<? extends Node> constructor;
Node clonedNode = null;
try {
if (node instanceof INamed) {
constructor = node.getClass().getConstructor(String.class);
clonedNode = constructor.newInstance(((INamed) node).getName());
} else if (node instanceof OasPathItem) {
constructor = node.getClass().getConstructor(String.class);
clonedNode = constructor.newInstance(((OasPathItem) node).getPath());
} else if (node instanceof Operation) {
constructor = node.getClass().getConstructor(String.class);
clonedNode = constructor.newInstance(((Operation) node).getType());
} else if (node instanceof Oas20PropertySchema) {
constructor = node.getClass().getConstructor(String.class);
clonedNode = constructor.newInstance(((Oas20PropertySchema) node).getPropertyName());
} else if (node instanceof Oas30PropertySchema) {
constructor = node.getClass().getConstructor(String.class);
clonedNode = constructor.newInstance(((Oas30PropertySchema) node).getPropertyName());
} else if (node instanceof ServerVariable) {
constructor = node.getClass().getConstructor(String.class);
clonedNode = constructor.newInstance(((ServerVariable) node).getName());
} else {
constructor = node.getClass().getConstructor();
clonedNode = constructor.newInstance();
}
} catch (SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
System.err.println("Skipping partial I/O for: " + node.getClass().getSimpleName());
}
if (clonedNode != null) {
clonedNode._parent = node._parent;
clonedNode._ownerDocument = node.ownerDocument();
if (clonedNode instanceof Document) {
clonedNode._ownerDocument = (Document) clonedNode;
}
}
return clonedNode;
}
use of io.apicurio.datamodels.openapi.v3.models.Oas30Schema.Oas30PropertySchema 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