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}