package org.iatoki.judgels.raguel; import com.typesafe.config.Config; import java.io.File; public final class RaguelProperties { private static RaguelProperties INSTANCE; private final Config config; private String raguelBaseUrl; private File raguelBaseDataDir; private String jophielBaseUrl; private String jophielClientJid; private String jophielClientSecret; private RaguelProperties(Config config) { this.config = config; } public static synchronized void buildInstance(Config config) { if (INSTANCE != null) { throw new UnsupportedOperationException("RaguelProperties instance has already been built"); } INSTANCE = new RaguelProperties(config); INSTANCE.build(); } public static RaguelProperties getInstance() { if (INSTANCE == null) { throw new UnsupportedOperationException("RaguelProperties instance has not been built"); } return INSTANCE; } public String getRaguelBaseUrl() { return raguelBaseUrl; } public String getJophielBaseUrl() { return jophielBaseUrl; } public String getJophielClientJid() { return jophielClientJid; } public String getJophielClientSecret() { return jophielClientSecret; } private void build() { raguelBaseUrl = requireStringValue("raguel.baseUrl"); raguelBaseDataDir = requireDirectoryValue("raguel.baseDataDir"); jophielBaseUrl = requireStringValue("jophiel.baseUrl"); jophielClientJid = requireStringValue("jophiel.clientJid"); jophielClientSecret = requireStringValue("jophiel.clientSecret"); } private String getStringValue(String key) { if (!config.hasPath(key)) { return null; } return config.getString(key); } private String requireStringValue(String key) { return config.getString(key); } private Boolean getBooleanValue(String key) { if (!config.hasPath(key)) { return null; } return config.getBoolean(key); } private boolean requireBooleanValue(String key) { return config.getBoolean(key); } private File requireDirectoryValue(String key) { String filename = config.getString(key); File dir = new File(filename); if (!dir.isDirectory()) { throw new RuntimeException("Directory " + dir.getAbsolutePath() + " does not exist"); } return dir; } }