in codegen/src/main/java/software/amazon/awssdk/codegen/AddShapes.java [149:244]
private MemberModel generateMemberModel(String c2jMemberName, Member c2jMemberDefinition,
String protocol, Shape parentShape,
Map<String, Shape> allC2jShapes) {
String c2jShapeName = c2jMemberDefinition.getShape();
Shape shape = allC2jShapes.get(c2jShapeName);
String variableName = getNamingStrategy().getVariableName(c2jMemberName);
String variableType = getTypeUtils().getJavaDataType(allC2jShapes, c2jShapeName);
String variableDeclarationType = getTypeUtils().getJavaDataType(allC2jShapes, c2jShapeName);
//If member is idempotent, then it should be of string type
//Else throw IllegalArgumentException.
if (c2jMemberDefinition.isIdempotencyToken() &&
!variableType.equals(String.class.getSimpleName())) {
throw new IllegalArgumentException(c2jMemberName +
" is idempotent. It's shape should be string type but it is of " +
variableType + " type.");
}
MemberModel memberModel = new MemberModel();
memberModel.withC2jName(c2jMemberName)
.withC2jShape(c2jShapeName)
.withName(capitalize(c2jMemberName))
.withVariable(new VariableModel(variableName, variableType, variableDeclarationType)
.withDocumentation(c2jMemberDefinition.getDocumentation()))
.withSetterModel(new VariableModel(variableName, variableType, variableDeclarationType))
.withGetterModel(new ReturnTypeModel(variableType))
.withTimestampFormat(resolveTimestampFormat(c2jMemberDefinition, shape))
.withJsonValue(c2jMemberDefinition.getJsonvalue());
memberModel.setDocumentation(c2jMemberDefinition.getDocumentation());
memberModel.setDeprecated(c2jMemberDefinition.isDeprecated());
memberModel.setDeprecatedMessage(c2jMemberDefinition.getDeprecatedMessage());
memberModel.setSensitive(isSensitiveShapeOrContainer(c2jMemberDefinition, allC2jShapes));
memberModel
.withFluentGetterMethodName(namingStrategy.getFluentGetterMethodName(c2jMemberName, parentShape, shape))
.withFluentEnumGetterMethodName(namingStrategy.getFluentEnumGetterMethodName(c2jMemberName, parentShape, shape))
.withFluentSetterMethodName(namingStrategy.getFluentSetterMethodName(c2jMemberName, parentShape, shape))
.withFluentEnumSetterMethodName(namingStrategy.getFluentEnumSetterMethodName(c2jMemberName, parentShape, shape))
.withExistenceCheckMethodName(namingStrategy.getExistenceCheckMethodName(c2jMemberName, parentShape))
.withBeanStyleGetterMethodName(namingStrategy.getBeanStyleGetterMethodName(c2jMemberName, parentShape, shape))
.withBeanStyleSetterMethodName(namingStrategy.getBeanStyleSetterMethodName(c2jMemberName, parentShape, shape));
memberModel.setIdempotencyToken(c2jMemberDefinition.isIdempotencyToken());
memberModel.setEventPayload(c2jMemberDefinition.isEventpayload());
memberModel.setEventHeader(c2jMemberDefinition.isEventheader());
memberModel.setEndpointDiscoveryId(c2jMemberDefinition.isEndpointdiscoveryid());
memberModel.setXmlAttribute(c2jMemberDefinition.isXmlAttribute());
memberModel.setUnionEnumTypeName(namingStrategy.getUnionEnumTypeName(memberModel));
memberModel.setContextParam(c2jMemberDefinition.getContextParam());
memberModel.setRequired(isRequiredMember(c2jMemberName, parentShape));
memberModel.setSynthetic(shape.isSynthetic());
// Pass the xmlNameSpace from the member reference
if (c2jMemberDefinition.getXmlNamespace() != null) {
memberModel.setXmlNameSpaceUri(c2jMemberDefinition.getXmlNamespace().getUri());
}
// Additional member model metadata for list/map/enum types
fillContainerTypeMemberMetadata(allC2jShapes, c2jMemberDefinition.getShape(), memberModel,
protocol);
String deprecatedName = c2jMemberDefinition.getDeprecatedName();
if (StringUtils.isNotBlank(deprecatedName)) {
checkForValidDeprecatedName(c2jMemberName, shape);
memberModel.setDeprecatedName(deprecatedName);
memberModel.setDeprecatedFluentGetterMethodName(
namingStrategy.getFluentGetterMethodName(deprecatedName, parentShape, shape));
memberModel.setDeprecatedFluentSetterMethodName(
namingStrategy.getFluentSetterMethodName(deprecatedName, parentShape, shape));
memberModel.setDeprecatedBeanStyleSetterMethodName(
namingStrategy.getBeanStyleSetterMethodName(deprecatedName, parentShape, shape));
}
ParameterHttpMapping httpMapping = generateParameterHttpMapping(parentShape,
c2jMemberName,
c2jMemberDefinition,
protocol,
allC2jShapes);
String payload = parentShape.getPayload();
boolean shapeIsStreaming = shape.isStreaming();
boolean memberIsStreaming = c2jMemberDefinition.isStreaming();
boolean payloadIsStreaming = shapeIsStreaming || memberIsStreaming;
boolean requiresLength = shape.isRequiresLength() || c2jMemberDefinition.isRequiresLength();
httpMapping.withPayload(payload != null && payload.equals(c2jMemberName))
.withStreaming(payloadIsStreaming)
.withRequiresLength(requiresLength);
memberModel.setHttp(httpMapping);
return memberModel;
}