package com.revolsys.record.query;
import java.sql.PreparedStatement;
import com.revolsys.datatype.DataType;
import com.revolsys.record.schema.RecordStore;
public abstract class AbstractMultiCondition extends AbstractMultiQueryValue implements Condition {
private final String operator;
public AbstractMultiCondition(final String operator,
final Iterable<? extends Condition> conditions) {
super(conditions);
this.operator = operator;
}
public boolean addCondition(final Condition condition) {
if (condition == null) {
return false;
} else {
return addValue(condition);
}
}
public void addCondition(final String sql) {
final SqlCondition value = new SqlCondition(sql);
addCondition(value);
}
@Override
public void appendDefaultSql(final Query query, final RecordStore recordStore,
final StringBuilder buffer) {
buffer.append("(");
boolean first = true;
for (final QueryValue value : getQueryValues()) {
if (first) {
first = false;
} else {
buffer.append(" ");
buffer.append(this.operator);
buffer.append(" ");
}
if (value == null) {
buffer.append("NULL");
} else {
value.appendSql(query, recordStore, buffer);
}
}
buffer.append(")");
}
@Override
public int appendParameters(int index, final PreparedStatement statement) {
for (final QueryValue value : getQueryValues()) {
if (value != null) {
index = value.appendParameters(index, statement);
}
}
return index;
}
@Override
public AbstractMultiCondition clone() {
final AbstractMultiCondition clone = (AbstractMultiCondition)super.clone();
return clone;
}
@Override
public boolean equals(final Object obj) {
if (obj instanceof AbstractMultiCondition) {
final AbstractMultiCondition multiCondition = (AbstractMultiCondition)obj;
if (DataType.equal(getOperator(), multiCondition.getOperator())) {
return super.equals(multiCondition);
}
}
return false;
}
public String getOperator() {
return this.operator;
}
@Override
public String toString() {
final StringBuilder string = new StringBuilder();
boolean first = true;
for (final QueryValue value : getQueryValues()) {
if (first) {
first = false;
} else {
string.append(' ');
string.append(this.operator);
string.append(' ');
}
if (value instanceof Or && !(this instanceof Or)) {
string.append('(');
string.append(value);
string.append(')');
} else {
string.append(value);
}
}
return string.toString();
}
}