package fr.lyrgard.hexScape.service; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import java.util.Properties; import fr.lyrgard.hexScape.model.CurrentUserInfo; import fr.lyrgard.hexScape.model.player.User; public class ConfigurationService { public static final String DEFAULT_GAME_NAME = "DEFAULT_GAME_NAME"; private static final String CONFIG_FILENAME = "config.properties"; private static final String USER_NAME_KEY = "user.name"; //private static final String USER_COLOR_KEY = "user.color"; private static final String SERVER_HOST_KEY = "server.host"; private static final String GAME_FOLDER = "game.folder"; private static ConfigurationService INSTANCE; public static synchronized ConfigurationService getInstance() { if (INSTANCE == null) { INSTANCE = new ConfigurationService(); } return INSTANCE; } private Properties properties; private ConfigurationService() { File file = new File(CONFIG_FILENAME); if (!file.exists()) { initConfig(); } else { loadProperties(); } } private void initConfig() { properties = new Properties(); // set the properties value setUserName("Player"); setServerHost("hexscape.lyrgard.fr:4242"); initGameFolder(); save(); } public List<String> getGameFolders() { List<String> gameFolders = new ArrayList<>(); File assetFolder = AssetService.ASSET_FOLDER; if (assetFolder.exists() && assetFolder.isDirectory()) { for (File file : assetFolder.listFiles()) { if (file.isDirectory() && !file.getName().equals(AssetService.COMMON_ASSET_FOLDER.getName())) { gameFolders.add(file.getName()); } } } return gameFolders; } private void loadProperties() { properties = new Properties(); InputStream input = null; try { input = new FileInputStream(CONFIG_FILENAME); // load a properties file properties.load(input); } catch (IOException ex) { ex.printStackTrace(); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } } public String getUserName() { return properties.getProperty(USER_NAME_KEY); } public void setUserName(String name) { properties.put(USER_NAME_KEY, name); } public String getServerHost() { return properties.getProperty(SERVER_HOST_KEY); } public void setServerHost(String host) { properties.put(SERVER_HOST_KEY, host); } public String getGameFolder() { String gameFolder = properties.getProperty(GAME_FOLDER); if (gameFolder == null) { gameFolder = DEFAULT_GAME_NAME; } return gameFolder; } public void setGameFolder(String gameFolder) { properties.put(GAME_FOLDER, gameFolder); } public void initGameFolder() { List<String> gameFolders = getGameFolders(); if (!gameFolders.isEmpty()) { setGameFolder(gameFolders.get(0)); } } public void save() { OutputStream output = null; try { output = new FileOutputStream(CONFIG_FILENAME); // save properties to project root folder properties.store(output, null); User user = CurrentUserInfo.getInstance(); user.setName(getUserName()); } catch (IOException io) { io.printStackTrace(); } finally { if (output != null) { try { output.close(); } catch (IOException e) { e.printStackTrace(); } } } } }