feat: added static methods to JSON for configuration deserialization

This commit is contained in:
Yannik Bretschneider 2021-06-04 18:44:54 +02:00
parent 672e5e7727
commit d74cd114cc
2 changed files with 125 additions and 0 deletions

View File

@ -4,9 +4,13 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.InjectableValues;
import com.fasterxml.jackson.databind.ObjectMapper;
import uulm.teamname.marvelous.gamelibrary.config.CharacterConfig;
import uulm.teamname.marvelous.gamelibrary.config.PartyConfig;
import uulm.teamname.marvelous.gamelibrary.config.ScenarioConfig;
import uulm.teamname.marvelous.gamelibrary.messages.BasicMessage;
import uulm.teamname.marvelous.gamelibrary.messages.server.EventMessage;
import java.io.File;
import java.io.IOException;
import java.util.Optional;
/**
@ -14,6 +18,68 @@ import java.util.Optional;
*/
public class JSON {
private static final ObjectMapper staticMapper = new ObjectMapper();
public static Optional<CharacterConfig> parseCharacterConfig (String jsonRepresentingConfig) {
Optional<CharacterConfig> result;
try {
result = Optional.of(staticMapper.readValue(jsonRepresentingConfig, CharacterConfig.class));
} catch (JsonProcessingException e) {
result = Optional.empty();
}
return result;
}
public static Optional<CharacterConfig> parseCharacterConfig (File jsonRepresentingConfig) {
Optional<CharacterConfig> result;
try {
result = Optional.of(staticMapper.readValue(jsonRepresentingConfig, CharacterConfig.class));
} catch (IOException e) {
result = Optional.empty();
}
return result;
}
public static Optional<PartyConfig> parsePartyConfig (String jsonRepresentingConfig) {
Optional<PartyConfig> result;
try {
result = Optional.of(staticMapper.readValue(jsonRepresentingConfig, PartyConfig.class));
} catch (JsonProcessingException e) {
result = Optional.empty();
}
return result;
}
public static Optional<PartyConfig> parsePartyConfig (File jsonRepresentingConfig) {
Optional<PartyConfig> result;
try {
result = Optional.of(staticMapper.readValue(jsonRepresentingConfig, PartyConfig.class));
} catch (IOException e) {
result = Optional.empty();
}
return result;
}
public static Optional<ScenarioConfig> parseScenarioConfig (String jsonRepresentingConfig) {
Optional<ScenarioConfig> result;
try {
result = Optional.of(staticMapper.readValue(jsonRepresentingConfig, ScenarioConfig.class));
} catch (JsonProcessingException e) {
result = Optional.empty();
}
return result;
}
public static Optional<ScenarioConfig> parseScenarioConfig (File jsonRepresentingConfig) {
Optional<ScenarioConfig> result;
try {
result = Optional.of(staticMapper.readValue(jsonRepresentingConfig, ScenarioConfig.class));
} catch (IOException e) {
result = Optional.empty();
}
return result;
}
private final ObjectMapper mapper = new ObjectMapper();
public JSON (CharacterConfig config) {

View File

@ -56,6 +56,65 @@ class JSONTest {
// >>>>>>> Deserialization tests <<<<<<<
// =============================================================================
@Test
void scenarioConfigDeserializationTest() {
var jsonRepresentingConfig = """
{
"scenario":[
["GRASS", "GRASS", "GRASS", "GRASS", "GRASS"],
["GRASS", "GRASS", "GRASS", "GRASS", "GRASS"],
["GRASS", "GRASS", "ROCK", "GRASS", "GRASS"],
["GRASS", "GRASS", "ROCK", "GRASS", "GRASS"],
["GRASS", "GRASS", "ROCK", "ROCK", "GRASS"],
["GRASS", "GRASS", "ROCK", "GRASS", "GRASS"],
["GRASS", "GRASS", "ROCK", "GRASS", "GRASS"],
["GRASS", "GRASS", "ROCK", "GRASS", "GRASS"],
["GRASS", "GRASS", "ROCK", "GRASS", "GRASS"],
["GRASS", "GRASS", "ROCK", "GRASS", "GRASS"],
["GRASS", "GRASS", "ROCK", "GRASS", "GRASS"],
["GRASS", "GRASS", "ROCK", "GRASS", "GRASS"],
["GRASS", "GRASS", "ROCK", "GRASS", "GRASS"],
["GRASS", "GRASS", "ROCK", "GRASS", "GRASS"],
["GRASS", "GRASS", "ROCK", "GRASS", "GRASS"],
["ROCK", "GRASS", "ROCK", "GRASS", "GRASS"],
["ROCK", "GRASS", "ROCK", "ROCK", "GRASS"],
["ROCK", "ROCK", "ROCK", "ROCK", "GRASS"]
],
"author": "jakobmh",
"name": "avengerstower"
}
""";
var result = JSON.parseScenarioConfig(jsonRepresentingConfig).get();
var actual = new ScenarioConfig();
actual.scenario = new FieldType[][] {
{FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS},
{FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS, FieldType.GRASS},
{FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS},
{FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS},
{FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.ROCK, FieldType.GRASS},
{FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS},
{FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS},
{FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS},
{FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS},
{FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS},
{FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS},
{FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS},
{FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS},
{FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS},
{FieldType.GRASS, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS},
{FieldType.ROCK, FieldType.GRASS, FieldType.ROCK, FieldType.GRASS, FieldType.GRASS},
{FieldType.ROCK, FieldType.GRASS, FieldType.ROCK, FieldType.ROCK, FieldType.GRASS},
{FieldType.ROCK, FieldType.ROCK, FieldType.ROCK, FieldType.ROCK, FieldType.GRASS}
};
actual.author = "jakobmh";
actual.name = "avengerstower";
assertThat(result).isEqualTo(actual);
}
@Test
void characterSelectionDeserializationParseTest() throws JsonProcessingException {
var jsonRepresentingMessage = """