summaryrefslogblamecommitdiffstats
path: root/dozentenmodul/src/main/java/config/Config.java
blob: 13bdf83052a3b75d582bc55b219be0a7cd27e863 (plain) (tree)
1
2
3
4
5
6
7
8
9





                           
 
                     
        





                                                                  
                


                                                     


                                                                            
                                                 



                                                                                        
                                                     
                                                                                   
                                

                                                                                 
                                                                                                                                

                         
                                                      
                                                                                                   


                                                                        
                 
                
                                               




                                                                                                          
                





                                                                                                                              
                         




                                                    
                                                   




                                                                                      
                                                 
                                                                       
                                                                 



                                                                                 

                                            
                                
                                                                                                                                
                         


                                                                                                             
                 










































                                                                                            
                 
         
 
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\<user>\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(<section>, <key>, <defaultValue>)
	// 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(<key>)
	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;
		}
	}
}