001package org.andromda.cartridges.ejb3.metafacades; 002 003import java.text.MessageFormat; 004import java.util.Collection; 005import java.util.LinkedHashSet; 006import org.andromda.cartridges.ejb3.EJB3Profile; 007import org.andromda.metafacades.uml.DependencyFacade; 008import org.andromda.metafacades.uml.ModelElementFacade; 009import org.apache.commons.collections.Closure; 010import org.apache.commons.collections.CollectionUtils; 011import org.apache.commons.collections.Predicate; 012import org.apache.commons.collections.Transformer; 013import org.apache.commons.lang.BooleanUtils; 014import org.apache.commons.lang.StringUtils; 015 016/** 017 * MetafacadeLogic implementation for org.andromda.cartridges.ejb3.metafacades.EJB3InterceptorFacade. 018 * 019 * @see EJB3InterceptorFacade 020 */ 021public class EJB3InterceptorFacadeLogicImpl 022 extends EJB3InterceptorFacadeLogic 023{ 024 private static final long serialVersionUID = 34L; 025 /** 026 * The property which stores the pattern defining the interceptor class name. 027 */ 028 private static final String INTERCEPTOR_NAME_PATTERN = "interceptorNamePattern"; 029 030 /** 031 * @param metaObject 032 * @param context 033 */ 034 public EJB3InterceptorFacadeLogicImpl(final Object metaObject, final String context) 035 { 036 super(metaObject, context); 037 } 038 039 /** 040 * @see EJB3InterceptorFacade#getInterceptorName() 041 */ 042 @Override 043 protected String handleGetInterceptorName() 044 { 045 String interceptorNamePattern = (String)this.getConfiguredProperty(INTERCEPTOR_NAME_PATTERN); 046 047 return MessageFormat.format( 048 interceptorNamePattern, 049 StringUtils.trimToEmpty(this.getName())); 050 } 051 052 /** 053 * @see EJB3InterceptorFacade#getFullyQualifiedInterceptorName() 054 */ 055 @Override 056 protected String handleGetFullyQualifiedInterceptorName() 057 { 058 return EJB3MetafacadeUtils.getFullyQualifiedName( 059 this.getPackageName(), 060 this.getInterceptorName(), 061 null); 062 } 063 064 /** 065 * @see EJB3InterceptorFacadeLogic#handleGetInterceptorReferences() 066 */ 067 @Override 068 protected Collection<DependencyFacade> handleGetInterceptorReferences() 069 { 070 Collection<DependencyFacade> references = this.getSourceDependencies(); 071 CollectionUtils.filter( 072 references, 073 new Predicate() 074 { 075 public boolean evaluate(final Object object) 076 { 077 DependencyFacade dependency = (DependencyFacade)object; 078 ModelElementFacade targetElement = dependency.getTargetElement(); 079 return targetElement != null && targetElement.hasStereotype(EJB3Profile.STEREOTYPE_INTERCEPTOR); 080 } 081 }); 082 CollectionUtils.transform( 083 references, 084 new Transformer() 085 { 086 public Object transform(final Object object) 087 { 088 return ((DependencyFacade)object).getTargetElement(); 089 } 090 }); 091 final Collection<DependencyFacade> interceptors = new LinkedHashSet(references); 092 CollectionUtils.forAllDo( 093 references, 094 new Closure() 095 { 096 public void execute(final Object object) 097 { 098 if (object instanceof EJB3InterceptorFacade) 099 { 100 interceptors.addAll(((EJB3InterceptorFacade)object).getInterceptorReferences()); 101 } 102 } 103 }); 104 return interceptors; 105 } 106 107 /** 108 * @see EJB3InterceptorFacadeLogic#handleIsDefaultInterceptor() 109 */ 110 @Override 111 protected boolean handleIsDefaultInterceptor() 112 { 113 boolean isDefaultInterceptor = false; 114 String isDefaultInterceptorStr = 115 String.valueOf(this.findTaggedValue(EJB3Profile.TAGGEDVALUE_DEFAULT_INTERCEPTOR)); 116 if (StringUtils.isNotBlank(isDefaultInterceptorStr)) 117 { 118 isDefaultInterceptor = BooleanUtils.toBoolean(isDefaultInterceptorStr); 119 } 120 return isDefaultInterceptor; 121 } 122}