001package org.andromda.cartridges.ejb3.metafacades; 002 003import java.text.MessageFormat; 004import org.andromda.cartridges.ejb3.EJB3Globals; 005import org.andromda.cartridges.ejb3.EJB3Profile; 006import org.andromda.cartridges.ejb3.EJB3ScriptHelper; 007import org.andromda.metafacades.uml.OperationFacade; 008import org.andromda.metafacades.uml.UMLProfile; 009import org.apache.commons.collections.CollectionUtils; 010import org.apache.commons.collections.Predicate; 011import org.apache.commons.lang.StringUtils; 012 013/** 014 * MetafacadeLogic implementation for org.andromda.cartridges.ejb3.metafacades.EJB3WebServiceFacade. 015 * 016 * @see EJB3WebServiceFacade 017 */ 018public class EJB3WebServiceFacadeLogicImpl 019 extends EJB3WebServiceFacadeLogic 020{ 021 private static final long serialVersionUID = 34L; 022 /** 023 * The property which stores the pattern defining the web service interface name. 024 */ 025 private static final String WEB_SERVICE_INTERFACE_NAME_PATTERN = "webServiceInterfaceNamePattern"; 026 027 /** 028 * The property defining the default style to give the web services. 029 */ 030 private static final String PROPERTY_DEFAULT_STYLE = "webServiceDefaultStyle"; 031 032 /** 033 * Represents a "document" style. 034 */ 035 private static final String STYLE_DOCUMENT = "document"; 036 037 /** 038 * Represents a "rpc" style. 039 */ 040 private static final String STYLE_RPC = "rpc"; 041 042 /** 043 * The property defining the default style to give the web services. 044 */ 045 private static final String PROPERTY_DEFAULT_USE = "webServiceDefaultUse"; 046 047 /** 048 * Represents a "literal" use. 049 */ 050 private static final String USE_LITERAL = "literal"; 051 052 /** 053 * Represents an "encoded" use. 054 */ 055 private static final String USE_ENCODED = "encoded"; 056 057 /** 058 * Represents the default parameter encoding style 059 */ 060 private static final String PROPERTY_DEFAULT_PARAMETER_STYLE = "webServiceDefaultParameterStyle"; 061 062 /** 063 * Represents a "wrapped" parameter style. 064 */ 065 private static final String PARAMETER_STYLE_WRAPPED = "wrapped"; 066 067 /** 068 * Represents a "bare" parameter style. 069 */ 070 private static final String PARAMETER_STYLE_BARE = "bare"; 071 072 /** 073 * Represents the qualified name local part pattern 074 */ 075 private static final String QNAME_LOCAL_PART_PATTERN = "webServiceQualifiedNameLocalPartPattern"; 076 077 /** 078 * Determine if the namespace should be reversed 079 */ 080 private static final String REVERSE_NAMESPACE = "webServiceReverseNamespace"; 081 082 /** 083 * Retrieve the namespace pattern used to generate the namespace 084 */ 085 private static final String NAMESPACE_PATTERN = "webServiceNamespacePattern"; 086 087 /** 088 * 089 * @param metaObject 090 * @param context 091 */ 092 public EJB3WebServiceFacadeLogicImpl(final Object metaObject, final String context) 093 { 094 super (metaObject, context); 095 } 096 097 /** 098 * @see EJB3WebServiceFacade#getFullyQualifiedWebServiceInterfaceName() 099 */ 100 @Override 101 protected String handleGetFullyQualifiedWebServiceInterfaceName() 102 { 103 return EJB3MetafacadeUtils.getFullyQualifiedName( 104 this.getPackageName(), 105 this.getWebServiceInterfaceName(), 106 null); 107 } 108 109 /** 110 * @see EJB3WebServiceFacade#getWebServiceInterfaceName() 111 */ 112 @Override 113 protected String handleGetWebServiceInterfaceName() 114 { 115 String webServiceInterfaceNamePattern = 116 String.valueOf(this.getConfiguredProperty(WEB_SERVICE_INTERFACE_NAME_PATTERN)); 117 118 return MessageFormat.format( 119 webServiceInterfaceNamePattern, 120 StringUtils.trimToEmpty(this.getName())); 121 } 122 123 /** 124 * @see EJB3WebServiceFacade#getStyle() 125 */ 126 @Override 127 protected String handleGetStyle() 128 { 129 String style = (String)this.findTaggedValue(UMLProfile.TAGGEDVALUE_WEBSERVICE_STYLE); 130 if (StringUtils.isBlank(style)) 131 { 132 style = String.valueOf(this.getConfiguredProperty(PROPERTY_DEFAULT_STYLE)); 133 } 134 return style; 135 } 136 137 /** 138 * @see EJB3WebServiceFacade#getUse() 139 */ 140 @Override 141 protected String handleGetUse() 142 { 143 String use = (String)this.findTaggedValue(UMLProfile.TAGGEDVALUE_WEBSERVICE_USE); 144 if (StringUtils.isBlank(use)) 145 { 146 use = String.valueOf(this.getConfiguredProperty(PROPERTY_DEFAULT_USE)); 147 } 148 return use; 149 } 150 151 /** 152 * @see EJB3WebServiceFacade#isRpcStyle() 153 */ 154 @Override 155 protected boolean handleIsRpcStyle() 156 { 157 return STYLE_RPC.equalsIgnoreCase(this.getStyle()); 158 } 159 160 /** 161 * @see EJB3WebServiceFacade#isDocumentStyle() 162 */ 163 @Override 164 protected boolean handleIsDocumentStyle() 165 { 166 return STYLE_DOCUMENT.equalsIgnoreCase(this.getStyle()); 167 } 168 169 /** 170 * @see EJB3WebServiceFacade#isEncodedUse() 171 */ 172 @Override 173 protected boolean handleIsEncodedUse() 174 { 175 return USE_ENCODED.equalsIgnoreCase(this.getStyle()); 176 } 177 178 /** 179 * @see EJB3WebServiceFacade#isLiteralUse() 180 */ 181 @Override 182 protected boolean handleIsLiteralUse() 183 { 184 return USE_LITERAL.equalsIgnoreCase(this.getStyle()); 185 } 186 187 /** 188 * @see EJB3WebServiceFacadeLogic#handleIsWebServiceOperationsExist() 189 */ 190 @Override 191 protected boolean handleIsWebServiceOperationsExist() 192 { 193 return CollectionUtils.find( 194 this.getOperations(), 195 new Predicate() 196 { 197 public boolean evaluate(final Object object) 198 { 199 boolean isWebService = false; 200 final OperationFacade operation = (OperationFacade)object; 201 if (operation.hasStereotype(UMLProfile.STEREOTYPE_WEBSERVICE_OPERATION)) 202 { 203 isWebService = true; 204 } 205 return isWebService; 206 } 207 }) != null; 208 } 209 210 /** 211 * @see EJB3WebServiceFacadeLogic#handleGetParameterStyle() 212 */ 213 @Override 214 protected String handleGetParameterStyle() 215 { 216 String parameterStyle = (String)this.findTaggedValue(EJB3Profile.TAGGEDVALUE_WEBSERVICE_PARAMETER_STYLE); 217 if (StringUtils.isBlank(parameterStyle)) 218 { 219 parameterStyle = String.valueOf(this.getConfiguredProperty(PROPERTY_DEFAULT_PARAMETER_STYLE)); 220 } 221 return parameterStyle; 222 } 223 224 /** 225 * @see EJB3WebServiceFacadeLogic#handleIsWrappedParameterStyle() 226 */ 227 @Override 228 protected boolean handleIsWrappedParameterStyle() 229 { 230 return PARAMETER_STYLE_WRAPPED.equalsIgnoreCase(this.getParameterStyle()); 231 } 232 233 /** 234 * @see EJB3WebServiceFacadeLogic#handleIsBareParameterStyle() 235 */ 236 @Override 237 protected boolean handleIsBareParameterStyle() 238 { 239 return PARAMETER_STYLE_BARE.equalsIgnoreCase(this.getParameterStyle()); 240 } 241 242 /** 243 * @see EJB3WebServiceFacadeLogic#handleGetQName() 244 */ 245 @Override 246 protected String handleGetQName() 247 { 248 String qnameLocalPartPattern = String.valueOf(this.getConfiguredProperty(QNAME_LOCAL_PART_PATTERN)); 249 return MessageFormat.format( 250 qnameLocalPartPattern, 251 StringUtils.trimToEmpty(this.getName())); 252 } 253 254 /** 255 * @see EJB3WebServiceFacadeLogic#handleGetNamespace() 256 */ 257 @Override 258 protected String handleGetNamespace() 259 { 260 String packageName = this.getPackageName(); 261 if (this.isReverseNamespace()) 262 { 263 packageName = EJB3ScriptHelper.reversePackage(packageName); 264 } 265 String namespacePattern = String.valueOf(this.getConfiguredProperty(NAMESPACE_PATTERN)); 266 return MessageFormat.format( 267 namespacePattern, 268 StringUtils.trimToEmpty( 269 StringUtils.substringBeforeLast(packageName, String.valueOf(EJB3Globals.NAMESPACE_DELIMITER))), 270 StringUtils.trimToEmpty( 271 StringUtils.substringAfterLast(packageName, String.valueOf(EJB3Globals.NAMESPACE_DELIMITER)))); 272 } 273 274 /** 275 * Gets whether or not <code>reverseNamespace</code> is true/false for this type. 276 * 277 * @return boolean true/false 278 */ 279 protected boolean isReverseNamespace() 280 { 281 return Boolean.valueOf(String.valueOf(this.getConfiguredProperty(REVERSE_NAMESPACE))).booleanValue(); 282 } 283}