001package org.andromda.cartridges.jsf.metafacades;
002
003import org.andromda.cartridges.jsf.JSFGlobals;
004import org.andromda.metafacades.uml.ModelElementFacade;
005import org.apache.commons.lang.ObjectUtils;
006import org.apache.commons.lang.StringUtils;
007
008/**
009 * MetafacadeLogic implementation for org.andromda.cartridges.jsf.metafacades.JSFControllerOperation.
010 *
011 * @see org.andromda.cartridges.jsf.metafacades.JSFControllerOperation
012 */
013public class JSFControllerOperationLogicImpl
014    extends JSFControllerOperationLogic
015{
016    private static final long serialVersionUID = 34L;
017    /**
018     * @param metaObject
019     * @param context
020     */
021    public JSFControllerOperationLogicImpl(Object metaObject, String context)
022    {
023        super(metaObject, context);
024    }
025
026    /**
027     * @return formName
028     * @see org.andromda.cartridges.jsf.metafacades.JSFControllerOperation#getFormName()
029     */
030    protected String handleGetFormName()
031    {
032        final String pattern = ObjectUtils.toString(this.getConfiguredProperty(JSFGlobals.FORM_PATTERN));
033        return pattern.replaceFirst("\\{0\\}", StringUtils.capitalize(this.getName()));
034    }
035
036    /**
037     * @return fullyQualifiedFormName
038     * @see org.andromda.cartridges.jsf.metafacades.JSFControllerOperation#getFullyQualifiedFormName()
039     */
040    protected String handleGetFullyQualifiedFormName()
041    {
042        final StringBuilder fullyQualifiedName = new StringBuilder();
043        final String packageName = this.getPackageName();
044        if (StringUtils.isNotBlank(packageName))
045        {
046            fullyQualifiedName.append(packageName + '.');
047        }
048        return fullyQualifiedName.append(StringUtils.capitalize(this.getFormName())).toString();
049    }
050
051    /**
052     * @return getFullyQualifiedFormName().replace('.', '/')
053     * @see org.andromda.cartridges.jsf.metafacades.JSFControllerOperation#getFullyQualifiedFormPath()
054     */
055    protected String handleGetFullyQualifiedFormPath()
056    {
057        return this.getFullyQualifiedFormName().replace('.', '/');
058    }
059
060    /**
061     * @return formCall
062     * @see org.andromda.cartridges.jsf.metafacades.JSFControllerOperation#getFormCall()
063     */
064    protected String handleGetFormCall()
065    {
066        final StringBuilder call = new StringBuilder();
067        call.append(this.getName());
068        call.append("(");
069        if (!this.getFormFields().isEmpty())
070        {
071            call.append("form");
072        }
073        call.append(")");
074        return call.toString();
075    }
076
077    /**
078     * @return getFormSignature(false)
079     * @see org.andromda.cartridges.jsf.metafacades.JSFControllerOperation#getImplementationFormSignature()
080     */
081    protected String handleGetImplementationFormSignature()
082    {
083        return this.getFormSignature(false);
084    }
085
086    /**
087     * @return getFormSignature(true)
088     * @see org.andromda.cartridges.jsf.metafacades.JSFControllerOperation#getFormSignature()
089     */
090    protected String handleGetFormSignature()
091    {
092        return this.getFormSignature(true);
093    }
094
095    /**
096     * Constructs the signature that takes the form for this operation.
097     *
098     * @param isAbstract whether or not the signature is abstract.
099     * @return the appropriate signature.
100     */
101    private String getFormSignature(boolean isAbstract)
102    {
103        final StringBuilder signature = new StringBuilder();
104        signature.append(this.getVisibility() + ' ');
105        if (isAbstract)
106        {
107            signature.append("abstract ");
108        }
109        final ModelElementFacade returnType = this.getReturnType();
110        signature.append(returnType != null ? returnType.getFullyQualifiedName() : null);
111        signature.append(" " + this.getName() + "(");
112        if (!this.getFormFields().isEmpty())
113        {
114            signature.append(this.getFormName() + " form");
115        }
116        signature.append(")");
117        return signature.toString();
118    }
119}