package org.freecode.irc.votebot.modules.admin;
import org.freecode.irc.Privmsg;
import org.freecode.irc.votebot.PollExpiryAnnouncer;
import org.freecode.irc.votebot.api.AdminModule;
import org.freecode.irc.votebot.dao.PollDAO;
import org.freecode.irc.votebot.entity.Poll;
import java.sql.SQLException;
import java.util.concurrent.Future;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
public class OpenClosePollModule extends AdminModule {
private PollDAO pollDAO;
@Override
protected Right[] getRights() {
return new Right[]{Right.AOP, Right.SOP, Right.FOUNDER};
}
@Override
public void processMessage(Privmsg privmsg) {
String[] parts = privmsg.getMessage().split(" ", 2);
int id = Integer.parseInt(parts[1]);
boolean state = false;
String action = "opened";
if (parts[0].charAt(1) == 'c') {
state = true;
action = "closed";
}
try {
if (pollDAO.setStatusOfPoll(id, state) > 0) {
privmsg.send("Poll #" + id + " " + action + ".");
if (action.equalsIgnoreCase("closed")) {
Future future = getFvb().pollFutures.get(id);
if (future != null) {
future.cancel(true);
}
} else if (action.equalsIgnoreCase("opened")) {
Future future = getFvb().pollFutures.get(id);
if (future != null) {
future.cancel(true);
}
Poll poll = pollDAO.getPoll(id);
if (poll.getExpiry() > System.currentTimeMillis()) {
PollExpiryAnnouncer announcer = new PollExpiryAnnouncer(poll.getExpiry(), poll.getId(), getFvb());
ScheduledFuture f = getFvb().pollExecutor.scheduleAtFixedRate(announcer, 5000L, 500L, TimeUnit.MILLISECONDS);
getFvb().pollFutures.put(id, f);
announcer.setFuture(f);
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public String getName() {
return "(open|close)poll";
}
@Override
protected String getParameterRegex() {
return "\\d+";
}
public void setPollDAO(PollDAO pollDAO) {
this.pollDAO = pollDAO;
}
}