package cassandra.cql;
import cassandra.CassandraSession;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class BatchStatement extends AbstractStatement<BatchStatement> implements Iterable<AbstractStatement<?>> {
public static enum Type {
LOGGED(0), UNLOGGED(1), COUNTER(2);
public final int value;
private Type(int value) {
this.value = value;
}
public static Type valueOf(int value) {
switch (value) {
case 0:
return LOGGED;
case 1:
return UNLOGGED;
case 2:
return COUNTER;
default:
return null;
}
}
}
private final List<AbstractStatement<?>> statements;
private Type type;
public BatchStatement(CassandraSession session) {
setSession(session);
statements = new ArrayList<AbstractStatement<?>>();
type = Type.LOGGED;
}
private BatchStatement(BatchStatement statement) {
super(statement);
statements = new ArrayList<AbstractStatement<?>>();
for (AbstractStatement<?> stmt : statement) {
statements.add(stmt.clone());
}
type = statement.type;
}
public Type getType() {
return type;
}
public BatchStatement setType(Type type) {
if (type == null) {
throw new NullPointerException("type");
}
this.type = type;
return this;
}
public BatchStatement add(AbstractStatement<?> statement) {
if (statement == null) {
throw new NullPointerException("statement");
}
if (statement instanceof BatchStatement) {
statements.addAll(((BatchStatement)statement).statements);
} else if (statement instanceof PreparedStatement) {
statements.add(statement.clone());
} else {
statements.add(statement);
}
return this;
}
@Override
public Iterator<AbstractStatement<?>> iterator() {
return statements.iterator();
}
public int size() {
return statements.size();
}
public boolean isEmpty() {
return statements.isEmpty();
}
public BatchStatement clear() {
statements.clear();
return this;
}
@Override
@SuppressWarnings("CloneDoesntCallSuperClone")
public BatchStatement clone() {
return new BatchStatement(this);
}
}