Java tutorial
package org.apache.torque.templates.transformer.om; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License 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. */ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.Set; import java.util.TimeZone; import org.apache.commons.lang.StringUtils; import org.apache.torque.generator.control.ControllerState; import org.apache.torque.generator.processor.string.Camelbacker; import org.apache.torque.generator.processor.string.WrapReservedJavaWords; import org.apache.torque.generator.source.SourceElement; import org.apache.torque.generator.source.transform.SourceTransformerException; import org.apache.torque.templates.TemplateOptionName; import org.apache.torque.templates.TorqueSchemaAttributeName; import org.apache.torque.templates.TorqueSchemaElementName; import org.apache.torque.templates.TorqueSchemaInheritance; import org.apache.torque.templates.TorqueSchemaJavaType; import org.apache.torque.templates.transformer.SchemaTypeHelper; import org.apache.torque.templates.typemapping.JavaType; import org.apache.torque.templates.typemapping.ResultSetGetter; import org.apache.torque.templates.typemapping.SchemaType; import org.apache.torque.templates.typemapping.SqlType; import org.apache.torque.templates.typemapping.TypeMap; /** * Sets the class names and packages for the OM model. * The id method attribute must already be set on the parent table element * when this transformer is called. */ public class OMColumnTransformer { /** The camelbacker to create the java name from the column name. */ private static Camelbacker javaNameCamelbacker = new Camelbacker(); /** The transformer for inheritance elements. */ private static OMInheritanceTransformer inheritanceTransformer = new OMInheritanceTransformer(); /** Names which cannot be used as constants for column names. */ private static final Set<String> RESERVED_CONSTANT_NAMES; /** The Date format for Dates in Default values. */ private static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss.S"; /** Constant for the CURRENT_DATE default value for Dates. */ static final String CURRENT_DATE = "CURRENT_DATE"; /** Constant for the CURRENT_TIME default value for Dates. */ static final String CURRENT_TIME = "CURRENT_TIME"; /** Constant for the CURRENT_TIMESTAMP default value for Dates. */ static final String CURRENT_TIMESTAMP = "CURRENT_TIMESTAMP"; /** Constant for the getDefaultDate method name. */ static final String GET_DEFAULT_DATE_METHOD_NAME = "getCurrentDate"; /** Constant for the getDefaultTime method name. */ static final String GET_DEFAULT_TIME_METHOD_NAME = "getCurrentTime"; /** Constant for the getDefaultTimestamp method name. */ static final String GET_DEFAULT_TIMESTAMP_METHOD_NAME = "getCurrentTimestamp"; /** Prevents reserved java words. */ private static WrapReservedJavaWords reservedJavaWordsWrapper = new WrapReservedJavaWords(); static { Set<String> reservedConstantNames = new HashSet<String>(); reservedConstantNames.add("DATABASE"); reservedConstantNames.add("TABLE_NAME"); reservedConstantNames.add("TABLE"); RESERVED_CONSTANT_NAMES = Collections.unmodifiableSet(reservedConstantNames); } public void transform(SourceElement columnElement, ControllerState controllerState, int columnPosition) throws SourceTransformerException { checkElementName(columnElement); checkColumnNameExists(columnElement); setJavaTypeAttribute(columnElement); columnElement.setAttribute(ColumnAttributeName.POSITION, columnPosition); setAttributeDefaultValues(columnElement); SchemaType schemaType = SchemaTypeHelper.getSchemaType(columnElement, controllerState); columnElement.setAttribute("schemaType", schemaType); setDomainAttributes(columnElement, controllerState); JavaType fieldJavaType = getFieldJavaType(columnElement, schemaType); columnElement.setAttribute(JavaFieldAttributeName.FIELD_TYPE, fieldJavaType.getFullClassName()); JavaType fieldJavaObjectType = TypeMap.getJavaObjectType(schemaType); columnElement.setAttribute(ColumnAttributeName.FIELD_OBJECT_TYPE, fieldJavaObjectType.getFullClassName()); setPrimitiveTypeAttribute(columnElement, fieldJavaType); setNumberTypeAttribute(columnElement, fieldJavaType); setJavaNameAttribute(columnElement); setFieldNameAttribute(columnElement); setPeerColumnNameAttribute(columnElement); setQualifiedColumnNameAttribute(columnElement); setGetterNameAttribute(columnElement, fieldJavaType, controllerState); setSetterNameAttribute(columnElement); setAccessModifierAttributes(columnElement); setDefaultValueAttribute(columnElement, fieldJavaType, controllerState); setUseDatabaseDefaultValueAttribute(columnElement); setResultSetGetterAttribute(columnElement, schemaType); setSampleObjectAttribute(columnElement, schemaType); for (SourceElement inheritanceElement : columnElement .getChildren(TorqueSchemaElementName.INHERITANCE.getName())) { inheritanceTransformer.transform(inheritanceElement, controllerState); } } /** * Sets the javaType attribute of the column element * if it is not already set and a default value is set. * * @param columnElement the column element, not null. */ protected void setJavaTypeAttribute(SourceElement columnElement) { if (columnElement.getAttribute(TorqueSchemaAttributeName.JAVA_TYPE) != null) { return; } SourceElement databaseElement = columnElement.getParent().getParent(); String defaultJavaType = (String) databaseElement.getAttribute(TorqueSchemaAttributeName.DEFAULT_JAVA_TYPE); if (defaultJavaType != null) { columnElement.setAttribute(TorqueSchemaAttributeName.JAVA_TYPE, defaultJavaType); } } /** * Sets default values for attributes of the column element * if the attribute is not set. * The following attributes are checked: * autoIncrement, protected, inheritance, required, primaryKey * * @param columnElement the column element, not null. */ protected void setAttributeDefaultValues(SourceElement columnElement) { // set autoincrement attribute if (columnElement.getAttribute(TorqueSchemaAttributeName.AUTO_INCREMENT) == null) { String idMethod = (String) columnElement.getParent().getAttribute(TorqueSchemaAttributeName.ID_METHOD); // idMethod can not be null because it is already set by the // table transformer if (!"none".equals(idMethod)) { columnElement.setAttribute(TorqueSchemaAttributeName.AUTO_INCREMENT, Boolean.TRUE.toString()); } else { columnElement.setAttribute(TorqueSchemaAttributeName.AUTO_INCREMENT, Boolean.FALSE.toString()); } } // set protected attribute if (columnElement.getAttribute(TorqueSchemaAttributeName.PROTECTED) == null) { columnElement.setAttribute(TorqueSchemaAttributeName.PROTECTED, Boolean.FALSE.toString()); } // set inheritance attribute if (columnElement.getAttribute(TorqueSchemaAttributeName.INHERITANCE) == null) { columnElement.setAttribute(TorqueSchemaAttributeName.INHERITANCE, Boolean.FALSE.toString()); } // set required attribute Object required = columnElement.getAttribute(TorqueSchemaAttributeName.REQUIRED); if (required == null) { columnElement.setAttribute(TorqueSchemaAttributeName.REQUIRED, Boolean.FALSE.toString()); } // set primaryKey attribute Object primaryKey = columnElement.getAttribute(TorqueSchemaAttributeName.PRIMARY_KEY); if (primaryKey == null) { columnElement.setAttribute(TorqueSchemaAttributeName.PRIMARY_KEY, Boolean.FALSE.toString()); } } protected void setDomainAttributes(SourceElement columnElement, ControllerState controllerState) throws SourceTransformerException { SqlType domain = SchemaTypeHelper.getDomain(columnElement, controllerState); if (domain == null) { return; } if (columnElement.getAttribute(TorqueSchemaAttributeName.TYPE) == null && domain.getSqlTypeName() != null) { columnElement.setAttribute(TorqueSchemaAttributeName.TYPE, domain.getSqlTypeName()); } if (columnElement.getAttribute(TorqueSchemaAttributeName.DEFAULT) == null && domain.getDefaultValue() != null) { columnElement.setAttribute(TorqueSchemaAttributeName.DEFAULT, domain.getDefaultValue()); } if (columnElement.getAttribute(TorqueSchemaAttributeName.SIZE) == null && domain.getSize() != null) { columnElement.setAttribute(TorqueSchemaAttributeName.SIZE, domain.getSize()); } if (columnElement.getAttribute(TorqueSchemaAttributeName.SCALE) == null && domain.getScale() != null) { columnElement.setAttribute(TorqueSchemaAttributeName.SCALE, domain.getScale()); } } /** * Sets the attributes getterAccessModifer and setterAccessModifer * on the column element. * * @param columnElement the column element, not null. */ protected void setAccessModifierAttributes(SourceElement columnElement) { boolean isProtected = "true".equals(columnElement.getAttribute(TorqueSchemaAttributeName.PROTECTED)); String accessModifier; if (isProtected) { accessModifier = "protected"; } else { accessModifier = "public"; } columnElement.setAttribute(JavaFieldAttributeName.GETTER_ACCESS_MODIFIER, accessModifier); columnElement.setAttribute(JavaFieldAttributeName.SETTER_ACCESS_MODIFIER, accessModifier); } /** * Returns the java type of the field representing a database column. * * @param columnElement the column element, not null. * @param schemaType the schema type, not null. * * @return the java type of the column */ protected JavaType getFieldJavaType(SourceElement columnElement, SchemaType schemaType) throws SourceTransformerException { JavaType result; String javaType = (String) columnElement.getAttribute(TorqueSchemaAttributeName.JAVA_TYPE); if (TorqueSchemaJavaType.OBJECT.getValue().equals(javaType)) { result = TypeMap.getJavaObjectType(schemaType); } else if (TorqueSchemaJavaType.PRIMITIVE.getValue().equals(javaType) || javaType == null) { result = TypeMap.getJavaPrimitiveType(schemaType); } else { String columnName = (String) columnElement.getAttribute(TorqueSchemaAttributeName.NAME); throw new SourceTransformerException("Unknown javaType " + javaType + " in column " + columnName); } return result; } /** * Checks that the name of the column element is correct. * * @param columnElement the column element, not null. * * @throws IllegalArgumentException if the element name is wrong. */ protected void checkElementName(SourceElement columnElement) { if (!TorqueSchemaElementName.COLUMN.getName().equals(columnElement.getName())) { throw new IllegalArgumentException("Illegal element Name " + columnElement.getName()); } } /** * Checks that the name attribute exists on the column element. * * @param columnElement the column element, not null. * * @throws SourceTransformerException if the name attribute does not exist. */ protected void checkColumnNameExists(SourceElement columnElement) throws SourceTransformerException { String columnName = (String) columnElement.getAttribute(TorqueSchemaAttributeName.NAME); if (columnName == null) { throw new SourceTransformerException("The attribute " + TorqueSchemaAttributeName.NAME.getName() + " on element " + columnElement.getName() + " is null"); } } /** * Sets the javaName attribute of the column element if it is not * already set. * * @param columnElement the column element, not null. */ protected void setJavaNameAttribute(SourceElement columnElement) { if (columnElement.getAttribute(TorqueSchemaAttributeName.JAVA_NAME) != null) { return; } String columnName = (String) columnElement.getAttribute(TorqueSchemaAttributeName.NAME); String javaName = javaNameCamelbacker.process(columnName); columnElement.setAttribute(TorqueSchemaAttributeName.JAVA_NAME, javaName); } /** * Sets the fieldName attribute of the column element if it is not * already set. * The javaName attribute of the column must be set. * * @param columnElement the column element, not null. */ protected void setFieldNameAttribute(SourceElement columnElement) { if (columnElement.getAttribute(JavaFieldAttributeName.FIELD_NAME) != null) { return; } String javaName = (String) columnElement.getAttribute(TorqueSchemaAttributeName.JAVA_NAME); String fieldName = StringUtils.uncapitalize(javaName); fieldName = reservedJavaWordsWrapper.process(fieldName); columnElement.setAttribute(JavaFieldAttributeName.FIELD_NAME, fieldName); } /** * Sets the peerColumnName attribute of the column element if it is not * already set. * * @param columnElement the column element, not null. */ protected void setPeerColumnNameAttribute(SourceElement columnElement) { if (columnElement.getAttribute(ColumnAttributeName.PEER_COLUMN_NAME) != null) { return; } String columnName = (String) columnElement.getAttribute(TorqueSchemaAttributeName.NAME); String peerColumnName = columnName.toUpperCase(); if (RESERVED_CONSTANT_NAMES.contains(peerColumnName)) { peerColumnName = "_" + peerColumnName; } columnElement.setAttribute(ColumnAttributeName.PEER_COLUMN_NAME, peerColumnName); } /** * Sets the qualifiedColumnName attribute of the column element * if it is not already set. * * @param columnElement the column element, not null. */ protected void setQualifiedColumnNameAttribute(SourceElement columnElement) { if (columnElement.getAttribute(ColumnAttributeName.QUALIFIED_COLUMN_NAME) != null) { return; } String tableName = (String) columnElement.getParent().getAttribute(TorqueSchemaAttributeName.NAME); String columnName = (String) columnElement.getAttribute(TorqueSchemaAttributeName.NAME); String qualifiedColumnName = tableName + "." + columnName; columnElement.setAttribute(ColumnAttributeName.QUALIFIED_COLUMN_NAME, qualifiedColumnName); } /** * Sets the getterName attribute of the column element * if it is not already set. * The fieldName attribute of the column element must already be set. * * @param columnElement the column element, not null. * @param javaType the java type of the column, not null. * @param controllerState the controller state, not null. */ protected void setGetterNameAttribute(SourceElement columnElement, JavaType javaType, ControllerState controllerState) { if (columnElement.getAttribute(JavaFieldAttributeName.GETTER_NAME) != null) { return; } String fieldName = (String) columnElement.getAttribute(JavaFieldAttributeName.FIELD_NAME); String getterName = FieldHelper.getGetterName(fieldName, javaType.getFullClassName(), controllerState); columnElement.setAttribute(JavaFieldAttributeName.GETTER_NAME, getterName); } /** * Sets the setterName attribute of the column element * if it is not already set. * The fieldName attribute of the column element must already be set. * * @param columnElement the column element, not null. */ protected void setSetterNameAttribute(SourceElement columnElement) { if (columnElement.getAttribute(JavaFieldAttributeName.SETTER_NAME) != null) { return; } String fieldName = (String) columnElement.getAttribute(JavaFieldAttributeName.FIELD_NAME); String setterName = FieldHelper.getSetterName(fieldName); columnElement.setAttribute(JavaFieldAttributeName.SETTER_NAME, setterName); } /** * Sets the primitiveType attribute of the column element * if it is not already set. * * @param columnElement the column element, not null. * @param javaType the type of the java field corresponding to the * column, not null. */ protected void setPrimitiveTypeAttribute(SourceElement columnElement, JavaType javaType) { if (columnElement.getAttribute(ColumnAttributeName.PRIMITIVE_TYPE) != null) { return; } boolean primitiveFieldType = javaType.isPrimitive(); columnElement.setAttribute(ColumnAttributeName.PRIMITIVE_TYPE, Boolean.toString(primitiveFieldType)); } /** * Sets the numberType attribute of the column element * if it is not already set. * * @param columnElement the column element, not null. * @param javaType the type of the java field corresponding to the * column, not null. */ protected void setNumberTypeAttribute(SourceElement columnElement, JavaType javaType) { if (columnElement.getAttribute(ColumnAttributeName.NUMBER_TYPE) != null) { return; } boolean numberFieldType = javaType.isNumber(); columnElement.setAttribute(ColumnAttributeName.NUMBER_TYPE, Boolean.toString(numberFieldType)); } /** * Sets the defaultValue attribute of the column element * if it is not already set. * * @param columnElement the column element, not null. * @param javaType the type of the java field corresponding to the * column, not null. * @param controllerState the ControllerState, not null. * * @throws SourceTransformerException if an unknown primitive type * is encountered */ protected void setDefaultValueAttribute(SourceElement columnElement, JavaType javaType, ControllerState controllerState) throws SourceTransformerException { // special case inheritance by class name // In this case, the class name of the object must be written into the // column as default, overriding any SQL default values. if (TorqueSchemaInheritance.SINGLE.getValue() .equals(columnElement.getAttribute(TorqueSchemaAttributeName.INHERITANCE)) && columnElement.getChildren(TorqueSchemaElementName.INHERITANCE).isEmpty()) { columnElement.setAttribute(JavaFieldAttributeName.DEFAULT_VALUE, "getClass().getName()"); return; } if (columnElement.getAttribute(JavaFieldAttributeName.DEFAULT_VALUE) != null) { return; } String defaultAttributeValue = (String) columnElement.getAttribute(TorqueSchemaAttributeName.DEFAULT); String fieldDefaultValue; if (defaultAttributeValue != null) { boolean useDatabaseDefaultValue = "true" .equals(columnElement.getAttribute(TorqueSchemaAttributeName.USE_DATABASE_DEFAULT_VALUE)); fieldDefaultValue = getDefaultValueWithDefaultSet(javaType, defaultAttributeValue, useDatabaseDefaultValue, columnElement); } else if ("true".equals(columnElement.getAttribute(TorqueSchemaAttributeName.VERSION))) { fieldDefaultValue = controllerState .getStringOption(TemplateOptionName.OM_OPTIMISTIC_LOCKING_DEFAULT_VALUE); } else { fieldDefaultValue = getDefaultValueWithoutDefaultSet(javaType); } columnElement.setAttribute(JavaFieldAttributeName.DEFAULT_VALUE, fieldDefaultValue); } /** * Calculates the java default value of a column in case a default value * is set. * * @param javaType The java type of the column. * @param defaultValue The default value from the schema. * @param useDatabaseDefaultValue whether the database default value should * be used. * @param columnElement the current column element for which * the default value should be calculated. * * @return The java default value. * * @throws SourceTransformerException if an illegal default value is used. */ protected String getDefaultValueWithDefaultSet(JavaType javaType, String defaultValue, boolean useDatabaseDefaultValue, SourceElement columnElement) throws SourceTransformerException { boolean primitiveFieldType = javaType.isPrimitive(); String fieldDefaultValue; if (JavaType.BOOLEAN_PRIMITIVE == javaType) { if ("Y".equals(defaultValue) || "1".equals(defaultValue) || "true".equalsIgnoreCase(defaultValue)) { fieldDefaultValue = "true"; } else { fieldDefaultValue = "false"; } } else if (JavaType.BOOLEAN_OBJECT == javaType) { if ("Y".equals(defaultValue) || "1".equals(defaultValue) || "true".equalsIgnoreCase(defaultValue)) { fieldDefaultValue = "Boolean.TRUE"; } else { fieldDefaultValue = "Boolean.FALSE"; } } else if (JavaType.STRING == javaType) { fieldDefaultValue = "\"" + defaultValue + "\""; } else if (JavaType.SHORT_OBJECT == javaType) { // The following is better than casting with (short) // because a range check is performed, fieldDefaultValue = "Short.valueOf(\"" + defaultValue + "\")"; } else if (JavaType.BYTE_OBJECT == javaType) { // The following is better than casting with (byte) // because a range check is performed, fieldDefaultValue = "Byte.valueOf(\"" + defaultValue + "\")"; } else if (JavaType.INTEGER_OBJECT == javaType) { fieldDefaultValue = "Integer.valueOf(" + defaultValue + ")"; } else if (JavaType.LONG_OBJECT == javaType) { fieldDefaultValue = "Long.valueOf(" + defaultValue + "L)"; } else if (JavaType.DATE == javaType) { if (CURRENT_DATE.equalsIgnoreCase(defaultValue) || CURRENT_TIME.equalsIgnoreCase(defaultValue) || CURRENT_TIMESTAMP.equalsIgnoreCase(defaultValue)) { if (useDatabaseDefaultValue) { // if the database default value is used do not use // current time in java as it might be different fieldDefaultValue = "null"; } else { // the database does not provide a default so use // java current time. if (CURRENT_DATE.equalsIgnoreCase(defaultValue)) { String methodName; if (columnElement.getParent() .getAttribute(TableAttributeName.GET_CURRENT_DATE_METHOD_NAME) != null) { methodName = columnElement.getParent() .getAttribute(TableAttributeName.GET_CURRENT_DATE_METHOD_NAME).toString(); } else { methodName = GET_DEFAULT_DATE_METHOD_NAME; } fieldDefaultValue = methodName + "()"; } else if (CURRENT_TIME.equalsIgnoreCase(defaultValue)) { String methodName; if (columnElement.getParent() .getAttribute(TableAttributeName.GET_CURRENT_TIME_METHOD_NAME) != null) { methodName = columnElement.getParent() .getAttribute(TableAttributeName.GET_CURRENT_TIME_METHOD_NAME).toString(); } else { methodName = GET_DEFAULT_TIME_METHOD_NAME; } fieldDefaultValue = methodName + "()"; } else { String methodName; if (columnElement.getParent() .getAttribute(TableAttributeName.GET_CURRENT_TIMESTAMP_METHOD_NAME) != null) { methodName = columnElement.getParent() .getAttribute(TableAttributeName.GET_CURRENT_TIMESTAMP_METHOD_NAME).toString(); } else { methodName = GET_DEFAULT_TIMESTAMP_METHOD_NAME; } fieldDefaultValue = methodName + "()"; } } } else { if (useDatabaseDefaultValue) { // if the database default value is used, do not use // current time in java as it might be different // and have a custom format. fieldDefaultValue = "null"; } else { fieldDefaultValue = "new Date(" + getDefaultValueAsDate(defaultValue).getTime() + "L)"; } } } else if (primitiveFieldType) { fieldDefaultValue = defaultValue; } else { fieldDefaultValue = "new " + javaType.getFullClassName() + "(" + defaultValue + ")"; } return fieldDefaultValue; } /** * Parses the default value String as Date. * * @param defaultValue the String to parse. * @return the parsed date. * * @throws SourceTransformerException if the date cannot be parsed. */ public static Date getDefaultValueAsDate(String defaultValue) throws SourceTransformerException { try { SimpleDateFormat dateFormat = new SimpleDateFormat(DEFAULT_DATE_FORMAT); dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); return dateFormat.parse(defaultValue); } catch (ParseException e) { throw new SourceTransformerException("The default value " + defaultValue + " does not match the format String " + DEFAULT_DATE_FORMAT + " for date values"); } } /** * Calculates the java default value of a column in case a default value * is not set. * * @param javaType The java type of the column. * * @return The java default value. */ protected String getDefaultValueWithoutDefaultSet(JavaType javaType) throws SourceTransformerException { String fieldDefaultValue; boolean primitiveFieldType = javaType.isPrimitive(); if (primitiveFieldType) { if (JavaType.BOOLEAN_PRIMITIVE == javaType) { fieldDefaultValue = "false"; } else if (JavaType.BYTE_PRIMITIVE == javaType) { fieldDefaultValue = "(byte) 0"; } else if (JavaType.SHORT_PRIMITIVE == javaType) { fieldDefaultValue = "(short) 0"; } else if (JavaType.INTEGER_PRIMITIVE == javaType) { fieldDefaultValue = "0"; } else if (JavaType.LONG_PRIMITIVE == javaType) { fieldDefaultValue = "0L"; } else if (JavaType.FLOAT_PRIMITIVE == javaType) { fieldDefaultValue = "0"; } else if (JavaType.DOUBLE_PRIMITIVE == javaType) { fieldDefaultValue = "0"; } else if (JavaType.CHAR_PRIMITIVE == javaType) { fieldDefaultValue = "'\0'"; } else { throw new SourceTransformerException("unknown primitive type" + javaType); } } else { fieldDefaultValue = "null"; } return fieldDefaultValue; } /** * Sets the useDatabaseDefaultValue attribute of the column element to its * default "false" if it is not already set. * * @param columnElement the column element, not null. */ protected void setUseDatabaseDefaultValueAttribute(SourceElement columnElement) { if (columnElement.getAttribute(TorqueSchemaAttributeName.USE_DATABASE_DEFAULT_VALUE) != null) { return; } columnElement.setAttribute(TorqueSchemaAttributeName.USE_DATABASE_DEFAULT_VALUE, Boolean.toString(false)); } /** * Sets the resultSetGetter attribute of the column element * if it is not already set. * If the resultSetGetter is a string value, it is converted to * a ResultSetGetter value. * * @param columnElement the column element, not null. * @param schemaType the schema type of the column, not null. */ protected void setResultSetGetterAttribute(SourceElement columnElement, SchemaType schemaType) { ResultSetGetter resultSetGetter = null; Object originalValue = columnElement.getAttribute(ColumnAttributeName.RESULT_SET_GETTER); if (originalValue != null) { if (originalValue instanceof String) { resultSetGetter = ResultSetGetter.getByMethodName((String) originalValue); } } else { resultSetGetter = TypeMap.getResultSetGetter(schemaType); } if (resultSetGetter != null) { columnElement.setAttribute(ColumnAttributeName.RESULT_SET_GETTER, resultSetGetter); } } /** * Sets the sampleObject attribute of the column element * if it is not already set. * * @param columnElement the column element, not null. * @param schemaType the schema type of the column, not null. */ protected void setSampleObjectAttribute(SourceElement columnElement, SchemaType schemaType) { if (columnElement.getAttribute(ColumnAttributeName.SAMPLE_OBJECT) != null) { return; } String sampleObject = TypeMap.getJavaObject(schemaType); columnElement.setAttribute(ColumnAttributeName.SAMPLE_OBJECT, sampleObject); } }