HibernateFinderMethodArgumentLogicImpl.java

package org.andromda.cartridges.hibernate.metafacades;

import org.andromda.metafacades.uml.ClassifierFacade;

/**
 * MetafacadeLogic implementation for
 * org.andromda.cartridges.hibernate.metafacades.HibernateFinderMethodArgument.
 *
 * @see org.andromda.cartridges.hibernate.metafacades.HibernateFinderMethodArgument
 */
public class HibernateFinderMethodArgumentLogicImpl
    extends HibernateFinderMethodArgumentLogic
{
    private static final long serialVersionUID = 34L;
    // ---------------- constructor -------------------------------
    /**
     * @param metaObject
     * @param context
     */
    public HibernateFinderMethodArgumentLogicImpl(
        Object metaObject,
        String context)
    {
        super(metaObject, context);
    }

    /**
     * Defines if specific setters methods will be created for primitive types
     * and dates
     */
    private static final String USE_SPECIALIZED_SETTERS = "hibernateQueryUseSpecializedSetters";

    /**
     * @see org.andromda.cartridges.hibernate.metafacades.HibernateFinderMethodArgument#getQueryArgumentNameSetter()
     */
    @Override
    protected String handleGetQueryArgumentNameSetter()
    {
        StringBuilder setterName = new StringBuilder();
        boolean specializedSetters =
            Boolean.valueOf(String.valueOf(this.getConfiguredProperty(USE_SPECIALIZED_SETTERS))).booleanValue();
        ClassifierFacade classifier = this.getType();
        if (classifier != null)
        {
            if (specializedSetters)
            {
                if (classifier.isPrimitive())
                {
                    setterName.append("set").append(classifier.getWrapperName().replaceAll("(.)*\\.", ""));
                }
                else if (classifier.isDateType() || classifier.isStringType())
                {
                    setterName.append("set").append(classifier.getName());
                }
                else
                {
                    setterName.append("setParameter");
                }
            }
            else
            {
                setterName.append("setParameter");
            }
            if (classifier.isCollectionType())
            {
                setterName.append("List");
            }
        }
        return setterName.toString();
    }
}