package pl.shockah.shocky.lines;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import pl.shockah.BinBuffer;
import pl.shockah.StringTools;
import pl.shockah.shocky.sql.QueryInsert;
import pl.shockah.shocky.sql.Wildcard;
public abstract class LineWithUsers extends Line {
public final String[] users;
public LineWithUsers(ResultSet result, String[] users) throws SQLException {
super(result);
this.users = users;
}
public LineWithUsers(String channel, String user) {this(new Date(),channel,new String[] {user});}
public LineWithUsers(long ms, String channel, String user) {this(new Date(ms),channel,new String[] {user});}
public LineWithUsers(Date time, String channel, String[] users) {
super(time,channel);
this.users = users;
}
public LineWithUsers(BinBuffer buffer) {
super(buffer);
int count = buffer.readByte();
this.users = new String[count];
for (int i = 0; i < count; i++)
this.users[i] = buffer.readUString();
}
public void save(BinBuffer buffer) {
super.save(buffer);
buffer.writeByte(users.length);
for (int i = 0; i < users.length; i++)
buffer.writeUString(users[i]);
}
public boolean containsUser(String user) {
if (user == null) return true;
boolean contains = false;
for (int i = 0; !contains && i < users.length; i++)
contains = users[i].equalsIgnoreCase(user);
return contains;
}
@Override
public void fillQuery(QueryInsert q, boolean prepare) {
super.fillQuery(q,prepare);
q.add("users",prepare?Wildcard.blank:StringTools.implode(users, ";"));
}
public int fillQuery(PreparedStatement p, int arg) throws SQLException {
arg = super.fillQuery(p,arg);
p.setString(arg++, StringTools.implode(users, ";"));
return arg;
}
}