package commands; import java.util.Date; import java.util.List; import org.apache.log4j.Logger; import polly.reminds.MSG; import polly.reminds.MyPlugin; import core.RemindManager; 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.Types.StringType; import de.skuzzle.polly.sdk.User; import de.skuzzle.polly.sdk.Types.ListType; import de.skuzzle.polly.sdk.Types.TimespanType; import de.skuzzle.polly.sdk.Types.UserType; import de.skuzzle.polly.sdk.exceptions.CommandException; import de.skuzzle.polly.sdk.exceptions.DuplicatedSignatureException; import de.skuzzle.polly.sdk.exceptions.UnknownAttributeException; import de.skuzzle.polly.sdk.time.Time; import entities.RemindEntity; public class RemindCommand extends AbstractRemindCommand { protected Logger logger = Logger.getLogger(RemindCommand.class.getName()); public RemindCommand(MyPolly myPolly, RemindManager remindManager) throws DuplicatedSignatureException { super(myPolly, remindManager, "remind"); //$NON-NLS-1$ this.createSignature(MSG.remindCmdSig0Desc, MyPlugin.REMIND_PERMISSION, new Parameter(MSG.remindCmdSig0User, Types.USER), new Parameter(MSG.remindCmdSig0Channel, Types.CHANNEL), new Parameter(MSG.remindCmdSig0Time, Types.DATE), new Parameter(MSG.remindCmdSig0Message, Types.STRING)); this.createSignature(MSG.remindCmdSig1Desc, MyPlugin.REMIND_PERMISSION, new Parameter(MSG.remindCmdSig1Users, new ListType(Types.USER)), new Parameter(MSG.remindCmdSig1Channel, Types.CHANNEL), new Parameter(MSG.remindCmdSig1Time, Types.DATE), new Parameter(MSG.remindCmdSig1Message, Types.STRING)); this.createSignature(MSG.remindCmdSig2Desc, MyPlugin.REMIND_PERMISSION, new Parameter(MSG.remindCmdSig2Time, Types.DATE), new Parameter(MSG.remindCmdSig2Message, Types.STRING)); this.createSignature(MSG.remindCmdSig3Desc, MyPlugin.REMIND_PERMISSION, new Parameter(MSG.remindCmdSig3User, Types.USER), new Parameter(MSG.remindCmdSig3Time, Types.DATE), new Parameter(MSG.remindCmdSig3Message, Types.STRING)); this.createSignature(MSG.remindCmdSig4Desc, MyPlugin.REMIND_PERMISSION, new Parameter(MSG.remindCmdSig4Time, Types.DATE)); this.createSignature(MSG.remindCmdSig5Desc); this.setRegisteredOnly(); this.setHelpText(MSG.remindCmdHelp); } @Override protected boolean executeOnBoth(User executer, String channel, Signature signature) throws CommandException { if (this.match(signature, 0)) { String location = signature.getStringValue(1); Date dueDate = signature.getDateValue(2); String msg = signature.getStringValue(3); String fromUser = executer.getCurrentNickName(); String forUser = signature.getStringValue(0); RemindEntity remind = new RemindEntity(msg, fromUser, forUser, location, dueDate, Time.currentTime()); this.addRemind(executer, remind, true); this.reply(channel, FORMATTER.format(remind, this.getMyPolly().formatting())); } else if (this.match(signature, 1)) { String location = signature.getStringValue(1); Date dueDate = signature.getDateValue(2); String msg = signature.getStringValue(3); String fromUser = executer.getCurrentNickName(); List<UserType> users = signature.getListValue(UserType.class, 0); for (UserType ut : users) { RemindEntity remind = new RemindEntity(msg, fromUser, ut.getValue(), location, dueDate, Time.currentTime()); this.addRemind(executer, remind, true); } ListType tmp = (ListType) signature.getValue(0); this.reply(channel, MSG.bind(MSG.remindCmdMultipleUsersSuccess, tmp.valueString(this.getMyPolly().formatting()))); } else if (this.match(signature, 2)) { Date dueDate = signature.getDateValue(0); String msg = signature.getStringValue(1); RemindEntity remind = new RemindEntity(msg, executer.getCurrentNickName(), executer.getCurrentNickName(), channel, dueDate, Time.currentTime()); this.addRemind(executer, remind, true); this.reply(channel, FORMATTER.format(remind, this.getMyPolly().formatting())); } else if (this.match(signature, 3)) { /* * ISSUE: 0000021 * This signatures allows to create reminds that are delivered via query */ String forUser = signature.getStringValue(0); Date dueDate = signature.getDateValue(1); String msg = signature.getStringValue(2); String fromUser = executer.getCurrentNickName(); RemindEntity remind = new RemindEntity(msg, fromUser, forUser, forUser, dueDate, Time.currentTime()); this.addRemind(executer, remind, true); this.reply(channel, FORMATTER.format(remind, this.getMyPolly().formatting())); } else if (this.match(signature, 4)){ Date dueDate = signature.getDateValue(0); final String msg; try { msg = ((StringType) executer.getAttribute(MyPlugin.DEFAULT_MSG)).getValue(); } catch (UnknownAttributeException e) { throw new CommandException(e); } RemindEntity remind = new RemindEntity(msg, executer.getCurrentNickName(), executer.getCurrentNickName(), channel, dueDate, Time.currentTime()); this.addRemind(executer, remind, true); this.reply(channel, FORMATTER.format(remind, this.getMyPolly().formatting())); } else if (this.match(signature, 5)) { final String msg; long millis = Time.currentTimeMillis(); try { msg = ((StringType) executer.getAttribute(MyPlugin.DEFAULT_MSG)).getValue(); final TimespanType tst = (TimespanType) executer.getAttribute( MyPlugin.DEFAULT_REMIND_TIME); millis += tst.getSpan() * 1000; } catch (UnknownAttributeException e) { throw new CommandException(e); } Date dueDate = new Date(millis); RemindEntity remind = new RemindEntity(msg, executer.getCurrentNickName(), executer.getCurrentNickName(), channel, dueDate, Time.currentTime()); this.addRemind(executer, remind, true); this.reply(channel, FORMATTER.format(remind, this.getMyPolly().formatting())); } return false; } }