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

software.amazon.awssdk.codegen.poet.model.EventStreamSpecHelper Maven / Gradle / Ivy

/*
 * Copyright 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 software.amazon.awssdk.codegen.poet.model;

import static javax.lang.model.element.Modifier.PUBLIC;

import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.TypeSpec;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.lang.model.element.Modifier;
import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel;
import software.amazon.awssdk.codegen.model.intermediate.MemberModel;
import software.amazon.awssdk.codegen.model.intermediate.ShapeModel;
import software.amazon.awssdk.codegen.naming.NamingStrategy;
import software.amazon.awssdk.codegen.poet.PoetExtension;
import software.amazon.awssdk.codegen.poet.eventstream.EventTypeEnumSpec;
import software.amazon.awssdk.utils.StringUtils;
import software.amazon.awssdk.utils.internal.CodegenNamingUtils;

public final class EventStreamSpecHelper {
    private final ShapeModel eventStream;
    private final IntermediateModel intermediateModel;
    private final PoetExtension poetExtensions;

    public EventStreamSpecHelper(ShapeModel eventStream, IntermediateModel intermediateModel) {
        this.eventStream = eventStream;
        this.intermediateModel = intermediateModel;
        this.poetExtensions = new PoetExtension(intermediateModel);
    }

    public String visitMethodName(MemberModel event) {
        if (useLegacyGenerationScheme(event)) {
            return "visit";
        }
        return "visit" + CodegenNamingUtils.pascalCase(event.getName());
    }

    public String eventPackageName() {
        return intermediateModel.getMetadata().getFullModelPackageName() + "."
                + eventStream.getShapeName().toLowerCase(Locale.ENGLISH);
    }

    public boolean useLegacyGenerationScheme(MemberModel event) {
        Map> useLegacyEventGenerationScheme = intermediateModel.getCustomizationConfig()
                .getUseLegacyEventGenerationScheme();

        List targetEvents = useLegacyEventGenerationScheme.get(eventStream.getC2jName());

        if (targetEvents == null) {
            return false;
        }

        return targetEvents.stream().anyMatch(e -> e.equals(event.getC2jName()));
    }

    public ClassName eventClassName(MemberModel eventModel) {
        if (useLegacyGenerationScheme(eventModel)) {
            return poetExtensions.getModelClass(eventModel.getShape().getShapeName());
        }
        String simpleName = "Default" + intermediateModel.getNamingStrategy().getShapeClassName(eventModel.getName());
        return ClassName.get(eventPackageName(), simpleName);
    }

    public ClassName eventTypeEnumClassName() {
        return poetExtensions.getModelClass(eventStream.getShapeName()).nestedClass("EventType");
    }

    public TypeSpec eventTypeEnumSpec() {
        return new EventTypeEnumSpec("", intermediateModel, eventStream)
                .poetSpec()
                .toBuilder()
                .addModifiers(PUBLIC, Modifier.STATIC)
                .build();
    }

    public String eventTypeEnumValue(MemberModel eventModel) {
        NamingStrategy namingStrategy = intermediateModel.getNamingStrategy();
        return namingStrategy.getEnumValueName(eventModel.getName());
    }

    public String eventBuilderMethodName(MemberModel eventModel) {
        return String.format("%sBuilder", StringUtils.uncapitalize(eventModel.getName()));
    }

    public String eventConsumerName(MemberModel eventModel) {
        if (useLegacyGenerationScheme(eventModel)) {
            return "on" + eventModel.getShape().getShapeName();
        }
        return "on" + eventModel.getName();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy