package com.w11k.lsql; import com.google.common.base.Joiner; import com.google.common.base.Strings; import com.google.common.collect.Lists; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.List; public class ListLiteralQueryParameter<T> implements LiteralQueryParameter { public static <A> ListLiteralQueryParameter<A> of(Iterable<A> values) { return new ListLiteralQueryParameter<A>(values); } public static <A> ListLiteralQueryParameter<A> of(A... values) { return new ListLiteralQueryParameter<A>(Lists.newArrayList(values)); } protected List<T> values; public ListLiteralQueryParameter(Iterable<T> values) { this.values = Lists.newCopyOnWriteArrayList(values); } @Override public String getSqlString() { if (getNumberOfQueryParameters() == 0) { return ""; } return Strings.repeat("?,", getNumberOfQueryParameters() - 1) + "?"; } @Override public int getNumberOfQueryParameters() { return this.values.size(); } @Override public void set(PreparedStatement ps, int preparedStatementIndex, int localIndex) throws SQLException { ps.setObject(preparedStatementIndex, this.values.get(localIndex)); } @Override public String toString() { return getClass().getSimpleName() + "[" + Joiner.on(",").join(values) + "]"; } }