/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2006.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.query.algebra;
/**
* Compares the string representation of a value expression to a pattern.
*/
public class Like extends UnaryValueOperator {
/*-----------*
* Variables *
*-----------*/
private String pattern;
private boolean caseSensitive;
/**
* Operational pattern, equal to pattern but converted to lower case when not
* case sensitive.
*/
private String opPattern;
/*--------------*
* Constructors *
*--------------*/
public Like() {
}
public Like(ValueExpr expr, String pattern, boolean caseSensitive) {
super(expr);
setPattern(pattern, caseSensitive);
}
/*---------*
* Methods *
*---------*/
public void setPattern(String pattern, boolean caseSensitive) {
assert pattern != null : "pattern must not be null";
this.pattern = pattern;
this.caseSensitive = caseSensitive;
opPattern = caseSensitive ? pattern : pattern.toLowerCase();
}
public String getPattern() {
return pattern;
}
public boolean isCaseSensitive() {
return caseSensitive;
}
public String getOpPattern() {
return opPattern;
}
public <X extends Exception> void visit(QueryModelVisitor<X> visitor)
throws X
{
visitor.meet(this);
}
@Override
public String getSignature()
{
StringBuilder sb = new StringBuilder(128);
sb.append(super.getSignature());
sb.append(" \"");
sb.append(pattern);
sb.append("\"");
if (caseSensitive) {
sb.append(" IGNORE CASE");
}
return sb.toString();
}
@Override
public Like clone() {
return (Like)super.clone();
}
}