package util.comm;
import util.StringArray;
import util.Timer;
import java.util.ArrayList;
import java.util.Collections;
/**
* Created to cleanup the horrendous HashMap that was the commandMap in GUIMain.
*/
public class Command {
private Timer delayTimer;
private String trigger;
private StringArray contents;
private ArrayList<String> arguments;
public Command(String name, String... contents) {
arguments = new ArrayList<>();
this.contents = new StringArray(contents);
trigger = name;
delayTimer = new Timer(5000);
}
public String getTrigger() {
return trigger;
}
public ArrayList<String> getArguments() {
return arguments;
}
public boolean hasArguments() {
return !arguments.isEmpty();
}
public int countArguments() {
return arguments.size();
}
public void addArguments(String... argumentsToAdd) {
Collections.addAll(arguments, argumentsToAdd);
}
public StringArray buildMessage(StringArray source, String[] definedArguments) {
StringArray toReturn = new StringArray(source.data);
for (int messageIndex = 0; messageIndex < source.data.length; messageIndex++) {
String messagePart = toReturn.data[messageIndex];
for (int argIndex = 0; argIndex < definedArguments.length; argIndex++) {
//because arguments.get(i) will be replaced by definedArguments[i]
if (messagePart.contains(arguments.get(argIndex))) {
toReturn.data[messageIndex] = toReturn.data[messageIndex].replaceAll(arguments.get(argIndex),
definedArguments[argIndex]);
}
}
}
return toReturn;
}
public String printCommand() {
StringBuilder sb = new StringBuilder();
sb.append("!");
sb.append(trigger);
if (hasArguments()) {
for (String arg : arguments) {
sb.append(" ");
sb.append(arg);
}
}
return sb.toString();
}
public StringArray getMessage() {
return contents;
}
public Timer getDelayTimer() {
return delayTimer;
}
@Override
public boolean equals(Object other) {
return other instanceof Command && ((Command) other).contents.equals(contents) &&
((Command) other).trigger.equals(trigger);
}
}