Impressive. That's a real fast response. 
And it works perfect.

I implemented an accoring comment generator. 
Maybe someone who's reading this thread later on will find this useful so up
to now I paste this first version of a comment generator below.

Thank you Jeff!
Benjamin 

-------------------------------------------------------------------

<commentGenerator type="de.bar54.ibator.JavaModelCommentGenerator">
        <property name="suppressDate" value="true" />
</commentGenerator>

-------------------------------------------------------------------

package de.bar54.ibator;

import org.apache.ibatis.ibator.api.IntrospectedColumn;
import org.apache.ibatis.ibator.api.IntrospectedTable;
import org.apache.ibatis.ibator.api.dom.java.Field;
import org.apache.ibatis.ibator.api.dom.java.Method;
import org.apache.ibatis.ibator.api.dom.java.Parameter;
import org.apache.ibatis.ibator.internal.DefaultCommentGenerator;
import org.apache.ibatis.ibator.internal.util.JavaBeansUtil;

/**
 * ibator comment generator to read the column comments from the database
and
 * to write them into the java doc of the data model classes
 *
 * @author Benjamin Klatt
 *
 */
public class JavaModelCommentGenerator extends DefaultCommentGenerator {

        /**
         * Enhanced field comment generation method to use the database
field remark to
         * produce the java doc of the appropriate field
         *
         * if a remark is available this will be used
         * if not, the default ibator comment is generated
         *
         * This method still adds the ibatorgenerated annotation to support
the eclipse merge tool
         *
         * @param field                                 The java field to
work on
         * @param introspectedTable             The currently processed
table
         * @param introspectedColumn    The currently processed column
         *
         */
    public void addFieldComment(Field field,
            IntrospectedTable introspectedTable,
            IntrospectedColumn introspectedColumn) {

        if(remarkExists(introspectedColumn)){
                field.addJavaDocLine("/**"); //$NON-NLS-1$
                field.addJavaDocLine(" * "+introspectedColumn.getRemarks());
//$NON-NLS-1$
                addIbatorJavadocTag(field);
                field.addJavaDocLine(" */"); //$NON-NLS-1$

        } else {
            StringBuilder sb = new StringBuilder();
            field.addJavaDocLine("/**"); //$NON-NLS-1$
            field.addJavaDocLine(" * This field was generated by Apache
iBATIS Ibator."); //$NON-NLS-1$
            sb.append(" * This field corresponds to the database column ");
//$NON-NLS-1$
            sb.append(introspectedTable.getFullyQualifiedTable());
            sb.append('.');
            sb.append(introspectedColumn.getActualColumnName());
            field.addJavaDocLine(sb.toString());
            addIbatorJavadocTag(field);
            field.addJavaDocLine(" */"); //$NON-NLS-1$
        }
    }

    public void addGetterComment(Method method,
            IntrospectedTable introspectedTable,
            IntrospectedColumn introspectedColumn) {

                if(remarkExists(introspectedColumn)){
                        method.addJavaDocLine("/**"); //$NON-NLS-1$
                        method.addJavaDocLine(" * Get
"+introspectedColumn.getRemarks()); //$NON-NLS-1$
                        method.addJavaDocLine(" *"); //$NON-NLS-1$
                        StringBuilder sb = new StringBuilder();
                        sb.append(" * @return the value of "); //$NON-NLS-1$
        
sb.append(JavaBeansUtil.getCamelCaseString(introspectedColumn.getActualColum
nName(), false));
                        if(introspectedColumn.isNullable()){
                                sb.append(" (can be null)");
                        }
                        method.addJavaDocLine(sb.toString());
                        addIbatorJavadocTag(method);
                        method.addJavaDocLine(" */"); //$NON-NLS-1$


                } else {
                        StringBuilder sb = new StringBuilder();
                        method.addJavaDocLine("/**"); //$NON-NLS-1$
                        method.addJavaDocLine(" * This method was generated
by Apache iBATIS Ibator."); //$NON-NLS-1$
                        sb.append(" * This method returns the value of the
database column "); //$NON-NLS-1$
        
sb.append(introspectedTable.getFullyQualifiedTable());
                        sb.append('.');
                        sb.append(introspectedColumn.getActualColumnName());
                        method.addJavaDocLine(sb.toString());
                        method.addJavaDocLine(" *"); //$NON-NLS-1$
                        sb.setLength(0);
                        sb.append(" * @return the value of "); //$NON-NLS-1$
        
sb.append(introspectedTable.getFullyQualifiedTable());
                        sb.append('.');
                        sb.append(introspectedColumn.getActualColumnName());
                        method.addJavaDocLine(sb.toString());
                        addIbatorJavadocTag(method);
                        method.addJavaDocLine(" */"); //$NON-NLS-1$
                }
    }

    public void addSetterComment(Method method,
            IntrospectedTable introspectedTable,
            IntrospectedColumn introspectedColumn) {

                if(remarkExists(introspectedColumn)){
                method.addJavaDocLine("/**"); //$NON-NLS-1$
                method.addJavaDocLine(" * Set
"+introspectedColumn.getRemarks()); //$NON-NLS-1$
                method.addJavaDocLine(" *"); //$NON-NLS-1$
                        StringBuilder sb = new StringBuilder();
                Parameter parm = method.getParameters().get(0);
                sb.setLength(0);
                sb.append(" * @param "); //$NON-NLS-1$
                sb.append(parm.getName());
                sb.append(" the value for "); //$NON-NLS-1$
        
sb.append(JavaBeansUtil.getCamelCaseString(introspectedColumn.getActualColum
nName(), false)); //$NON-NLS-1$
                method.addJavaDocLine(sb.toString());
                addIbatorJavadocTag(method);
                method.addJavaDocLine(" */"); //$NON-NLS-1$

                } else {
                        StringBuilder sb = new StringBuilder();
                method.addJavaDocLine("/**"); //$NON-NLS-1$
                method.addJavaDocLine(" * This method was generated by
Apache iBATIS Ibator."); //$NON-NLS-1$
                sb.append(" * This method sets the value of the database
column "); //$NON-NLS-1$
                sb.append(introspectedTable.getFullyQualifiedTable());
                sb.append('.');
                sb.append(introspectedColumn.getActualColumnName());
                method.addJavaDocLine(sb.toString());
                method.addJavaDocLine(" *"); //$NON-NLS-1$
                Parameter parm = method.getParameters().get(0);
                sb.setLength(0);
                sb.append(" * @param "); //$NON-NLS-1$
                sb.append(parm.getName());
                sb.append(" the value for "); //$NON-NLS-1$
                sb.append(introspectedTable.getFullyQualifiedTable());
                sb.append('.');
                sb.append(introspectedColumn.getActualColumnName());
                method.addJavaDocLine(sb.toString());
                addIbatorJavadocTag(method);
                method.addJavaDocLine(" */"); //$NON-NLS-1$
                }
    }

    /**
     * Utility method to check if a column remark is available
     * @param introspectedColumn The column to check for a remark
     *
     * @return true if a non empty remark is available
     */
    private boolean remarkExists(IntrospectedColumn introspectedColumn){
        return introspectedColumn.getRemarks() != null &&
!"".equals(introspectedColumn.getRemarks());
    }
}



-------------------------------------------------------------------

-----Ursprüngliche Nachricht-----
Von: Jeff Butler [mailto:jeffgbut...@gmail.com] 
Gesendet: Freitag, 20. März 2009 23:23
An: user-java@ibatis.apache.org
Betreff: Re: iBator CommentGenerator: Java Model Class with database column
comment

Support for this is now available in SVN.

Jeff Butler

On Fri, Mar 20, 2009 at 6:57 AM, Jeff Butler <jeffgbut...@gmail.com> wrote:
> Interesting idea.
>
> Ibator does not currently capture database field comments from the
> metadata, so there's no simple way to do this now.
>
> It's a relatively simple change to add it.  I'd need to change the
> CommentGenerator interface to expose it - hopefully that won't cause
> too much trouble for people.  I'll look into it.
>
> Jeff Butler
>
>
> On Thu, Mar 19, 2009 at 4:30 PM, Benjamin-Klatt <benja...@bar54.de> wrote:
>>
>> Hi all,
>>
>> I am trying to use the comment I modeled in my database to be
automatically
>> used in javadoc comment of the data fields within the java data model
source
>> code.
>>
>> I started to implement my own commentGenerator, but the method
>> addFieldComment(Field field, FullyQualifiedTable, String columnName)
>> does not provide the required information. There is no element that
provides
>> access to the comment of the appropriate column in the database.
>>
>> Does someone has implement a solution for this or at least does know this
>> information could be accessed?
>>
>> Thanks in advance
>> Benjamin
>> --
>> View this message in context:
http://www.nabble.com/iBator-CommentGenerator%3A-Java-Model-Class-with-datab
ase-column-comment-tp22608433p22608433.html
>> Sent from the iBATIS - User - Java mailing list archive at Nabble.com.
>>
>>
>

Reply via email to