package net.pterodactylus.rhynodge.states;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import net.pterodactylus.rhynodge.Reaction;
import net.pterodactylus.rhynodge.State;
+import net.pterodactylus.rhynodge.output.DefaultOutput;
+import net.pterodactylus.rhynodge.output.Output;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.google.common.escape.Escaper;
+import com.google.common.html.HtmlEscapers;
/**
* Abstract implementation of a {@link State} that knows about the basic
/** Whether the state was successfully retrieved. */
private final boolean success;
+ private final boolean empty;
/** The optional exception that occured while retrieving the state. */
private final Throwable exception;
* otherwise
*/
protected AbstractState(boolean success) {
- this(success, null);
+ this(success, true, null);
+ }
+
+ protected AbstractState(boolean success, boolean empty) {
+ this(success, empty, null);
}
/**
* The exception that occured while retrieving the state
*/
protected AbstractState(Throwable exception) {
- this(false, exception);
+ this(false, true, exception);
}
/**
* @param exception
* The exception that occured while retrieving the state
*/
- protected AbstractState(boolean success, Throwable exception) {
+ protected AbstractState(boolean success, boolean empty, Throwable exception) {
this.time = System.currentTimeMillis();
this.success = success;
+ this.empty = empty;
this.exception = exception;
}
return success;
}
+ @Override
+ public boolean isEmpty() {
+ return empty;
+ }
+
/**
* {@inheritDoc}
*/
return exception;
}
+ @Nonnull
+ @Override
+ public Output output(Reaction reaction) {
+ return new DefaultOutput(summary(reaction))
+ .addText("text/plain", plainText())
+ .addText("text/html", htmlText());
+ }
+
+ @Nonnull
+ protected String summary(Reaction reaction) {
+ return reaction.name();
+ }
+
+ @Nonnull
+ protected abstract String plainText();
+
+ @Nullable
+ protected String htmlText() {
+ //noinspection UnstableApiUsage
+ return "<div>" + htmlEscaper.escape(plainText()) + "</div>";
+ }
+
+ @SuppressWarnings("UnstableApiUsage")
+ private static final Escaper htmlEscaper = HtmlEscapers.htmlEscaper();
+
}