package core; import java.util.Date; import java.util.TimerTask; import de.skuzzle.polly.sdk.Disposable; import de.skuzzle.polly.sdk.User; import de.skuzzle.polly.sdk.eventlistener.IrcUser; import de.skuzzle.polly.sdk.exceptions.CommandException; import de.skuzzle.polly.sdk.exceptions.DatabaseException; import de.skuzzle.polly.sdk.exceptions.EMailException; import entities.RemindEntity; public interface RemindManager extends Disposable { public static class RemindTask extends TimerTask { private RemindManager remindManager; private RemindEntity remind; public RemindTask(RemindManager remindManager, RemindEntity remind) { this.remindManager = remindManager; this.remind = remind; } @Override public void run() { try { this.remindManager.deliverRemind(this.remind, true); } catch (Exception e) { // todo exception handling e.printStackTrace(); } } } public static class SleepTask extends TimerTask { private String forUser; private RemindManager remindManager; public SleepTask(RemindManager remindManager, String forUser) { this.remindManager = remindManager; this.forUser = forUser; } @Override public void run() { this.remindManager.cancelSleep(this.forUser); } } public abstract RemindDBWrapper getDatabaseWrapper(); public abstract void addRemind(User executer, RemindEntity remind, boolean schedule) throws DatabaseException; public abstract void deleteRemind(int id) throws DatabaseException; public abstract void deleteRemind(RemindEntity remind) throws DatabaseException; public abstract void deleteRemind(User executor, int id) throws CommandException, DatabaseException; public abstract void deleteRemind(User executor) throws DatabaseException; public abstract void deliverRemind(RemindEntity remind, boolean ignoreIdleStatus) throws DatabaseException, EMailException; public abstract void deliverLater(RemindEntity remind, User forUser, boolean wasIdle, boolean online) throws DatabaseException, EMailException; public abstract void deliverNowIrc(RemindEntity remind, User forUser, boolean online); public abstract void deliverNowMail(RemindEntity remind, User forUser, boolean wasIdle) throws DatabaseException, EMailException; public abstract void scheduleRemind(RemindEntity remind); public abstract void scheduleRemind(RemindEntity remind, Date dueDate); public abstract void cancelScheduledRemind(RemindEntity remind); public abstract void cancelScheduledRemind(int id); public abstract void putToSleep(RemindEntity remind, User forUser); public abstract RemindEntity cancelSleep(RemindEntity remind); public abstract RemindEntity cancelSleep(String forUser); public abstract RemindEntity snooze(User executor) throws DatabaseException, CommandException; public abstract RemindEntity snooze(User executor, Date dueDate) throws CommandException, DatabaseException; public abstract RemindEntity toggleIsMail(User executor, int id) throws DatabaseException, CommandException; public abstract User getUser(String nickName); public abstract RemindFormatter getFormat(User user); public abstract boolean isIdle(User user); public abstract boolean isOnActionAvailable(String forUser); public abstract RemindEntity modifyRemind(User executor, int id, final Date dueDate, final String msg) throws CommandException, DatabaseException; public abstract boolean canEdit(User user, RemindEntity remind); public abstract void checkRemind(User user, RemindEntity remind, int id) throws CommandException; public abstract void traceNickChange(IrcUser oldUser, IrcUser newUser); public abstract void rescheduleAll(); public abstract boolean isStale(String forUser); RemindEntity getLastRemind(User user); public abstract RemindEntity getSnoozabledRemind(String userName); }