package org.hypergraphdb.query;
import java.util.regex.Pattern;
import org.hypergraphdb.util.HGUtils;
/**
* Base class for matching string values using a regular expression.
*
* @author Niels Beekman
*/
public abstract class AtomRegExPredicate implements HGQueryCondition, HGAtomPredicate
{
private Pattern pattern;
public AtomRegExPredicate()
{
}
public AtomRegExPredicate(Pattern pattern)
{
this.pattern = pattern;
}
public Pattern getPattern()
{
return pattern;
}
public void setPattern(Pattern pattern)
{
this.pattern = pattern;
}
protected boolean satisfies(Object value)
{
if (pattern == null)
throw new IllegalStateException("No regular expression pattern provided");
if (value == null)
return false;
return pattern.matcher(value.toString()).matches();
}
public int hashCode()
{
if (pattern == null)
return 0;
return HGUtils.hashThem(pattern.pattern(), pattern.flags());
}
public boolean equals(Object x)
{
if (! (x instanceof AtomRegExPredicate))
return false;
else
{
AtomRegExPredicate c = (AtomRegExPredicate)x;
if (pattern == c.pattern)
return true;
if (pattern == null)
return false;
if (c.pattern == null)
return false;
return pattern.pattern().equals(c.pattern.pattern()) && pattern.flags() == c.pattern.flags();
}
}
}