Package org.mule.el.mvel

Source Code of org.mule.el.mvel.MessageVariableResolverFactory

/*
* Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.el.mvel;

import org.mule.api.MuleContext;
import org.mule.api.MuleMessage;
import org.mule.api.el.VariableAssignmentCallback;
import org.mule.api.transport.PropertyScope;
import org.mule.el.context.MessageContext;
import org.mule.el.context.MessagePropertyMapContext;
import org.mule.mvel2.ParserConfiguration;
import org.mule.mvel2.integration.VariableResolver;
import org.mule.mvel2.integration.VariableResolverFactory;

import java.util.Map;

public class MessageVariableResolverFactory extends MuleBaseVariableResolverFactory
{

    private static final long serialVersionUID = -6819292692339684915L;

    private final String MESSAGE = "message";
    private final String PAYLOAD = "payload";
    private final String EXCEPTION = "exception";
    private final String FLOW_VARS = "flowVars";
    private final String SESSION_VARS = "sessionVars";

    private MuleMessage muleMessage;

    public MessageVariableResolverFactory(final ParserConfiguration parserConfiguration,
                                          final MuleContext muleContext,
                                          final MuleMessage message)
    {
        this.muleMessage = message;
    }

    /**
     * Convenience constructor to allow for more concise creation of VariableResolverFactory chains without
     * and performance overhead incurred by using a builder.
     *
     * @param delegate
     * @param next
     */
    public MessageVariableResolverFactory(final ParserConfiguration parserConfiguration,
                                          final MuleContext muleContext,
                                          final MuleMessage message,
                                          final VariableResolverFactory next)
    {
        this(parserConfiguration, muleContext, message);
        setNextFactory(next);
    }

    @Override
    public boolean isTarget(String name)
    {
        return MESSAGE.equals(name) || PAYLOAD.equals(name) || FLOW_VARS.equals(name)
               || EXCEPTION.equals(name) || SESSION_VARS.equals(name)
               || MVELExpressionLanguageContext.MULE_MESSAGE_INTERNAL_VARIABLE.equals(name);
    }

    @Override
    public VariableResolver getVariableResolver(String name)
    {
        if (muleMessage != null)
        {
            if (MESSAGE.equals(name))
            {
                return new MuleImmutableVariableResolver<MessageContext>(MESSAGE, new MessageContext(
                    muleMessage), null);
            }
            else if (PAYLOAD.equals(name))
            {
                return new MuleVariableResolver<Object>(PAYLOAD, muleMessage.getPayload(), null,
                    new VariableAssignmentCallback<Object>()
                    {
                        @Override
                        public void assignValue(String name, Object value, Object newValue)
                        {
                            muleMessage.setPayload(newValue);
                        }
                    });
            }
            else if (FLOW_VARS.equals(name))
            {
                return new MuleImmutableVariableResolver<Map<String, Object>>(FLOW_VARS,
                    new MessagePropertyMapContext(muleMessage, PropertyScope.INVOCATION), null);
            }
            else if (EXCEPTION.equals(name))
            {
                if (muleMessage.getExceptionPayload() != null)
                {
                    return new MuleImmutableVariableResolver<Throwable>(EXCEPTION,
                        muleMessage.getExceptionPayload().getException(), null);
                }
                else
                {
                    return new MuleImmutableVariableResolver<MuleMessage>(EXCEPTION, null, null);
                }
            }
            else if (SESSION_VARS.equals(name))
            {
                return new MuleImmutableVariableResolver<Map<String, Object>>(SESSION_VARS,
                    new MessagePropertyMapContext(muleMessage, PropertyScope.SESSION), null);
            }
            else if (MVELExpressionLanguageContext.MULE_MESSAGE_INTERNAL_VARIABLE.equals(name))
            {
                return new MuleImmutableVariableResolver<MuleMessage>(
                    MVELExpressionLanguageContext.MULE_MESSAGE_INTERNAL_VARIABLE, muleMessage, null);
            }
        }
        return super.getNextFactoryVariableResolver(name);
    }

}
TOP

Related Classes of org.mule.el.mvel.MessageVariableResolverFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.