Added onCall interface, InterruptEvent, and a relevance measurement
This commit is contained in:
parent
6a1a9ecdbb
commit
42184c47f7
@ -0,0 +1,52 @@
|
||||
package envoy.client.data.commands;
|
||||
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import envoy.client.event.InterruptEvent;
|
||||
import envoy.event.EventBus;
|
||||
|
||||
/**
|
||||
* This is a Envoy-specific subclass that allows
|
||||
*
|
||||
* Project: <strong>envoy-client</strong><br>
|
||||
* File: <strong>InterruptingSystemCommand.java</strong><br>
|
||||
* Created: <strong>23.07.2020</strong><br>
|
||||
*
|
||||
* @author Leon Hofmeister
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
public class InterruptingSystemCommand extends SystemCommand {
|
||||
|
||||
private static final EventBus eventBus = EventBus.getInstance();
|
||||
|
||||
/**
|
||||
* The reason why an {@link InterruptEvent} will be dispatched from this class.
|
||||
*/
|
||||
public static final String interruptionReason = "command executed";
|
||||
|
||||
/**
|
||||
* Constructs a new {@code SystemCommand}.
|
||||
*
|
||||
* @param action the action that should be performed
|
||||
* @param numberOfArguments the amount of arguments that need to be parsed for
|
||||
* the underlying function
|
||||
* @param description the description of this {@code SystemCommand}
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
public InterruptingSystemCommand(Function<String[], Void> action, int numberOfArguments, String description) {
|
||||
super(action, numberOfArguments, description);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCall() {
|
||||
super.onCall();
|
||||
eventBus.dispatch(new InterruptEvent(interruptionReason));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCall(Supplier<Void> consumer) {
|
||||
super.onCall(consumer);
|
||||
eventBus.dispatch(new InterruptEvent(interruptionReason));
|
||||
}
|
||||
}
|
37
client/src/main/java/envoy/client/data/commands/OnCall.java
Normal file
37
client/src/main/java/envoy/client/data/commands/OnCall.java
Normal file
@ -0,0 +1,37 @@
|
||||
package envoy.client.data.commands;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* This interface defines an action that should be performed when a system
|
||||
* command gets called.
|
||||
* <p>
|
||||
* Project: <strong>envoy-client</strong><br>
|
||||
* File: <strong>OnCall.java</strong><br>
|
||||
* Created: <strong>23.07.2020</strong><br>
|
||||
*
|
||||
* @author Leon Hofmeister
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
public interface OnCall {
|
||||
|
||||
/**
|
||||
* Performs class specific actions when a {@link SystemCommand} has been called.
|
||||
*
|
||||
* The action that should be performed when this {@link SystemCommand} has been
|
||||
* called.
|
||||
*
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
void onCall();
|
||||
|
||||
/**
|
||||
* Performs actions that can only be performed by classes that are not
|
||||
* {@link SystemCommand}s when a SystemCommand has been called.
|
||||
*
|
||||
* @param consumer the action to perform when this {@link SystemCommand} has
|
||||
* been called
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
void onCall(Supplier<Void> consumer);
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
package envoy.client.data.commands;
|
||||
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* This class is the base class of all {@code SystemCommands} and contains an
|
||||
@ -20,7 +21,7 @@ import java.util.function.Function;
|
||||
* @author Leon Hofmeister
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
public final class SystemCommand {
|
||||
public class SystemCommand implements OnCall {
|
||||
|
||||
/**
|
||||
* This variable stores the amount of arguments that need to be parsed for the
|
||||
@ -39,8 +40,10 @@ public final class SystemCommand {
|
||||
|
||||
protected final String description;
|
||||
|
||||
protected int relevance = 0;
|
||||
|
||||
/**
|
||||
* Constructs a new {@code NoArgSystemCommand} that takes no arguments.
|
||||
* Constructs a new {@code SystemCommand}.
|
||||
*
|
||||
* @param action the action that should be performed
|
||||
* @param numberOfArguments the amount of arguments that need to be parsed for
|
||||
@ -72,4 +75,25 @@ public final class SystemCommand {
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
public String getDescription() { return description; }
|
||||
|
||||
/**
|
||||
* @return the relevance
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
public int getRelevance() { return relevance; }
|
||||
|
||||
/**
|
||||
* @param relevance the relevance to set
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
public void setRelevance(int relevance) { this.relevance = relevance; }
|
||||
|
||||
@Override
|
||||
public void onCall() { relevance++; }
|
||||
|
||||
@Override
|
||||
public void onCall(Supplier<Void> consumer) {
|
||||
onCall();
|
||||
consumer.get();
|
||||
}
|
||||
}
|
||||
|
@ -265,6 +265,7 @@ public class SystemCommandsMap {
|
||||
try {
|
||||
systemCommand.getAction().apply(arguments);
|
||||
commandExecuted = true;
|
||||
systemCommand.onCall();
|
||||
} catch (final Exception e) {
|
||||
logger.log(Level.WARNING, "The system command " + getCommand(input) + " threw an exception: ", e);
|
||||
}
|
||||
|
28
client/src/main/java/envoy/client/event/InterruptEvent.java
Normal file
28
client/src/main/java/envoy/client/event/InterruptEvent.java
Normal file
@ -0,0 +1,28 @@
|
||||
package envoy.client.event;
|
||||
|
||||
import envoy.event.Event;
|
||||
|
||||
/**
|
||||
* This event serves the purpose of interrupting something so that it will not
|
||||
* be finished.
|
||||
* <p>
|
||||
* Project: <strong>envoy-client</strong><br>
|
||||
* File: <strong>InterruptEvent.java</strong><br>
|
||||
* Created: <strong>23.07.2020</strong><br>
|
||||
*
|
||||
* @author Leon Hofmeister
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
public class InterruptEvent extends Event<String> {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* Creates a new {@link InterruptEvent}.
|
||||
*
|
||||
* @param reason the reason why this event exists -> allows finer sieving
|
||||
* @since Envoy Client v0.2-beta
|
||||
*/
|
||||
public InterruptEvent(String reason) { super(reason); }
|
||||
|
||||
}
|
Reference in New Issue
Block a user