Skip to content

Commit

Permalink
Update Queue command to 0.9, should fix #350
Browse files Browse the repository at this point in the history
  • Loading branch information
Morphan1 committed Aug 15, 2013
1 parent f38d68d commit 64eb3ff
Showing 1 changed file with 23 additions and 50 deletions.
@@ -1,8 +1,5 @@
package net.aufdemrand.denizen.scripts.commands.core;

import java.util.ArrayList;
import java.util.List;

import net.aufdemrand.denizen.exceptions.CommandExecutionException;
import net.aufdemrand.denizen.exceptions.InvalidArgumentsException;
import net.aufdemrand.denizen.scripts.ScriptEntry;
Expand All @@ -21,90 +18,66 @@ private enum Action { CLEAR, SET, DELAY, PAUSE, RESUME }
@Override
public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException {

Action action = null;
Duration delay = null;

List<ScriptQueue> queues = new ArrayList<ScriptQueue>();

// Use current queue if none specified.
queues.add(scriptEntry.getResidingQueue());

for (String arg : scriptEntry.getArguments()) {

if (aH.matchesArg("CLEAR, SET, PAUSE, RESUME", arg))
action = Action.valueOf(aH.getStringFrom(arg).toUpperCase());
for (aH.Argument arg : aH.interpret(scriptEntry.getArguments())) {

else if (aH.matchesValueArg("DELAY", arg, aH.ArgumentType.Duration)) {
action = Action.DELAY;
delay = aH.getDurationFrom(arg);
if (!scriptEntry.hasObject("action")
&& arg.matchesEnum(Action.values())) {
scriptEntry.addObject("action", Action.valueOf(arg.getValue().toUpperCase()));
if (scriptEntry.getObject("action") == Action.DELAY
&& arg.matchesArgumentType(Duration.class))
scriptEntry.addObject("delay", arg.asType(Duration.class));
}

// queue: argument should be optional in this command
else {
queues.clear();
for (String queueName : aH.getListFrom(arg)) {
try {
queues.add(ScriptQueue._getExistingQueue(queueName));
} catch (Exception e) {
// must be null, don't add
}
}

}
else if (ScriptQueue._getExistingQueue(arg.getValue()) != null)
scriptEntry.addObject("queue", ScriptQueue._getExistingQueue(arg.getValue()));

}

// If no queues have been added, assume 'residing queue'
if (queues.isEmpty()) queues.add(scriptEntry.getResidingQueue());
scriptEntry.defaultObject("queue", scriptEntry.getResidingQueue());

// Check required args
if (action == null)
if (!scriptEntry.hasObject("action"))
throw new InvalidArgumentsException("Must specify an action. Valid: CLEAR, SET, DELAY, PAUSE, RESUME");

if (action == Action.DELAY && delay == null)
if (scriptEntry.getObject("action") == Action.DELAY && !scriptEntry.hasObject("delay"))
throw new InvalidArgumentsException("Must specify a delay.");

// Stash args in ScriptEntry for use in execute()
scriptEntry.addObject("queues", queues)
.addObject("action", action)
.addObject("delay", delay);

}

@SuppressWarnings({ "incomplete-switch", "unchecked" })
@SuppressWarnings("incomplete-switch")
@Override
public void execute(ScriptEntry scriptEntry) throws CommandExecutionException {

List<ScriptQueue> queues = (List<ScriptQueue>) scriptEntry.getObject("queues");
ScriptQueue queue = (ScriptQueue) scriptEntry.getObject("queue");
Action action = (Action) scriptEntry.getObject("action");
Duration delay = (Duration) scriptEntry.getObject("duration");
Duration delay = (Duration) scriptEntry.getObject("delay");

// Debugger
dB.report(getName(), aH.debugObj("Queues", queues.toString())
dB.report(getName(), aH.debugObj("Queue", queue.toString())
+ aH.debugObj("Action", action.toString())
+ (action != null && action == Action.DELAY ? delay.debug() : ""));

switch (action) {

case CLEAR:
for (ScriptQueue queue : queues)
queue.clear();
queue.clear();
return;

case PAUSE:
for (ScriptQueue queue : queues)
if (queue instanceof TimedQueue)
((TimedQueue) queue).setPaused(true);
return;

case RESUME:
for (ScriptQueue queue : queues)
if (queue instanceof TimedQueue)
((TimedQueue) queue).setPaused(false);
if (queue instanceof TimedQueue)
((TimedQueue) queue).setPaused(false);
return;

case DELAY:
for (ScriptQueue queue : queues)
if (queue instanceof TimedQueue)
((TimedQueue) queue).delayFor(delay);
if (queue instanceof TimedQueue)
((TimedQueue) queue).delayFor(delay);
return;

}
Expand Down

0 comments on commit 64eb3ff

Please sign in to comment.