EJB3InterceptorFacadeLogicImpl.java

package org.andromda.cartridges.ejb3.metafacades;

import java.text.MessageFormat;
import java.util.Collection;
import java.util.LinkedHashSet;
import org.andromda.cartridges.ejb3.EJB3Profile;
import org.andromda.metafacades.uml.DependencyFacade;
import org.andromda.metafacades.uml.ModelElementFacade;
import org.apache.commons.collections.Closure;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.apache.commons.collections.Transformer;
import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;

/**
 * MetafacadeLogic implementation for org.andromda.cartridges.ejb3.metafacades.EJB3InterceptorFacade.
 *
 * @see EJB3InterceptorFacade
 */
public class EJB3InterceptorFacadeLogicImpl
    extends EJB3InterceptorFacadeLogic
{
    private static final long serialVersionUID = 34L;
    /**
     * The property which stores the pattern defining the interceptor class name.
     */
    private static final String INTERCEPTOR_NAME_PATTERN = "interceptorNamePattern";

    /**
     * @param metaObject
     * @param context
     */
    public EJB3InterceptorFacadeLogicImpl(final Object metaObject, final String context)
    {
        super(metaObject, context);
    }

    /**
     * @see EJB3InterceptorFacade#getInterceptorName()
     */
    @Override
    protected String handleGetInterceptorName()
    {
        String interceptorNamePattern = (String)this.getConfiguredProperty(INTERCEPTOR_NAME_PATTERN);

        return MessageFormat.format(
                interceptorNamePattern,
                StringUtils.trimToEmpty(this.getName()));
    }

    /**
     * @see EJB3InterceptorFacade#getFullyQualifiedInterceptorName()
     */
    @Override
    protected String handleGetFullyQualifiedInterceptorName()
    {
        return EJB3MetafacadeUtils.getFullyQualifiedName(
                this.getPackageName(),
                this.getInterceptorName(),
                null);
    }

    /**
     * @see EJB3InterceptorFacadeLogic#handleGetInterceptorReferences()
     */
    @Override
    protected Collection<DependencyFacade> handleGetInterceptorReferences()
    {
        Collection<DependencyFacade> references = this.getSourceDependencies();
        CollectionUtils.filter(
            references,
            new Predicate()
            {
                public boolean evaluate(final Object object)
                {
                    DependencyFacade dependency = (DependencyFacade)object;
                    ModelElementFacade targetElement = dependency.getTargetElement();
                    return targetElement != null && targetElement.hasStereotype(EJB3Profile.STEREOTYPE_INTERCEPTOR);
                }
            });
        CollectionUtils.transform(
            references,
            new Transformer()
            {
                public Object transform(final Object object)
                {
                    return ((DependencyFacade)object).getTargetElement();
                }
            });
        final Collection<DependencyFacade> interceptors = new LinkedHashSet(references);
        CollectionUtils.forAllDo(
            references,
            new Closure()
            {
                public void execute(final Object object)
                {
                    if (object instanceof EJB3InterceptorFacade)
                    {
                        interceptors.addAll(((EJB3InterceptorFacade)object).getInterceptorReferences());
                    }
                }
            });
        return interceptors;
    }

    /**
     * @see EJB3InterceptorFacadeLogic#handleIsDefaultInterceptor()
     */
    @Override
    protected boolean handleIsDefaultInterceptor()
    {
        boolean isDefaultInterceptor = false;
        String isDefaultInterceptorStr =
            String.valueOf(this.findTaggedValue(EJB3Profile.TAGGEDVALUE_DEFAULT_INTERCEPTOR));
        if (StringUtils.isNotBlank(isDefaultInterceptorStr))
        {
            isDefaultInterceptor = BooleanUtils.toBoolean(isDefaultInterceptorStr);
        }
        return isDefaultInterceptor;
    }
}