Index: org/apache/ibatis/ibator/api/IntrospectedColumn.java =================================================================== --- org/apache/ibatis/ibator/api/IntrospectedColumn.java (revision 751183) +++ org/apache/ibatis/ibator/api/IntrospectedColumn.java (working copy) @@ -18,6 +18,7 @@ import java.sql.Types; import org.apache.ibatis.ibator.api.dom.java.FullyQualifiedJavaType; +import org.apache.ibatis.ibator.config.ColumnConfiguration; import org.apache.ibatis.ibator.config.IbatorContext; import org.apache.ibatis.ibator.internal.types.JdbcTypeNameTranslator; import org.apache.ibatis.ibator.internal.util.StringUtility; @@ -56,6 +57,8 @@ protected boolean isColumnNameDelimited; protected IntrospectedTable introspectedTable; + + protected ColumnConfiguration columnConfiguration; /** * Constructs a Column definition. This object holds all the @@ -391,4 +394,22 @@ public void setIntrospectedTable(IntrospectedTable introspectedTable) { this.introspectedTable = introspectedTable; } + + public ColumnConfiguration getColumnConfiguration() { + return columnConfiguration; + } + + public void setColumnConfiguration(ColumnConfiguration columnConfiguration) { + this.columnConfiguration = columnConfiguration; + } + + public String getColumnConfigurationProperty(String propertyName) { + String value = null; + + if (columnConfiguration != null) { + value = columnConfiguration.getProperty(propertyName); + } + + return value; + } } Index: org/apache/ibatis/ibator/config/ColumnConfiguration.java =================================================================== --- org/apache/ibatis/ibator/config/ColumnConfiguration.java (revision 0) +++ org/apache/ibatis/ibator/config/ColumnConfiguration.java (revision 0) @@ -0,0 +1,19 @@ +package org.apache.ibatis.ibator.config; + +public class ColumnConfiguration extends PropertyHolder { + + private String columnName; + + public ColumnConfiguration() { + super(); + } + + public void setColumnName(String columnName) { + this.columnName = columnName; + } + + public String getColumnName() { + return columnName; + } + +} Index: org/apache/ibatis/ibator/config/TableConfiguration.java =================================================================== --- org/apache/ibatis/ibator/config/TableConfiguration.java (revision 751183) +++ org/apache/ibatis/ibator/config/TableConfiguration.java (working copy) @@ -48,6 +48,8 @@ private boolean updateByExampleStatementEnabled; + private List columnConfigurations; + private List columnOverrides; private Map ignoredColumns; @@ -76,6 +78,7 @@ this.modelType = ibatorContext.getDefaultModelType(); + columnConfigurations = new ArrayList(); columnOverrides = new ArrayList(); ignoredColumns = new HashMap(); @@ -150,7 +153,10 @@ public void addColumnOverride(ColumnOverride columnOverride) { columnOverrides.add(columnOverride); } - + + public void addColumnConfiguration(ColumnConfiguration columnConfiguration) { + columnConfigurations.add(columnConfiguration); + } @Override public boolean equals(Object obj) { if (this == obj) { @@ -208,6 +214,22 @@ return null; } + + /** + * May return null if the column has not been individually configured + * + * @param columnName + * @return the column configuration (if any) related to this column + */ + public ColumnConfiguration getColumnConfiguration(String columnName) { + for (ColumnConfiguration cc: columnConfigurations) { + if (columnName.equalsIgnoreCase(cc.getColumnName())) { + return cc; + } + } + + return null; + } public GeneratedKey getGeneratedKey() { return generatedKey; @@ -296,6 +318,10 @@ public List getColumnOverrides() { return columnOverrides; } + + public List getColumnConfigurations() { + return columnConfigurations; + } /** * This method returns an iterator of Strings. The values Index: org/apache/ibatis/ibator/config/xml/IbatorConfigurationParser.java =================================================================== --- org/apache/ibatis/ibator/config/xml/IbatorConfigurationParser.java (revision 751183) +++ org/apache/ibatis/ibator/config/xml/IbatorConfigurationParser.java (working copy) @@ -29,6 +29,7 @@ import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; +import org.apache.ibatis.ibator.config.ColumnConfiguration; import org.apache.ibatis.ibator.config.IbatorConfiguration; import org.apache.ibatis.ibator.config.IbatorContext; import org.apache.ibatis.ibator.config.ColumnOverride; @@ -441,10 +442,37 @@ parseGeneratedKey(tc, childNode); } else if ("columnRenamingRule".equals(childNode.getNodeName())) { //$NON-NLS-1$ parseColumnRenamingRule(tc, childNode); + } else if ("column".equals(childNode.getNodeName())) { //$NON-NLS-1$ + parseColumn(tc, childNode); } } } + + private void parseColumn(TableConfiguration tc, Node node) { + ColumnConfiguration cc = new ColumnConfiguration(); + tc.addColumnConfiguration(cc); + + Properties attributes = parseAttributes(node); + String column = attributes.getProperty("column"); //$NON-NLS-1$ + + cc.setColumnName(column); + + NodeList nodeList = node.getChildNodes(); + for (int i = 0; i < nodeList.getLength(); i++) { + Node childNode = nodeList.item(i); + if (childNode.getNodeType() != 1) { + continue; + } + + if ("property".equals(childNode.getNodeName())) { //$NON-NLS-1$ + parseProperty(cc, childNode); + } + } + + + } + private void parseColumnOverride(TableConfiguration tc, Node node) { Properties attributes = parseAttributes(node); String column = attributes.getProperty("column"); //$NON-NLS-1$ Index: org/apache/ibatis/ibator/config/xml/ibator-config_1_0.dtd =================================================================== --- org/apache/ibatis/ibator/config/xml/ibator-config_1_0.dtd (revision 751183) +++ org/apache/ibatis/ibator/config/xml/ibator-config_1_0.dtd (working copy) @@ -140,7 +140,7 @@ The table element is used to specify a database table that will be the source information for a set of generated objects. --> - + + + + + Index: org/apache/ibatis/ibator/internal/db/DatabaseIntrospector.java =================================================================== --- org/apache/ibatis/ibator/internal/db/DatabaseIntrospector.java (revision 751183) +++ org/apache/ibatis/ibator/internal/db/DatabaseIntrospector.java (working copy) @@ -32,6 +32,7 @@ import org.apache.ibatis.ibator.api.IntrospectedTable; import org.apache.ibatis.ibator.api.JavaTypeResolver; import org.apache.ibatis.ibator.api.dom.java.FullyQualifiedJavaType; +import org.apache.ibatis.ibator.config.ColumnConfiguration; import org.apache.ibatis.ibator.config.ColumnOverride; import org.apache.ibatis.ibator.config.GeneratedKey; import org.apache.ibatis.ibator.config.IbatorContext; @@ -160,6 +161,7 @@ calculateExtraColumnInformation(tc, columns); applyColumnOverrides(tc, columns); calculateIdentityColumns(tc, columns); + determineColumnConfigurations(tc, columns); List introspectedTables = calculateIntrospectedTables(tc, columns); @@ -348,6 +350,26 @@ } } + private void determineColumnConfigurations(TableConfiguration tc, + Map> columns) { + for (Map.Entry> entry : columns.entrySet()) { + for (IntrospectedColumn introspectedColumn : entry.getValue()) { + ColumnConfiguration columnConfiguration = tc.getColumnConfiguration( + introspectedColumn.getActualColumnName()); + + if (columnConfiguration != null) { + if (logger.isDebugEnabled()) { + logger.debug(Messages.getString("Tracing.4", //$NON-NLS-1$ + introspectedColumn.getActualColumnName(), + entry.getKey().toString())); + } + introspectedColumn.setColumnConfiguration(columnConfiguration); + } + } + } + } + + /** * This method returns a Map> of columns * returned from the database introspection.