All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.muserver.openapi.OperationObject Maven / Gradle / Ivy

The newest version!
package io.muserver.openapi;

import java.io.IOException;
import java.io.Writer;
import java.util.List;
import java.util.Map;
import java.util.Set;

import static io.muserver.Mutils.notNull;
import static io.muserver.openapi.Jsonizer.append;
import static java.util.stream.Collectors.toSet;

/**
 * @see OperationObjectBuilder
 */
public class OperationObject implements JsonWriter {

    private final List tags;
    private final String summary;
    private final String description;
    private final ExternalDocumentationObject externalDocs;
    private final String operationId;
    private final List parameters;
    private final RequestBodyObject requestBody;
    private final ResponsesObject responses;
    private final Map callbacks;
    private final Boolean deprecated;
    private final List security;
    private final List servers;

    OperationObject(List tags, String summary, String description, ExternalDocumentationObject externalDocs,
                           String operationId, List parameters, RequestBodyObject requestBody, ResponsesObject responses,
                           Map callbacks, Boolean deprecated, List security,
                           List servers) {
        notNull("responses", responses);
        if (parameters != null) {
            Set nameIns = parameters.stream().map(p -> p.name() + "\0" + p.in()).collect(toSet());
            if (nameIns.size() != parameters.size()) {
                throw new IllegalArgumentException("Got duplicate parameter name and locations in " + parameters + " for operation with summary " + summary);
            }
        }
        this.tags = tags;
        this.summary = summary;
        this.description = description;
        this.externalDocs = externalDocs;
        this.operationId = operationId;
        this.parameters = parameters;
        this.requestBody = requestBody;
        this.responses = responses;
        this.callbacks = callbacks;
        this.deprecated = deprecated;
        this.security = security;
        this.servers = servers;
    }

    @Override
    public void writeJson(Writer writer) throws IOException {
        writer.write('{');
        boolean isFirst = true;
        isFirst = append(writer, "tags", tags, isFirst);
        isFirst = append(writer, "summary", summary, isFirst);
        isFirst = append(writer, "description", description, isFirst);
        isFirst = append(writer, "externalDocs", externalDocs, isFirst);
        isFirst = append(writer, "operationId", operationId, isFirst);
        isFirst = append(writer, "parameters", parameters, isFirst);
        isFirst = append(writer, "requestBody", requestBody, isFirst);
        isFirst = append(writer, "responses", responses, isFirst);
        isFirst = append(writer, "callbacks", callbacks, isFirst);
        isFirst = append(writer, "deprecated", deprecated, isFirst);
        isFirst = append(writer, "security", security, isFirst);
        isFirst = append(writer, "servers", servers, isFirst);
        writer.write('}');
    }

    /**
     * @return the value described by {@link OperationObjectBuilder#withDeprecated(Boolean)}, or false if not specified when building
     */
    public boolean isDeprecated() {
        return deprecated != null && deprecated;
    }

    /**
     * @return the value described by {@link OperationObjectBuilder#withTags}
     */
    public List tags() {
        return tags;
    }

    /**
      @return the value described by {@link OperationObjectBuilder#withSummary}
     */
    public String summary() {
        return summary;
    }

    /**
      @return the value described by {@link OperationObjectBuilder#withDescription}
     */
    public String description() {
        return description;
    }

    /**
      @return the value described by {@link OperationObjectBuilder#withExternalDocs}
     */
    public ExternalDocumentationObject externalDocs() {
        return externalDocs;
    }

    /**
      @return the value described by {@link OperationObjectBuilder#withOperationId}
     */
    public String operationId() {
        return operationId;
    }

    /**
      @return the value described by {@link OperationObjectBuilder#withParameters}
     */
    public List parameters() {
        return parameters;
    }

    /**
      @return the value described by {@link OperationObjectBuilder#withRequestBody}
     */
    public RequestBodyObject requestBody() {
        return requestBody;
    }

    /**
      @return the value described by {@link OperationObjectBuilder#withResponses}
     */
    public ResponsesObject responses() {
        return responses;
    }

    /**
      @return the value described by {@link OperationObjectBuilder#withCallbacks}
     */
    public Map callbacks() {
        return callbacks;
    }

    /**
      @return the value described by {@link OperationObjectBuilder#withDeprecated}
     */
    public Boolean deprecated() {
        return deprecated;
    }

    /**
      @return the value described by {@link OperationObjectBuilder#withSecurity}
     */
    public List security() {
        return security;
    }

    /**
      @return the value described by {@link OperationObjectBuilder#withServers}
     */
    public List servers() {
        return servers;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy