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

com.amazonaws.codegen.model.intermediate.OperationModel Maven / Gradle / Ivy

/*
 * Copyright (c) 2016. Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 * http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */

package com.amazonaws.codegen.model.intermediate;

import com.amazonaws.codegen.internal.DocumentationUtils;
import com.amazonaws.codegen.internal.Utils;
import com.fasterxml.jackson.annotation.JsonIgnore;

import java.util.ArrayList;
import java.util.List;

import static com.amazonaws.codegen.internal.Constants.LINE_SEPARATOR;
import static com.amazonaws.codegen.internal.DocumentationUtils.createLinkToServiceDocumentation;
import static com.amazonaws.codegen.internal.DocumentationUtils.stripHTMLTags;

public class OperationModel extends DocumentationModel {

    private String operationName;

    private boolean deprecated;

    private VariableModel input;

    private String inputStreamPropertyName;

    private ReturnTypeModel returnType;

    private List exceptions;

    private List simpleMethods;

    private boolean hasBlobMemberAsPayload;

    private boolean isAuthenticated = true;

    @JsonIgnore
    private ShapeModel inputShape;

    @JsonIgnore
    private ShapeModel outputShape;

    public String getOperationName() {
        return operationName;
    }

    public void setOperationName(String operationName) {
        this.operationName = operationName;
    }

    public String getMethodName() {
        return Utils.unCapitialize(operationName);
    }

    public boolean isDeprecated() {
        return deprecated;
    }

    public void setDeprecated(boolean deprecated) {
        this.deprecated = deprecated;
    }

    public String getSyncDocumentation(final Metadata md) {
        return getDocumentation(MethodType.SYNC, md);
    }

    public String getAsyncDocumentation(final Metadata md) {
        return getDocumentation(MethodType.ASYNC, md);
    }

    public String getAsyncDocumentationWithHandler(final Metadata md) {
        return getDocumentation(MethodType.ASYNC_WITH_HANDLER, md);
    }

    public boolean isAuthenticated() {
        return isAuthenticated;
    }

    public void setIsAuthenticated(boolean isAuthenticated) {
        this.isAuthenticated = isAuthenticated;
    }

    public ShapeModel getInputShape() {
        return inputShape;
    }

    public void setInputShape(ShapeModel inputShape) {
        this.inputShape = inputShape;
    }

    public ShapeModel getOutputShape() {
        return outputShape;
    }

    public void setOutputShape(ShapeModel outputShape) {
        this.outputShape = outputShape;
    }

    private static enum MethodType {

        SYNC(false),
        ASYNC(true),
        ASYNC_WITH_HANDLER(true);

        private final boolean async;

        private MethodType(boolean async) {
            this.async = async;
        }

        public boolean isAsync() {
            return async;
        }
    }

    private String getDocumentation(final MethodType methodType, final Metadata md) {
        StringBuilder docBuilder = new StringBuilder("/**");

        if (documentation != null) {
            docBuilder.append(documentation);
        } else {
            docBuilder.append("Invokes the ").append(operationName).append(" operation");

            if (methodType.isAsync()) {
                docBuilder.append(" asynchronously");
            }

            docBuilder.append(".");
        }

        if (input != null) {
            docBuilder.append(LINE_SEPARATOR).append("@param ").append(input.getVariableName())
                    .append(" ").append(stripHTMLTags(input.getDocumentation()));
        }

        if (methodType == MethodType.ASYNC_WITH_HANDLER) {
            docBuilder.append(LINE_SEPARATOR)
                    .append("@param asyncHandler Asynchronous callback handler " +
                            "for events in the lifecycle of the request. " +
                            "Users can provide an implementation of the " +
                            "callback methods in this interface to receive " +
                            "notification of successful or unsuccessful " +
                            "completion of the operation.");
        }

        if (returnType != null) {
            docBuilder.append(LINE_SEPARATOR).append("@return ");
            if (methodType.isAsync()) {
                docBuilder.append(DocumentationUtils.DEFAULT_ASYNC_RETURN
                                          .replace("%s", operationName));
            } else {
                docBuilder.append(DocumentationUtils.DEFAULT_SYNC_RETURN
                                          .replace("%s", operationName));
            }
        }

        if (!methodType.isAsync() && exceptions != null && !(exceptions.isEmpty())) {

            for (ExceptionModel exception : exceptions) {
                docBuilder.append(LINE_SEPARATOR).append("@throws ")
                        .append(exception.getExceptionName()).append(" ")
                        .append(stripHTMLTags(exception.getDocumentation()));
            }
        }

        docBuilder.append(getSampleTagForMethodType(methodType, md));
        String crosslink = createLinkToServiceDocumentation(md, operationName);
        if (!crosslink.isEmpty()) {
            docBuilder.append(LINE_SEPARATOR).append(crosslink);
        }

        docBuilder.append("*/");
        return docBuilder.toString();
    }

    private String getSampleTagForMethodType(final MethodType methodType, final Metadata md) {
        StringBuilder sb = new StringBuilder();

        sb.append(LINE_SEPARATOR).append("@sample ");

        if (methodType == MethodType.SYNC) {
            sb.append(md.getSyncInterface());
        } else if (methodType == MethodType.ASYNC) {
            sb.append(md.getAsyncInterface());
        } else if (methodType == MethodType.ASYNC_WITH_HANDLER) {
            sb.append(md.getAsyncInterface() + "Handler");
        }
        sb.append(".").append(operationName);
        return sb.toString();
    }

    public VariableModel getInput() {
        return input;
    }

    public void setInput(VariableModel input) {
        this.input = input;
    }

    public String getInputStreamPropertyName() {
        return inputStreamPropertyName;
    }

    public void setInputStreamPropertyName(String inputStreamPropertyName) {
        this.inputStreamPropertyName = inputStreamPropertyName;
    }

    public ReturnTypeModel getReturnType() {
        return returnType;
    }

    public void setReturnType(ReturnTypeModel returnType) {
        this.returnType = returnType;
    }

    private String getBaseReturnType(boolean async) {
        if (returnType == null) {
            if (async) {
                return "Void";
            } else {
                return "void";
            }
        }
        return returnType.getReturnType();
    }

    public String getSyncReturnType() {
        return getBaseReturnType(false);
    }

    public String getAsyncReturnType() {
        return getBaseReturnType(true);
    }

    public String getAsyncFutureType() {
        return "java.util.concurrent.Future<" + getAsyncReturnType() + ">";
    }

    public String getAsyncCallableType() {
        return "java.util.concurrent.Callable<" + getAsyncReturnType() + ">";
    }

    public String getAsyncHandlerType() {
        return "com.amazonaws.handlers.AsyncHandler<" + input.getVariableType() + ", " +
               getAsyncReturnType() + ">";
    }

    public List getExceptions() {
        return exceptions;
    }

    public void setExceptions(List exceptions) {
        this.exceptions = exceptions;
    }

    public void addException(ExceptionModel exception) {
        if (exceptions == null) {
            exceptions = new ArrayList();
        }
        exceptions.add(exception);
    }

    @JsonIgnore
    public List getSimpleMethodForms() {
        return simpleMethods;
    }

    public void addSimpleMethodForm(List arguments, boolean deprecated) {
        if (this.simpleMethods == null) {
            this.simpleMethods = new ArrayList<>();
        }

        SimpleMethodFormModel form = new SimpleMethodFormModel();
        form.setArguments(arguments);
        form.setDeprecated(deprecated);

        this.simpleMethods.add(form);
    }

    public boolean getHasBlobMemberAsPayload() {
        return this.hasBlobMemberAsPayload;
    }

    public void setHasBlobMemberAsPayload(boolean hasBlobMemberAsPayload) {
        this.hasBlobMemberAsPayload = hasBlobMemberAsPayload;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy