Search in sources :

Example 1 with OasPaths

use of io.apicurio.datamodels.openapi.models.OasPaths in project apicurio-data-models by Apicurio.

the class DeletePathCommand method execute.

/**
 * @see io.apicurio.datamodels.cmd.ICommand#execute(io.apicurio.datamodels.core.models.Document)
 */
@Override
public void execute(Document document) {
    LoggerCompat.info("[DeletePathCommand] Executing for path: %s", this._path);
    OasDocument odoc = (OasDocument) document;
    this._oldPath = null;
    OasPaths paths = odoc.paths;
    if (this.isNullOrUndefined(paths)) {
        return;
    }
    this._oldPath = Library.writeNode(paths.removePathItem(this._path));
}
Also used : OasDocument(io.apicurio.datamodels.openapi.models.OasDocument) OasPaths(io.apicurio.datamodels.openapi.models.OasPaths)

Example 2 with OasPaths

use of io.apicurio.datamodels.openapi.models.OasPaths in project apicurio-data-models by Apicurio.

the class Oas30Document method createPaths.

/**
 * @see io.apicurio.datamodels.openapi.models.OasDocument#createPaths()
 */
@Override
public OasPaths createPaths() {
    OasPaths rval = new Oas30Paths();
    rval._ownerDocument = this.ownerDocument();
    rval._parent = this;
    return rval;
}
Also used : OasPaths(io.apicurio.datamodels.openapi.models.OasPaths)

Example 3 with OasPaths

use of io.apicurio.datamodels.openapi.models.OasPaths in project syndesis by syndesisio.

the class OpenApiConnectorGenerator method info.

@Override
public final APISummary info(final ConnectorTemplate connectorTemplate, final ConnectorSettings connectorSettings) {
    final OpenApiModelInfo modelInfo = parseSpecification(connectorSettings, APIValidationContext.CONSUMED_API);
    final OasDocument model = modelInfo.getModel();
    if (model == null) {
        final APISummary.Builder summaryBuilder = new APISummary.Builder().errors(modelInfo.getErrors()).warnings(modelInfo.getWarnings());
        if (modelInfo.getResolvedSpecification() != null) {
            summaryBuilder.putConfiguredProperty(SPECIFICATION, modelInfo.getResolvedSpecification());
        }
        return summaryBuilder.build();
    }
    // No matter if the validation fails, try to process the swagger
    final Connector connector = basicConnector(connectorTemplate, connectorSettings);
    final OasPaths paths = model.paths;
    final AtomicInteger total = new AtomicInteger(0);
    final Map<String, Integer> tagCounts;
    if (paths == null) {
        tagCounts = Collections.emptyMap();
    } else {
        tagCounts = OasModelHelper.getPathItems(paths).stream().flatMap(p -> OasModelHelper.getOperationMap(p).values().stream()).peek(o -> total.incrementAndGet()).flatMap(o -> OasModelHelper.sanitizeTags(o.tags).distinct()).collect(Collectors.groupingBy(Function.identity(), Collectors.reducing(0, (e) -> 1, Integer::sum)));
    }
    final ActionsSummary actionsSummary = new ActionsSummary.Builder().totalActions(total.intValue()).actionCountByTags(tagCounts).build();
    return APISummary.Builder.createFrom(connector).actionsSummary(actionsSummary).errors(modelInfo.getErrors()).warnings(modelInfo.getWarnings()).putAllConfiguredProperties(connectorSettings.getConfiguredProperties()).putConfiguredProperty(SPECIFICATION, modelInfo.getResolvedSpecification()).build();
}
Also used : OasDocument(io.apicurio.datamodels.openapi.models.OasDocument) ConnectorDescriptor(io.syndesis.common.model.action.ConnectorDescriptor) ConnectorAction(io.syndesis.common.model.action.ConnectorAction) Action(io.syndesis.common.model.action.Action) SpecificationOptimizer(io.syndesis.server.api.generator.openapi.util.SpecificationOptimizer) OperationDescription(io.syndesis.server.api.generator.openapi.util.OperationDescription) HashMap(java.util.HashMap) ConfigurationProperty(io.syndesis.common.model.connection.ConfigurationProperty) OasPathItem(io.apicurio.datamodels.openapi.models.OasPathItem) Function(java.util.function.Function) Supplier(java.util.function.Supplier) Info(io.apicurio.datamodels.core.models.common.Info) OpenApiModelParser(io.syndesis.server.api.generator.openapi.util.OpenApiModelParser) Oas20Operation(io.apicurio.datamodels.openapi.v2.models.Oas20Operation) ArrayList(java.util.ArrayList) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Oas20ParameterGenerator(io.syndesis.server.api.generator.openapi.v2.Oas20ParameterGenerator) Map(java.util.Map) OasModelHelper(io.syndesis.server.api.generator.openapi.util.OasModelHelper) ConnectorTemplate(io.syndesis.common.model.connection.ConnectorTemplate) URI(java.net.URI) APIValidationContext(io.syndesis.server.api.generator.APIValidationContext) Oas20DescriptorGenerator(io.syndesis.server.api.generator.openapi.v2.Oas20DescriptorGenerator) APISummary(io.syndesis.common.model.api.APISummary) Oas30PropertyGenerators(io.syndesis.server.api.generator.openapi.v3.Oas30PropertyGenerators) Optional.ofNullable(java.util.Optional.ofNullable) Oas30ParameterGenerator(io.syndesis.server.api.generator.openapi.v3.Oas30ParameterGenerator) OasOperation(io.apicurio.datamodels.openapi.models.OasOperation) Connector(io.syndesis.common.model.connection.Connector) ConnectorSettings(io.syndesis.common.model.connection.ConnectorSettings) ConnectorGenerator(io.syndesis.server.api.generator.ConnectorGenerator) UUID(java.util.UUID) OasPaths(io.apicurio.datamodels.openapi.models.OasPaths) ActionComparator(io.syndesis.server.api.generator.util.ActionComparator) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) Oas30DescriptorGenerator(io.syndesis.server.api.generator.openapi.v3.Oas30DescriptorGenerator) List(java.util.List) Extension(io.apicurio.datamodels.core.models.Extension) Oas30Operation(io.apicurio.datamodels.openapi.v3.models.Oas30Operation) Optional(java.util.Optional) OasDocument(io.apicurio.datamodels.openapi.models.OasDocument) Collections(java.util.Collections) ActionsSummary(io.syndesis.common.model.action.ActionsSummary) Oas20PropertyGenerators(io.syndesis.server.api.generator.openapi.v2.Oas20PropertyGenerators) Connector(io.syndesis.common.model.connection.Connector) OasPaths(io.apicurio.datamodels.openapi.models.OasPaths) ActionsSummary(io.syndesis.common.model.action.ActionsSummary) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) APISummary(io.syndesis.common.model.api.APISummary) AtomicInteger(java.util.concurrent.atomic.AtomicInteger)

