Search in sources :

Example 1 with Oas30PropertySchema

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);
}
Also used : Oas30PropertySchema(io.apicurio.datamodels.openapi.v3.models.Oas30Schema.Oas30PropertySchema) Oas30Schema(io.apicurio.datamodels.openapi.v3.models.Oas30Schema) Oas20PropertySchema(io.apicurio.datamodels.openapi.v2.models.Oas20Schema.Oas20PropertySchema)

Example 2 with Oas30PropertySchema

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;
}
Also used : Node(io.apicurio.datamodels.core.models.Node) Operation(io.apicurio.datamodels.core.models.common.Operation) Document(io.apicurio.datamodels.core.models.Document) ServerVariable(io.apicurio.datamodels.core.models.common.ServerVariable) Oas20PropertySchema(io.apicurio.datamodels.openapi.v2.models.Oas20Schema.Oas20PropertySchema) InvocationTargetException(java.lang.reflect.InvocationTargetException) OasPathItem(io.apicurio.datamodels.openapi.models.OasPathItem) Oas30PropertySchema(io.apicurio.datamodels.openapi.v3.models.Oas30Schema.Oas30PropertySchema) INamed(io.apicurio.datamodels.core.models.common.INamed)

Example 3 with Oas30PropertySchema

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);
    }
}
Also used : Tag(io.apicurio.datamodels.core.models.common.Tag) OasResponses(io.apicurio.datamodels.openapi.models.OasResponses) IReferenceNode(io.apicurio.datamodels.core.models.IReferenceNode) Oas30ExternalDocumentation(io.apicurio.datamodels.openapi.v3.models.Oas30ExternalDocumentation) Oas30ParameterDefinition(io.apicurio.datamodels.openapi.v3.models.Oas30ParameterDefinition) Oas20PropertySchema(io.apicurio.datamodels.openapi.v2.models.Oas20Schema.Oas20PropertySchema) Oas30ServerVariable(io.apicurio.datamodels.openapi.v3.models.Oas30ServerVariable) Info(io.apicurio.datamodels.core.models.common.Info) Oas20ResponseDefinitions(io.apicurio.datamodels.openapi.v2.models.Oas20ResponseDefinitions) Oas20Operation(io.apicurio.datamodels.openapi.v2.models.Oas20Operation) Oas30Document(io.apicurio.datamodels.openapi.v3.models.Oas30Document) Oas30Schema(io.apicurio.datamodels.openapi.v3.models.Oas30Schema) Oas30Server(io.apicurio.datamodels.openapi.v3.models.Oas30Server) Oas20SecurityDefinitions(io.apicurio.datamodels.openapi.v2.models.Oas20SecurityDefinitions) Oas30AllOfSchema(io.apicurio.datamodels.openapi.v3.models.Oas30Schema.Oas30AllOfSchema) Map(java.util.Map) Oas20ParameterDefinition(io.apicurio.datamodels.openapi.v2.models.Oas20ParameterDefinition) Parameter(io.apicurio.datamodels.core.models.common.Parameter) Oas20SecurityScheme(io.apicurio.datamodels.openapi.v2.models.Oas20SecurityScheme) Oas20Parameter(io.apicurio.datamodels.openapi.v2.models.Oas20Parameter) Schema(io.apicurio.datamodels.core.models.common.Schema) Oas30Paths(io.apicurio.datamodels.openapi.v3.models.Oas30Paths) NodePath(io.apicurio.datamodels.core.models.NodePath) Oas20Definitions(io.apicurio.datamodels.openapi.v2.models.Oas20Definitions) Library(io.apicurio.datamodels.Library) Oas30License(io.apicurio.datamodels.openapi.v3.models.Oas30License) ExternalDocumentation(io.apicurio.datamodels.core.models.common.ExternalDocumentation) IExample(io.apicurio.datamodels.core.models.common.IExample) IOasParameterParent(io.apicurio.datamodels.openapi.models.IOasParameterParent) Oas30RequestBody(io.apicurio.datamodels.openapi.v3.models.Oas30RequestBody) Oas30PropertySchema(io.apicurio.datamodels.openapi.v3.models.Oas30Schema.Oas30PropertySchema) OasPaths(io.apicurio.datamodels.openapi.models.OasPaths) Oas20Schema(io.apicurio.datamodels.openapi.v2.models.Oas20Schema) Oas30Header(io.apicurio.datamodels.openapi.v3.models.Oas30Header) ValidationProblem(io.apicurio.datamodels.core.models.ValidationProblem) SecurityRequirement(io.apicurio.datamodels.core.models.common.SecurityRequirement) List(java.util.List) OperationFinder(io.apicurio.datamodels.core.visitors.OperationFinder) Extension(io.apicurio.datamodels.core.models.Extension) Oas30Operation(io.apicurio.datamodels.openapi.v3.models.Oas30Operation) ConsumesProducesFinder(io.apicurio.datamodels.core.visitors.ConsumesProducesFinder) Oas30Responses(io.apicurio.datamodels.openapi.v3.models.Oas30Responses) Operation(io.apicurio.datamodels.core.models.common.Operation) Oas30Components(io.apicurio.datamodels.openapi.v3.models.Oas30Components) Oas30XML(io.apicurio.datamodels.openapi.v3.models.Oas30XML) ExtensibleNode(io.apicurio.datamodels.core.models.ExtensibleNode) OasXML(io.apicurio.datamodels.openapi.models.OasXML) Oas30SchemaDefinition(io.apicurio.datamodels.openapi.v3.models.Oas30SchemaDefinition) Oas20SecurityRequirement(io.apicurio.datamodels.openapi.v2.models.Oas20SecurityRequirement) Oas20SchemaDefinition(io.apicurio.datamodels.openapi.v2.models.Oas20SchemaDefinition) ReferenceUtil(io.apicurio.datamodels.core.util.ReferenceUtil) OasHeader(io.apicurio.datamodels.openapi.models.OasHeader) HashMap(java.util.HashMap) Oas30Contact(io.apicurio.datamodels.openapi.v3.models.Oas30Contact) DocumentType(io.apicurio.datamodels.core.models.DocumentType) OasPathItem(io.apicurio.datamodels.openapi.models.OasPathItem) Oas30Parameter(io.apicurio.datamodels.openapi.v3.models.Oas30Parameter) IExternalDocumentationParent(io.apicurio.datamodels.core.models.common.IExternalDocumentationParent) IPropertySchema(io.apicurio.datamodels.core.models.common.IPropertySchema) Oas30Response(io.apicurio.datamodels.openapi.v3.models.Oas30Response) ArrayList(java.util.ArrayList) Oas20Scopes(io.apicurio.datamodels.openapi.v2.models.Oas20Scopes) Oas20ParameterDefinitions(io.apicurio.datamodels.openapi.v2.models.Oas20ParameterDefinitions) TraverserDirection(io.apicurio.datamodels.core.visitors.TraverserDirection) Oas30MediaType(io.apicurio.datamodels.openapi.v3.models.Oas30MediaType) Oas30SecurityRequirement(io.apicurio.datamodels.openapi.v3.models.Oas30SecurityRequirement) Oas30AdditionalPropertiesSchema(io.apicurio.datamodels.openapi.v3.models.Oas30Schema.Oas30AdditionalPropertiesSchema) IOas20Visitor(io.apicurio.datamodels.openapi.v2.visitors.IOas20Visitor) Oas20Headers(io.apicurio.datamodels.openapi.v2.models.Oas20Headers) Document(io.apicurio.datamodels.core.models.Document) License(io.apicurio.datamodels.core.models.common.License) Oas30ResponseDefinition(io.apicurio.datamodels.openapi.v3.models.Oas30ResponseDefinition) Oas20Response(io.apicurio.datamodels.openapi.v2.models.Oas20Response) ISecurityRequirementParent(io.apicurio.datamodels.core.models.common.ISecurityRequirementParent) Oas20Items(io.apicurio.datamodels.openapi.v2.models.Oas20Items) Contact(io.apicurio.datamodels.core.models.common.Contact) Oas30RequestBodyDefinition(io.apicurio.datamodels.openapi.v3.models.Oas30RequestBodyDefinition) JsonCompat(io.apicurio.datamodels.compat.JsonCompat) Node(io.apicurio.datamodels.core.models.Node) SecurityScheme(io.apicurio.datamodels.core.models.common.SecurityScheme) OasSchema(io.apicurio.datamodels.openapi.models.OasSchema) IDefinition(io.apicurio.datamodels.core.models.common.IDefinition) Oas30ItemsSchema(io.apicurio.datamodels.openapi.v3.models.Oas30Schema.Oas30ItemsSchema) Oas30Info(io.apicurio.datamodels.openapi.v3.models.Oas30Info) OasResponse(io.apicurio.datamodels.openapi.models.OasResponse) Oas30SecurityScheme(io.apicurio.datamodels.openapi.v3.models.Oas30SecurityScheme) NodeCompat(io.apicurio.datamodels.compat.NodeCompat) Oas20Document(io.apicurio.datamodels.openapi.v2.models.Oas20Document) Oas30PathItem(io.apicurio.datamodels.openapi.v3.models.Oas30PathItem) Constants(io.apicurio.datamodels.core.Constants) Oas30Parameter(io.apicurio.datamodels.openapi.v3.models.Oas30Parameter) Oas20ParameterDefinition(io.apicurio.datamodels.openapi.v2.models.Oas20ParameterDefinition) Oas30Operation(io.apicurio.datamodels.openapi.v3.models.Oas30Operation) Oas30Schema(io.apicurio.datamodels.openapi.v3.models.Oas30Schema) Oas20Parameter(io.apicurio.datamodels.openapi.v2.models.Oas20Parameter) Oas20Schema(io.apicurio.datamodels.openapi.v2.models.Oas20Schema) IOasParameterParent(io.apicurio.datamodels.openapi.models.IOasParameterParent) Oas30RequestBody(io.apicurio.datamodels.openapi.v3.models.Oas30RequestBody) Oas30PropertySchema(io.apicurio.datamodels.openapi.v3.models.Oas30Schema.Oas30PropertySchema) List(java.util.List) ArrayList(java.util.ArrayList) Oas30MediaType(io.apicurio.datamodels.openapi.v3.models.Oas30MediaType)

Aggregations

Document (io.apicurio.datamodels.core.models.Document)2 Node (io.apicurio.datamodels.core.models.Node)2 Operation (io.apicurio.datamodels.core.models.common.Operation)2 OasPathItem (io.apicurio.datamodels.openapi.models.OasPathItem)2 Oas20PropertySchema (io.apicurio.datamodels.openapi.v2.models.Oas20Schema.Oas20PropertySchema)2 Oas30PropertySchema (io.apicurio.datamodels.openapi.v3.models.Oas30Schema.Oas30PropertySchema)2 Library (io.apicurio.datamodels.Library)1 JsonCompat (io.apicurio.datamodels.compat.JsonCompat)1 NodeCompat (io.apicurio.datamodels.compat.NodeCompat)1 Constants (io.apicurio.datamodels.core.Constants)1 DocumentType (io.apicurio.datamodels.core.models.DocumentType)1 ExtensibleNode (io.apicurio.datamodels.core.models.ExtensibleNode)1 Extension (io.apicurio.datamodels.core.models.Extension)1 IReferenceNode (io.apicurio.datamodels.core.models.IReferenceNode)1 NodePath (io.apicurio.datamodels.core.models.NodePath)1 ValidationProblem (io.apicurio.datamodels.core.models.ValidationProblem)1 Contact (io.apicurio.datamodels.core.models.common.Contact)1 ExternalDocumentation (io.apicurio.datamodels.core.models.common.ExternalDocumentation)1 IDefinition (io.apicurio.datamodels.core.models.common.IDefinition)1 IExample (io.apicurio.datamodels.core.models.common.IExample)1