package pl.shockah.shocky.lines; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Date; import org.pircbotx.ShockyBot; import org.pircbotx.hooks.events.ModeEvent; import pl.shockah.BinBuffer; import pl.shockah.StringTools; import pl.shockah.shocky.sql.QueryInsert; import pl.shockah.shocky.sql.Wildcard; public class LineMode extends LineWithUsers { public final String text; public LineMode(ResultSet result) throws SQLException { super(result,result.getString("users").split(";")); this.text = result.getString("text"); } public LineMode(String channel, String sender, String text) {this(new Date(),channel,sender,text);} public LineMode(long ms, String channel, String sender, String text) {this(new Date(ms),channel,sender,text);} public LineMode(Date time, String channel, String users, String text) { super(time,channel,users.split(";")); this.text = text; } public LineMode(ModeEvent<ShockyBot> event) { this(new Date(),event.getChannel().getName(),getUsers(event),event.getMode()); } private static String getUsers(ModeEvent<ShockyBot> event) { String[] tokens = event.getMode().split("\\s"); String[] users = new String[tokens.length]; int n = 0; users[n++] = event.getUser().getNick(); char[] mode = tokens[0].toCharArray(); int token = 1; for (int i = 0; i < mode.length; i++) { char chr = mode[i]; switch (chr) { case '-': case '+': break; case 'o': case 'h': case 'v': users[n++] = tokens[token++]; break; default: token++; break; } } return StringTools.implode(users,";"); } public LineMode(BinBuffer buffer) { super(buffer); this.text = buffer.readUString(); } public void save(BinBuffer buffer) { super.save(buffer); buffer.writeUString(text); } public String getMessage() { return "* "+users[0]+" sets mode: "+text; } @Override public void fillQuery(QueryInsert q, boolean prepare) { super.fillQuery(q, prepare); q.add("text",prepare?Wildcard.blank:text); } public int fillQuery(PreparedStatement p, int arg) throws SQLException { arg = super.fillQuery(p,arg); p.setString(arg++, text); return arg; } }