Package org.skyscreamer.yoga.selector.parser

Source Code of org.skyscreamer.yoga.selector.parser.DynamicPropertyResolver

package org.skyscreamer.yoga.selector.parser;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import org.skyscreamer.yoga.exceptions.ParseSelectorException;

/**
* An implementation of {@link AliasSelectorResolver} that uses a Properties object accessed from a InputStream
* (likely a resource or file) to translate the alias. The key of each property is the alias, and the value is the
* fully-formed selector expression.
*/
public class DynamicPropertyResolver implements AliasSelectorResolver
{
    private int _reloadIntervalSeconds = 0;
    private long _nextReloadTime = 0;
    private Properties _properties = new Properties();
    private InputStream _propertyFile;

    public DynamicPropertyResolver()
    {
    }

    public DynamicPropertyResolver( InputStream propertyFile )
    {
        setPropertyFile( propertyFile );
    }

    public String resolveSelector( String aliasSelectorExpression ) throws ParseSelectorException
    {
        if ( _nextReloadTime == 0 || _reloadIntervalSeconds > 0 )
        {
            long milliseconds = System.currentTimeMillis();
            if ( milliseconds > _nextReloadTime )
            {
                try
                {
                    _properties.load( _propertyFile );
                    _nextReloadTime = milliseconds + (_reloadIntervalSeconds * 1000);
                }
                catch ( IOException e )
                {
                    throw new ParseSelectorException( "Could not load property file" );
                }
            }
        }

        String result = _properties.getProperty( aliasSelectorExpression );
        if ( result == null )
        {
            throw new ParseSelectorException( "No selector defined for " + aliasSelectorExpression );
        }

        return result;
    }

    /**
     * Setting this interval will instruct the resolver to reload the Properties object from the InputStream before
     * resolving the alias, if the specified number of seconds has elapsed since the last time the Properties object
     * was loaded. This can be useful to force the resolver to pick up changes made to the input file while the
     * application is running. Setting this value to 0 will prevent it from reloading the Properties object
     *
     * @param reloadIntervalSeconds interval in seconds, 0 is default
     */
    public void setReloadIntervalSeconds( int reloadIntervalSeconds )
    {
        _reloadIntervalSeconds = reloadIntervalSeconds;
    }

    /**
     * Defines the InputStream, such as a FileInputStream, that provides access to the Properties object
     *
     * @param propertyFile the input stream
     */
    public void setPropertyFile( InputStream propertyFile )
    {
        _propertyFile = propertyFile;
    }
}
TOP

Related Classes of org.skyscreamer.yoga.selector.parser.DynamicPropertyResolver

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.