Package org.mule.expression

Source Code of org.mule.expression.FunctionExpressionEvaluator

/*
* $Id: FunctionExpressionEvaluator.java 21939 2011-05-18 13:32:09Z aperepel $
* --------------------------------------------------------------------------------------
* 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.expression;

import org.mule.api.MuleMessage;
import org.mule.api.MuleRuntimeException;
import org.mule.api.expression.ExpressionEvaluator;
import org.mule.config.i18n.CoreMessages;
import org.mule.util.ClassUtils;
import org.mule.util.DateUtils;
import org.mule.util.UUID;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.concurrent.atomic.AtomicLong;

/**
* This property extractor doesn't actually extract a property from the message, instead it allows for certain functions
* to be called and returns a result. The functions it supports are -
* <ul>
* <li>now - returns an {@link java.sql.Timestamp} with the current time.</li>
* <li>date - returns a {@link java.util.Date} with the current time.</li>
* <li>dateStamp - returns a {@link java.lang.String} that contains the current date formatted according to {@link #DEFAULT_DATE_FORMAT}.</li>
* <li>datestamp:dd-MM-yyyy - returns a {@link java.lang.String} that contains the current date formatted according to the format passed into the function.</li>
* <li>uuid - returns a globally unique identifier</li>
* <li>hostname - returns the hostname of the machine Mule is running on</li>
* <li>ip - returns the ip address of the machine Mule is running on</li>
* <li>count - returns a local count that will increment for each call.  If the server is re-started the counter will return to zero</li>
* <li>payloadClass - Returns a fuly qualified class name of the payload as a string</li>
* <li>shortPayloadClass - Returns just the class name of the payload as a string</li>
* </ul>
*/
public class FunctionExpressionEvaluator implements ExpressionEvaluator
{
    public static final String NAME = "function";

    public static final String DEFAULT_DATE_FORMAT = "dd-MM-yy_HH-mm-ss.SSS";

    /**
     * A local counter that will increment for each call.  If the server is re-started the
     * counter will return to zero
     */
    private final AtomicLong count = new AtomicLong(0);

    public static final String NOW_FUNCTION = "now";
    public static final String DATE_FUNCTION = "date";
    public static final String DATESTAMP_FUNCTION = "datestamp";
    public static final String SYSTIME_FUNCTION = "systime";
    public static final String UUID_FUNCTION = "uuid";
    public static final String HOSTNAME_FUNCTION = "hostname";
    public static final String IP_FUNCTION = "ip";
    public static final String COUNT_FUNCTION = "count";
    public static final String PAYLOAD_CLASS_FUNCTION = "payloadClass";
    public static final String SHORT_PAYLOAD_CLASS_FUNCTION = "shortPayloadClass";

    public Object evaluate(String name, MuleMessage message)
    {
        if (name.equalsIgnoreCase(NOW_FUNCTION))
        {
            return new Timestamp(System.currentTimeMillis());
        }
        else if (name.equalsIgnoreCase(DATE_FUNCTION))
        {
            return new Date(System.currentTimeMillis());
        }
        else if (name.toLowerCase().startsWith(DATESTAMP_FUNCTION))
        {
            String temp = name.substring(DATESTAMP_FUNCTION.length());
            if (temp.length() == 0)
            {
                return DateUtils.getTimeStamp(DEFAULT_DATE_FORMAT);
            }
            else
            {
                temp = temp.substring(1);
                return DateUtils.getTimeStamp(temp);
            }
        }
        else if (name.equalsIgnoreCase(UUID_FUNCTION))
        {
            return UUID.getUUID();
        }
        else if (name.equalsIgnoreCase(SYSTIME_FUNCTION))
        {
            return System.currentTimeMillis();
        }
        else if (name.equalsIgnoreCase(HOSTNAME_FUNCTION))
        {
            try
            {
                return InetAddress.getLocalHost().getHostName();
            }
            catch (UnknownHostException e)
            {
                throw new MuleRuntimeException(CoreMessages.failedToProcessExtractorFunction(name), e);
            }
        }
        else if (name.equalsIgnoreCase(IP_FUNCTION))
        {
            try
            {
                return InetAddress.getLocalHost().getHostAddress();
            }
            catch (UnknownHostException e)
            {
                throw new MuleRuntimeException(CoreMessages.failedToProcessExtractorFunction(name), e);
            }
        }
        else if (name.equalsIgnoreCase(COUNT_FUNCTION))
        {
            return count.getAndIncrement();
        }
        else if (name.equalsIgnoreCase(PAYLOAD_CLASS_FUNCTION))
        {
            return message.getPayload().getClass().getName();
        }
        else if (name.equalsIgnoreCase(SHORT_PAYLOAD_CLASS_FUNCTION))
        {
            return ClassUtils.getClassName(message.getPayload().getClass());
        }
        else
        {
            throw new IllegalArgumentException(name);
        }
    }   

    /**
     * Gts the name of the object
     *
     * @return the name of the object
     */
    public String getName()
    {
        return NAME;
    }

    /**
     * Sets the name of the object
     *
     * @param name the name of the object
     */
    public void setName(String name)
    {
        throw new UnsupportedOperationException();
    }
}
TOP

Related Classes of org.mule.expression.FunctionExpressionEvaluator

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.