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}