package config; import java.io.File; import java.io.IOException; import org.ini4j.Wini; public class Config { // Nur die Wini als member private static Wini ini = null; // Konstruktor ermittelt der Pfad zur Konfigurationsdatei. // Unterscheidet dabei Windows/Linux public static void init() throws IOException { // Hauptvariablen nur lokal notwendig String configPath = null; File configFile = null; // Unterscheide zwischen Windows/Unix String OSName = System.getProperty("os.name").toLowerCase(); System.out.println("Machine's OS: " + OSName); if (OSName.contains("windows")) { // Windows machine. Use the environment variable 'APPDATA' which // should point to a path similar to: // C:\Users\\AppData\Roaming String appDataPath = System.getenv("APPDATA"); if (!appDataPath.isEmpty()) { configPath = appDataPath + "\\bwSuite\\config.ini"; } else { // APPDATA was empty, let's build it ourselves... System.out.println("APPDATA ist leer."); configPath = System.getProperty("user.home") + "\\AppData\\Roaming\\bwSuite\\config.ini"; } } else if (OSName.contains("linux")) { configPath=System.getProperty("user.home") + "/.config/bwSuite/config.ini"; } else { // Nicht Windows oder Linux, TODO MacOS Support? configPath = null; } //File fuer den Ordner erzeugen if (!(configPath.isEmpty()||configPath == null)) { configFile = new File(configPath); } else { throw new IOException("Konnte kein Pfad für die Konfigurationsdatei ermitteln."); } // Checke, ob der Ordner existiert. if (!configFile.getParentFile().exists()) { System.out.println("Ordner " + configFile.getParentFile() + " exisitiert nicht - lege ihn jetzt an."); // Wenn nicht, erzeuge Ordner if (!configFile.getParentFile().mkdirs()) { throw new IOException("Konnte '" + configFile.getParentFile() + "' nicht erstellen."); } } // Pruefen, ob Datei schon existiert if (!configFile.exists()) { // Erzeuge eine neue Datei configFile.createNewFile(); // Wenn in die Datei geschrieben werden kann if(configFile.canWrite()) { ini = new Wini(configFile); System.out.println("Erzeuge '" + configFile + "'..."); //Schreibe Config ini.put("main", "BillOfRights", false); ini.put("main", "vmware", false); ini.put("main", "Benutzername speichern", false); ini.put("main", "Benutzername", ""); ini.put("main", "Letzter Downloadpfad", ""); ini.put("main", "Letzter Uploadpfad", ""); ini.store(); } else { throw new IOException("Konnte nicht in '" + configFile + "' schreiben. Haben Sie Rechte dazu?"); } } else { System.out.println("'" + configFile + "' existiert bereits - keine weitere Aktion."); ini = new Wini(configFile); } } // Ende Konstruktor. // Public funktion zur Abfrage der Boolean-Werte // Gibt Wert von Attribut 'key' in Sektion 'section', falls es existiert. // Sonst gibt es 'defaultValue' zurück. // // Usage: getBoolean(
, , ) // Ex.: getBoolean("main", "Benutzername", "NichtGesetzt"); public static boolean getBoolean(String section, String key, Boolean defaultValue) { if (ini.containsKey(section) && ini.get(section).containsKey(key)) { return ini.get(section, key, Boolean.class); } else { return defaultValue; } } // Public funktion zur Abfrage der String-Werte // Usage: getBoolean() public static String getString(String section, String key, String defaultValue) { if (ini.containsKey(section) && ini.get(section).containsKey(key)) { return ini.get(section, key); } else { return defaultValue; } } public static boolean setBoolean(String section, String key, Boolean value) { return ini.put(section, key, value) != null; } public static boolean setString(String section, String key, String value) { return ini.put(section, key, value) != null; } public static boolean store() { try { ini.store(); return true; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } } }