protected final ShapeModel generateShapeModel()

in codegen/src/main/java/software/amazon/awssdk/codegen/AddShapes.java [72:147]


    protected final ShapeModel generateShapeModel(String javaClassName, String shapeName) {
        ShapeModel shapeModel = new ShapeModel(shapeName);
        shapeModel.setShapeName(javaClassName);
        Shape shape = getServiceModel().getShapes().get(shapeName);

        shapeModel.setDocumentation(shape.getDocumentation());
        shapeModel.setVariable(new VariableModel(getNamingStrategy().getVariableName(javaClassName),
                                                 javaClassName));
        // contains the list of c2j member names that are required for this shape.
        shapeModel.setRequired(shape.getRequired());
        shapeModel.setDeprecated(shape.isDeprecated());
        shapeModel.setDeprecatedMessage(shape.getDeprecatedMessage());
        shapeModel.setWrapper(shape.isWrapper());
        shapeModel.withIsEventStream(shape.isEventstream());
        shapeModel.withIsEvent(shape.isEvent());
        shapeModel.withXmlNamespace(shape.getXmlNamespace());
        shapeModel.withIsUnion(shape.isUnion());
        shapeModel.withIsFault(shape.isFault());
        shapeModel.withIsRetryable(shape.isRetryable());
        shapeModel.withIsThrottling(shape.isThrottling());

        boolean hasHeaderMember = false;
        boolean hasStatusCodeMember = false;
        boolean hasPayloadMember = false;
        boolean hasStreamingMember = false;
        boolean hasRequiresLength = false;

        Map<String, Member> members = shape.getMembers();

        if (members != null) {
            for (Map.Entry<String, Member> memberEntry : members.entrySet()) {

                String c2jMemberName = memberEntry.getKey();
                Member c2jMemberDefinition = memberEntry.getValue();
                Shape parentShape = shape;

                MemberModel memberModel = generateMemberModel(c2jMemberName, c2jMemberDefinition,
                                                              getProtocol(), parentShape,
                                                              getServiceModel().getShapes());

                if (memberModel.getHttp().getLocation() == Location.HEADER) {
                    hasHeaderMember = true;

                } else if (memberModel.getHttp().getLocation() == Location.STATUS_CODE) {
                    hasStatusCodeMember = true;

                } else if (memberModel.getHttp().getIsPayload()) {
                    hasPayloadMember = true;
                    if (memberModel.getHttp().getIsStreaming()) {
                        hasStreamingMember = true;
                    }
                    if (memberModel.getHttp().isRequiresLength()) {
                        hasRequiresLength = true;
                    }
                }

                shapeModel.addMember(memberModel);
            }

            shapeModel.withHasHeaderMember(hasHeaderMember)
                      .withHasStatusCodeMember(hasStatusCodeMember)
                      .withHasPayloadMember(hasPayloadMember)
                      .withHasStreamingMember(hasStreamingMember)
                      .withHasRequiresLengthMember(hasRequiresLength);
        }

        List<String> enumValues = shape.getEnumValues();
        if (enumValues != null && !enumValues.isEmpty()) {
            for (String enumValue : enumValues) {
                shapeModel.addEnum(
                        new EnumModel(getNamingStrategy().getEnumValueName(enumValue), enumValue));
            }
        }

        return shapeModel;
    }