Example 4 with OasPaths

use of io.apicurio.datamodels.openapi.models.OasPaths in project syndesis by syndesisio.

the class OpenApiFlowGenerator method generateFlows.

/**
 * Generate integration flows from given Open API document.
 * @param openApiDoc the open api document.
 * @param integration the integration builder
 * @param info the open api model info.
 * @param template the provided api template.
 */
public void generateFlows(T openApiDoc, Integration.Builder integration, OpenApiModelInfo info, ProvidedApiTemplate template) {
    final Set<String> alreadyUsedOperationIds = new HashSet<>();
    final OasPaths paths = Optional.ofNullable(openApiDoc.paths).orElse(openApiDoc.createPaths());
    for (final OasPathItem pathEntry : OasModelHelper.getPathItems(paths)) {
        for (final Map.Entry<String, O> operationEntry : getOperationsMap(pathEntry).entrySet()) {
            final O operation = operationEntry.getValue();
            final String operationDescription = operationEntry.getKey().toUpperCase(Locale.US) + " " + pathEntry.getPath();
            final String operationId = requireUniqueOperationId(operation.operationId, alreadyUsedOperationIds);
            alreadyUsedOperationIds.add(operationId);
            // Update open api spec
            operation.operationId = operationId;
            final DataShape startDataShape = dataShapeGenerator.createShapeFromRequest(info.getResolvedJsonGraph(), openApiDoc, operation);
            final Action startAction = template.getStartAction().orElseThrow(() -> new IllegalStateException("cannot find start action"));
            final Step startStep = createStartStep(operationId, getBasePath(openApiDoc), startAction, startDataShape, template.getConnection());
            final DataShape endDataShape = dataShapeGenerator.createShapeFromResponse(info.getResolvedJsonGraph(), openApiDoc, operation);
            final Action endAction = template.getEndAction().orElseThrow(() -> new IllegalStateException("cannot find end action"));
            final Step endStep = createEndStep(operation, endAction, endDataShape, template.getConnection());
            final String flowId = KeyGenerator.createKey();
            final Flow flow = new Flow.Builder().id(flowId).type(Flow.FlowType.API_PROVIDER).putMetadata(OpenApi.OPERATION_ID, operationId).putMetadata(FlowMetadata.EXCERPT, "501 Not Implemented").putMetadata(DEFAULT_RETURN_CODE_METADATA_KEY, getDefaultCode(operation)).addStep(startStep).addStep(endStep).name(getOperationName(openApiDoc, operation)).description(operationDescription).build();
            integration.addFlow(flow);
        }
    }
}
Also used : ConnectorAction(io.syndesis.common.model.action.ConnectorAction) Action(io.syndesis.common.model.action.Action) OasPaths(io.apicurio.datamodels.openapi.models.OasPaths) Step(io.syndesis.common.model.integration.Step) DataShape(io.syndesis.common.model.DataShape) Flow(io.syndesis.common.model.integration.Flow) OasPathItem(io.apicurio.datamodels.openapi.models.OasPathItem) Map(java.util.Map) HashSet(java.util.HashSet)

Example 5 with OasPaths

use of io.apicurio.datamodels.openapi.models.OasPaths in project syndesis by syndesisio.

the class OpenApiGenerator method info.

@Override
public APISummary info(final String specification, final APIValidationContext validation) {
    final OpenApiModelInfo modelInfo = OpenApiModelParser.parse(specification, validation);
    final OasDocument model = modelInfo.getModel();
    if (model == null) {
        return new APISummary.Builder().errors(modelInfo.getErrors()).warnings(modelInfo.getWarnings()).build();
    }
    final OasPaths paths = model.paths;
    final ActionsSummary actionsSummary = determineSummaryFrom(OasModelHelper.getPathItems(paths));
    final Info info = model.info;
    final String title = Optional.ofNullable(info).map(i -> i.title).orElse("unspecified");
    final String description = Optional.ofNullable(info).map(i -> i.description).orElse("unspecified");
    return // 
    new APISummary.Builder().name(// 
    title).description(// 
    description).actionsSummary(// 
    actionsSummary).errors(// 
    modelInfo.getErrors()).warnings(// 
    modelInfo.getWarnings()).putConfiguredProperty("specification", modelInfo.getResolvedSpecification()).build();
}
Also used : OasDocument(io.apicurio.datamodels.openapi.models.OasDocument) OpenApi(io.syndesis.common.model.openapi.OpenApi) Action(io.syndesis.common.model.action.Action) KeyGenerator(io.syndesis.common.util.KeyGenerator) Step(io.syndesis.common.model.integration.Step) URL(java.net.URL) ResourceIdentifier(io.syndesis.common.model.ResourceIdentifier) Kind(io.syndesis.common.model.Kind) LoggerFactory(org.slf4j.LoggerFactory) Oas20FlowGenerator(io.syndesis.server.api.generator.openapi.v2.Oas20FlowGenerator) HashMap(java.util.HashMap) ConfigurationProperty(io.syndesis.common.model.connection.ConfigurationProperty) OasPathItem(io.apicurio.datamodels.openapi.models.OasPathItem) Function(java.util.function.Function) Info(io.apicurio.datamodels.core.models.common.Info) OpenApiModelParser(io.syndesis.server.api.generator.openapi.util.OpenApiModelParser) APIIntegration(io.syndesis.server.api.generator.APIIntegration) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Locale(java.util.Locale) Map(java.util.Map) FlowMetadata(io.syndesis.common.model.integration.FlowMetadata) OasModelHelper(io.syndesis.server.api.generator.openapi.util.OasModelHelper) Integration(io.syndesis.common.model.integration.Integration) APIValidationContext(io.syndesis.server.api.generator.APIValidationContext) APISummary(io.syndesis.common.model.api.APISummary) Logger(org.slf4j.Logger) MalformedURLException(java.net.MalformedURLException) Library(io.apicurio.datamodels.Library) Oas30FlowGenerator(io.syndesis.server.api.generator.openapi.v3.Oas30FlowGenerator) OasPaths(io.apicurio.datamodels.openapi.models.OasPaths) Collectors(java.util.stream.Collectors) Flow(io.syndesis.common.model.integration.Flow) StandardCharsets(java.nio.charset.StandardCharsets) List(java.util.List) ProvidedApiTemplate(io.syndesis.server.api.generator.ProvidedApiTemplate) Optional(java.util.Optional) APIGenerator(io.syndesis.server.api.generator.APIGenerator) OasDocument(io.apicurio.datamodels.openapi.models.OasDocument) ActionsSummary(io.syndesis.common.model.action.ActionsSummary) APISummary(io.syndesis.common.model.api.APISummary) OasPaths(io.apicurio.datamodels.openapi.models.OasPaths) ActionsSummary(io.syndesis.common.model.action.ActionsSummary) Info(io.apicurio.datamodels.core.models.common.Info)

Aggregations

OasPaths (io.apicurio.datamodels.openapi.models.OasPaths)8 OasDocument (io.apicurio.datamodels.openapi.models.OasDocument)5 OasPathItem (io.apicurio.datamodels.openapi.models.OasPathItem)5 Map (java.util.Map)4 Action (io.syndesis.common.model.action.Action)3 ConnectorAction (io.syndesis.common.model.action.ConnectorAction)3 HashMap (java.util.HashMap)3 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)3 Info (io.apicurio.datamodels.core.models.common.Info)2 OasOperation (io.apicurio.datamodels.openapi.models.OasOperation)2 ActionsSummary (io.syndesis.common.model.action.ActionsSummary)2 ConnectorDescriptor (io.syndesis.common.model.action.ConnectorDescriptor)2 APISummary (io.syndesis.common.model.api.APISummary)2 ConfigurationProperty (io.syndesis.common.model.connection.ConfigurationProperty)2 Connector (io.syndesis.common.model.connection.Connector)2 Flow (io.syndesis.common.model.integration.Flow)2 Step (io.syndesis.common.model.integration.Step)2 APIValidationContext (io.syndesis.server.api.generator.APIValidationContext)2 OasModelHelper (io.syndesis.server.api.generator.openapi.util.OasModelHelper)2 OpenApiModelParser (io.syndesis.server.api.generator.openapi.util.OpenApiModelParser)2