diff options
author | Dico200 <dico.karssiens@gmail.com> | 2018-07-25 01:53:23 +0100 |
---|---|---|
committer | Dico200 <dico.karssiens@gmail.com> | 2018-07-25 01:53:23 +0100 |
commit | 44587e49ff1840219d9bc44844d4a3a6cd8ac5de (patch) | |
tree | 276ae9625795e9d79fc7db8592dbcb3a1af60928 /dicore3/command/src/main/java/io/dico/dicore/command/ExtendedCommand.java | |
parent | 5e168847c2624b767deb9da310ecfdf169e0f43c (diff) |
Add dicore3-command
Diffstat (limited to 'dicore3/command/src/main/java/io/dico/dicore/command/ExtendedCommand.java')
-rw-r--r-- | dicore3/command/src/main/java/io/dico/dicore/command/ExtendedCommand.java | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/ExtendedCommand.java b/dicore3/command/src/main/java/io/dico/dicore/command/ExtendedCommand.java new file mode 100644 index 0000000..602760c --- /dev/null +++ b/dicore3/command/src/main/java/io/dico/dicore/command/ExtendedCommand.java @@ -0,0 +1,52 @@ +package io.dico.dicore.command; + +import io.dico.dicore.command.parameter.IArgumentPreProcessor; +import io.dico.dicore.command.parameter.Parameter; + +@SuppressWarnings("unchecked") +public abstract class ExtendedCommand<T extends ExtendedCommand<T>> extends Command { + protected final boolean modifiable; + + public ExtendedCommand() { + this(true); + } + + public ExtendedCommand(boolean modifiable) { + this.modifiable = modifiable; + } + + protected T newModifiableInstance() { + return (T) this; + } + + @Override + public T addParameter(Parameter<?, ?> parameter) { + return modifiable ? (T) super.addParameter(parameter) : newModifiableInstance().addParameter(parameter); + } + + @Override + public T requiredParameters(int requiredParameters) { + return modifiable ? (T) super.requiredParameters(requiredParameters) : newModifiableInstance().requiredParameters(requiredParameters); + } + + @Override + public T repeatFinalParameter() { + return modifiable ? (T) super.repeatFinalParameter() : newModifiableInstance().repeatFinalParameter(); + } + + @Override + public T setDescription(String... description) { + return modifiable ? (T) super.setDescription(description) : newModifiableInstance().setDescription(description); + } + + @Override + public T setShortDescription(String shortDescription) { + return modifiable ? (T) super.setShortDescription(shortDescription) : newModifiableInstance().setShortDescription(shortDescription); + } + + @Override + public T preprocessArguments(IArgumentPreProcessor processor) { + return modifiable ? (T) super.preprocessArguments(processor) : newModifiableInstance().preprocessArguments(processor); + } + +} |