Skip to content
Snippets Groups Projects
Select Git revision
  • 899d5bcd8d1420c07b389b99c83eac7fa7605158
  • master default
  • rewrite
3 results

PropertiesSettingsHandler.scala

Blame
  • PropertiesSettingsHandler.scala 1.22 KiB
    package de.tobias.playpad.server.settings
    
    import java.io.IOException
    import java.lang.reflect.Modifier
    import java.nio.file.{Files, Path}
    import java.util.Properties
    
    /**
     * Created by tobias on 05.02.17.
     */
    class PropertiesSettingsHandler extends SettingsLoader with SettingsSaver {
    
    	@throws[IOException]
    	override def load(path: Path): Settings = {
    		val properties = new Properties()
    		properties.load(Files.newBufferedReader(path))
    
    		val settings = new Settings()
    		classOf[Settings].getDeclaredFields
    			.filter(f => !Modifier.isTransient(f.getModifiers))
    			.filter(f => properties.containsKey(f.getName))
    			.foreach(f => {
    				f.setAccessible(true)
    				if (f.getType == Integer.TYPE) {
    					f.setInt(settings, properties.getProperty(f.getName).toInt)
    				} else {
    					f.set(settings, properties.getProperty(f.getName))
    				}
    			})
    		settings
    	}
    
    	@throws[IOException]
    	override def save(settings: Settings, path: Path): Unit = {
    		val properties = new Properties()
    
    		classOf[Settings].getDeclaredFields
    			.filter(f => !Modifier.isTransient(f.getModifiers))
    			.foreach(f => {
    				f.setAccessible(true)
    				properties.setProperty(f.getName, f.get(settings).toString)
    			})
    
    		properties.store(Files.newOutputStream(path), "Settings")
    	}
    }