♻️ Move output generation to state
[rhynodge.git] / src / main / java / net / pterodactylus / rhynodge / states / OutputState.java
1 package net.pterodactylus.rhynodge.states;
2
3 import java.util.Optional;
4
5 import javax.annotation.Nonnull;
6 import javax.annotation.Nullable;
7
8 import net.pterodactylus.rhynodge.State;
9
10 import com.fasterxml.jackson.annotation.JsonProperty;
11
12 /**
13  * {@link State} implementation that can expose itself as plain text and/or
14  * HTML.
15  *
16  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
17  */
18 public class OutputState extends AbstractState {
19
20         private final Optional<String> plainTextOutput;
21         private final Optional<String> htmlOutput;
22
23         public OutputState() {
24                 this(Optional.<String>empty(), Optional.<String>empty());
25         }
26
27         public OutputState(Optional<String> plainTextOutput, Optional<String> htmlOutput) {
28                 this.plainTextOutput = plainTextOutput;
29                 this.htmlOutput = htmlOutput;
30         }
31
32         @Override
33         public boolean isEmpty() {
34                 return !plainTextOutput.isPresent() && !htmlOutput.isPresent();
35         }
36
37         @Nonnull
38         @Override
39         protected String plainText() {
40                 return plainTextOutput.orElse("");
41         }
42
43         @Nullable
44         @Override
45         protected String htmlText() {
46                 return htmlOutput.orElse(null);
47         }
48
49 }