001package org.andromda.cartridges.ejb3.metafacades;
002
003import org.andromda.cartridges.ejb3.EJB3Profile;
004import org.andromda.metafacades.uml.ParameterFacade;
005import org.andromda.metafacades.uml.UMLProfile;
006import org.apache.commons.lang.BooleanUtils;
007import org.apache.commons.lang.StringUtils;
008import org.apache.log4j.Logger;
009
010/**
011 * MetafacadeLogic implementation for org.andromda.cartridges.ejb3.metafacades.EJB3WebServiceOperationFacade.
012 *
013 * @see EJB3WebServiceOperationFacade
014 */
015public class EJB3WebServiceOperationFacadeLogicImpl
016    extends EJB3WebServiceOperationFacadeLogic
017{
018    private static final long serialVersionUID = 34L;
019    /**
020     * The logger instance.
021     */
022    private static final Logger logger = Logger.getLogger(EJB3WebServiceOperationFacadeLogicImpl.class);
023
024    /**
025     * @param metaObject
026     * @param context
027     */
028    public EJB3WebServiceOperationFacadeLogicImpl(final Object metaObject, final String context)
029    {
030        super (metaObject, context);
031    }
032
033    /**
034     * @see EJB3WebServiceOperationFacade#isExposed()
035     */
036    @Override
037    protected boolean handleIsExposed()
038    {
039        return this.getOwner().hasStereotype(UMLProfile.STEREOTYPE_WEBSERVICE) ||
040            this.hasStereotype(UMLProfile.STEREOTYPE_WEBSERVICE_OPERATION);
041    }
042
043    /**
044     * @see EJB3WebServiceOperationFacadeLogic#handleIsOneway()
045     */
046    @Override
047    protected boolean handleIsOneway()
048    {
049        return BooleanUtils.toBoolean(
050                (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_WEBSERVICE_OPERATION_ONEWAY));
051    }
052
053    /**
054     * @see EJB3WebServiceOperationFacadeLogic#getAnnotatedSignature()
055     */
056    @Override
057    protected String handleGetAnnotatedSignature()
058    {
059        final StringBuilder signature = new StringBuilder(this.getName());
060        signature.append("(");
061        signature.append(this.getAnnotatedTypedArgumentList(true, null));
062        signature.append(")");
063        return signature.toString();
064    }
065
066    /**
067     * @param withArgumentNames
068     * @param modifier
069     * @return
070     */
071    private String getAnnotatedTypedArgumentList(final boolean withArgumentNames, final String modifier)
072    {
073        final StringBuilder buffer = new StringBuilder();
074        boolean commaNeeded = false;
075        for (ParameterFacade paramter : this.getArguments())
076        {
077            String type = null;
078            if (paramter.getType() == null)
079            {
080                EJB3WebServiceOperationFacadeLogicImpl.logger.error(
081                        "ERROR! No type specified for parameter --> '" + paramter.getName() +
082                        "' on operation --> '" +
083                        this.getName() +
084                        "', please check your model");
085            }
086            else
087            {
088                type = paramter.getGetterSetterTypeName();
089            }
090
091            if (commaNeeded)
092            {
093                buffer.append(",");
094            }
095            buffer.append('\n');
096
097            // Add WebParam annotation
098            if (withArgumentNames)
099            {
100                buffer.append("        @javax.jws.WebParam(name = \"");
101                buffer.append(StringUtils.capitalize(paramter.getName())).append("\")");
102                buffer.append(" ");
103            }
104            if (StringUtils.isNotBlank(modifier))
105            {
106                buffer.append(modifier);
107                buffer.append(" ");
108            }
109            buffer.append(type);
110            if (withArgumentNames)
111            {
112                buffer.append(" ");
113                buffer.append(paramter.getName());
114            }
115            commaNeeded = true;
116        }
117        buffer.append('\n');
118        if (commaNeeded)
119        {
120            buffer.append("    ");
121        }
122        return buffer.toString();
123    }
124
125    /**
126     * @see EJB3WebServiceOperationFacadeLogic#handleGetMethodName()
127     */
128    @Override
129    protected String handleGetMethodName()
130    {
131        String methodName = (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_WEBSERVICE_OPERATION_NAME);
132        if (StringUtils.isBlank(methodName))
133        {
134            methodName = StringUtils.capitalize(this.getName());
135        }
136        return methodName;
137    }
138
139    /**
140     * @see EJB3WebServiceOperationFacadeLogic#handleGetResultName()
141     */
142    @Override
143    protected String handleGetResultName()
144    {
145        return (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_WEBSERVICE_OPERATION_RESULT_NAME);
146    }
147}