package commands;
import java.util.Date;
import polly.reminds.MSG;
import polly.reminds.MyPlugin;
import core.RemindManager;
import de.skuzzle.polly.sdk.DelayedCommand;
import de.skuzzle.polly.sdk.MyPolly;
import de.skuzzle.polly.sdk.Parameter;
import de.skuzzle.polly.sdk.Signature;
import de.skuzzle.polly.sdk.Types;
import de.skuzzle.polly.sdk.User;
import de.skuzzle.polly.sdk.Types.StringType;
import de.skuzzle.polly.sdk.exceptions.CommandException;
import de.skuzzle.polly.sdk.exceptions.DatabaseException;
import de.skuzzle.polly.sdk.exceptions.DuplicatedSignatureException;
import de.skuzzle.polly.sdk.exceptions.InsufficientRightsException;
import de.skuzzle.polly.sdk.time.Time;
import entities.RemindEntity;
public class MailRemindCommand extends DelayedCommand {
private RemindManager remindManager;
public MailRemindCommand(MyPolly polly, RemindManager manager)
throws DuplicatedSignatureException {
super(polly, "mremind", 30000); //$NON-NLS-1$
this.remindManager = manager;
this.createSignature(MSG.mremindSig0Desc,
MyPlugin.MAIL_REMIND_PERMISSION,
new Parameter(MSG.mremindSig0User, Types.USER),
new Parameter(MSG.mremindSig0Date, Types.DATE),
new Parameter(MSG.mremindSig0Message, Types.STRING));
this.createSignature(MSG.mremindSig1Desc,
MyPlugin.MAIL_REMIND_PERMISSION,
new Parameter(MSG.mremindSig1Date, Types.DATE),
new Parameter(MSG.mremindSig1Message, Types.STRING));
this.createSignature(MSG.mremindSig2Desc,
MyPlugin.MAIL_REMIND_PERMISSION,
new Parameter(MSG.mremindSig2Date, Types.DATE));
this.setHelpText(MSG.mremindHelp);
this.setRegisteredOnly();
}
@Override
protected boolean executeOnBoth(User executer, String channel, Signature signature)
throws CommandException, InsufficientRightsException {
User user = null;
Date dueDate = null;
String message = ""; //$NON-NLS-1$
if (this.match(signature, 0)) {
user = this.getMyPolly().users().getUser(signature.getStringValue(0));
dueDate = signature.getDateValue(1);
message = signature.getStringValue(2);
} else if (this.match(signature, 1)) {
user = executer;
dueDate = signature.getDateValue(0);
message = signature.getStringValue(1);
} else if (this.match(signature, 2)) {
user = executer;
dueDate = signature.getDateValue(0);
message = ((StringType) user.getAttribute(MyPlugin.DEFAULT_MSG)).getValue();
}
if (user == null) {
this.reply(channel,
MSG.bind(MSG.mremindUnknownUser, signature.getStringValue(0)));
return false;
}
RemindEntity re = new RemindEntity(message, executer.getName(),
user.getName(), channel, dueDate, false, true, Time.currentTime());
try {
this.remindManager.addRemind(executer, re, true);
this.reply(channel, MSG.bind(MSG.mremindSuccess, user.getName(), re.getId()));
} catch (DatabaseException e) {
throw new CommandException(e);
}
return false;
}
}