package org.codefu.log4j;

import org.apache.log4j.spi.*;
import org.apache.log4j.config.PropertySetterException;
import org.apache.oro.text.regex.*;

public class RegularExpressionMessageFilter extends Filter
{
	private final Perl5Matcher matcher = new Perl5Matcher ();
	
	private Pattern pattern = null;
	private boolean acceptOnMatch = true;

	public synchronized void setPattern (String patternString)
	   throws PropertySetterException
	{
		try
			{
				pattern = (new Perl5Compiler ()).compile (patternString);
			}
		catch (MalformedPatternException e)
			{
				throw new PropertySetterException (e);
			}
	}  /* setPattern */

	public synchronized String getPattern ()
	{
		return pattern.getPattern ();
	}  /* getPattern */

	public synchronized void setAcceptOnMatch (boolean acceptOnMatch)
	{
		this.acceptOnMatch = acceptOnMatch;
	}  /* setAcceptOnMatch */

	public synchronized boolean getAcceptOnMatch ()
	{
		return acceptOnMatch;
	}  /* getAcceptOnMatch */

	public synchronized int decide (LoggingEvent logEvent)
	{
		if ((pattern == null)
		    || !matcher.matches (logEvent.getMessage ().toString (), pattern))
			return NEUTRAL;
		else if (acceptOnMatch)
			return ACCEPT;
		return DENY;
	}  /* decide */
}  /* RegularExpressionMessageFilter */
