Move charset loading to fix issue with static fields
This commit is contained in:
@@ -6,53 +6,26 @@ import constants.string.CharsetConstants;
|
|||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
public class YamlConfig {
|
public class YamlConfig {
|
||||||
private static final String CONFIG_FILE_NAME = "config.yaml";
|
public static final String CONFIG_FILE_NAME = "config.yaml";
|
||||||
public static final YamlConfig config = loadConfig(CONFIG_FILE_NAME);
|
public static final YamlConfig config = loadConfig();
|
||||||
|
|
||||||
public List<WorldConfig> worlds;
|
public List<WorldConfig> worlds;
|
||||||
public ServerConfig server;
|
public ServerConfig server;
|
||||||
|
|
||||||
private static YamlConfig loadConfig(String fileName) {
|
private static YamlConfig loadConfig() {
|
||||||
try {
|
try {
|
||||||
YamlReader reader = new YamlReader(new FileReader(fileName, CharsetConstants.CHARSET));
|
YamlReader reader = new YamlReader(new FileReader(CONFIG_FILE_NAME, CharsetConstants.CHARSET));
|
||||||
YamlConfig config = reader.read(YamlConfig.class);
|
YamlConfig config = reader.read(YamlConfig.class);
|
||||||
reader.close();
|
reader.close();
|
||||||
return config;
|
return config;
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
throw new RuntimeException("Could not read config file " + YamlConfig.CONFIG_FILE_NAME + ": " + e.getMessage());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(getLoadConfigErrorMessage(e));
|
throw new RuntimeException("Could not successfully parse config file " + YamlConfig.CONFIG_FILE_NAME + ": " + e.getMessage());
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String getLoadConfigErrorMessage(IOException e) {
|
|
||||||
if (e instanceof FileNotFoundException) {
|
|
||||||
return "Could not read config file " + CONFIG_FILE_NAME + ": " + e.getMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
return "Could not successfully parse config file " + CONFIG_FILE_NAME + ": " + e.getMessage();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String loadCharset() {
|
|
||||||
try {
|
|
||||||
YamlReader reader = new YamlReader(new FileReader(CONFIG_FILE_NAME, StandardCharsets.US_ASCII));
|
|
||||||
reader.getConfig().readConfig.setIgnoreUnknownProperties(true);
|
|
||||||
StrippedYamlConfig charsetConfig = reader.read(StrippedYamlConfig.class);
|
|
||||||
reader.close();
|
|
||||||
return charsetConfig.server.CHARSET;
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(getLoadConfigErrorMessage(e));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class StrippedYamlConfig {
|
|
||||||
public StrippedServerConfig server;
|
|
||||||
|
|
||||||
private static class StrippedServerConfig {
|
|
||||||
public String CHARSET;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,10 +13,14 @@ package constants.string;
|
|||||||
* CharsetConstants
|
* CharsetConstants
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import com.esotericsoftware.yamlbeans.YamlReader;
|
||||||
import config.YamlConfig;
|
import config.YamlConfig;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileReader;
|
||||||
|
import java.io.IOException;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@@ -55,8 +59,22 @@ public class CharsetConstants {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String loadCharsetFromConfig() {
|
||||||
|
try {
|
||||||
|
YamlReader reader = new YamlReader(new FileReader(YamlConfig.CONFIG_FILE_NAME, StandardCharsets.US_ASCII));
|
||||||
|
reader.getConfig().readConfig.setIgnoreUnknownProperties(true);
|
||||||
|
StrippedYamlConfig charsetConfig = reader.read(StrippedYamlConfig.class);
|
||||||
|
reader.close();
|
||||||
|
return charsetConfig.server.CHARSET;
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
throw new RuntimeException("Could not read config file " + YamlConfig.CONFIG_FILE_NAME + ": " + e.getMessage());
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException("Could not successfully parse charset from config file " + YamlConfig.CONFIG_FILE_NAME + ": " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static Charset loadCharset() {
|
private static Charset loadCharset() {
|
||||||
String configCharset = YamlConfig.loadCharset();
|
String configCharset = loadCharsetFromConfig();
|
||||||
if (configCharset != null) {
|
if (configCharset != null) {
|
||||||
Language language = Language.fromCharset(configCharset);
|
Language language = Language.fromCharset(configCharset);
|
||||||
return Charset.forName(language.getCharset());
|
return Charset.forName(language.getCharset());
|
||||||
@@ -64,4 +82,12 @@ public class CharsetConstants {
|
|||||||
|
|
||||||
return StandardCharsets.US_ASCII;
|
return StandardCharsets.US_ASCII;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class StrippedYamlConfig {
|
||||||
|
public StrippedServerConfig server;
|
||||||
|
|
||||||
|
private static class StrippedServerConfig {
|
||||||
|
public String CHARSET;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user