141 lines
5.6 KiB
Java
141 lines
5.6 KiB
Java
package uulm.teamname.marvelous.gamelibrary.json;
|
|
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
import com.fasterxml.jackson.databind.InjectableValues;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import org.tinylog.Logger;
|
|
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;
|
|
|
|
/**
|
|
* Class that contains JSON encoding and decoding. It is initiated with the Character configuration.
|
|
*/
|
|
public class JSON {
|
|
|
|
// ===================>>>>>> STATIC <<<<<<======================
|
|
|
|
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) {
|
|
Logger.debug("JSON deserialization of CharacterConfig failed. Exception: {}", e.toString());
|
|
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) {
|
|
Logger.debug("JSON deserialization of CharacterConfig failed. Exception: {}", e.toString());
|
|
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) {
|
|
Logger.debug("JSON deserialization of PartyConfig failed. Exception: {}", e.toString());
|
|
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) {
|
|
Logger.debug("JSON deserialization of PartyConfig failed. Exception: {}", e.toString());
|
|
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) {
|
|
Logger.debug("JSON deserialization of ScenarioConfig failed. Exception: {}", e.toString());
|
|
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) {
|
|
Logger.debug("JSON deserialization of ScenarioConfig failed. Exception: {}", e.toString());
|
|
result = Optional.empty();
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// =================>>>>>> NON-STATIC <<<<<<====================
|
|
|
|
private final ObjectMapper mapper = new ObjectMapper();
|
|
|
|
public JSON (CharacterConfig config) {
|
|
setCharacterConfig(config);
|
|
}
|
|
|
|
/** Deserializes an incoming network message into a {@link EventMessage}.
|
|
* @param input The JSON to deserialize
|
|
* @return An {@link Optional} containing the parsed message (as {@link BasicMessage}, so typecasting is necessary)
|
|
* or an empty {@link Optional} if the deserialization failed
|
|
*/
|
|
public Optional<BasicMessage> parse(String input) {
|
|
try {
|
|
return Optional.of(mapper.readValue(input, BasicMessage.class));
|
|
} catch (JsonProcessingException e) {
|
|
Logger.debug("JSON deserialization of Message failed. Exception: {}",
|
|
e.toString());
|
|
return Optional.empty();
|
|
}
|
|
}
|
|
|
|
/** Serializes a {@link EventMessage} into a JSON string.
|
|
* @param input The message to serialize
|
|
* @return An {@link Optional}<{@link String}> of the message as JSON or
|
|
* an empty {@link Optional} if the serialization failed
|
|
*/
|
|
public Optional<String> stringify(BasicMessage input) {
|
|
try {
|
|
return Optional.of(mapper.writeValueAsString(input));
|
|
} catch (JsonProcessingException e) {
|
|
Logger.debug("JSON serialization of Message of type {} failed. Exception: {}",
|
|
input.messageType.toString(),
|
|
e.toString());
|
|
// e.printStackTrace();
|
|
return Optional.empty();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sets the {@link CharacterConfig} to be used during deserialization of Entities.
|
|
*/
|
|
public void setCharacterConfig(CharacterConfig config) {
|
|
this.mapper.setInjectableValues(new InjectableValues
|
|
.Std()
|
|
.addValue("CharacterConfig", config));
|
|
}
|
|
}
|