/* * (c) 2005-2009 Carlos G�mez Rodr�guez, todos los derechos reservados / all rights reserved. * Licencia en license/bsd.txt / License in license/bsd.txt */ package org.f2o.absurdum.puck.gui.config; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Properties; /* Created 19/01/2008 16:47:25 */ public class PuckConfiguration { private Properties properties = null; private static String FILENAME = "puck.properties"; private static Properties defaultProperties; static { defaultProperties = new Properties(); defaultProperties.setProperty("nRecentFiles", "5"); defaultProperties.setProperty("skin", "jenverde"); defaultProperties.setProperty("look", "default"); defaultProperties.setProperty("roomDisplaySize", "20"); defaultProperties.setProperty("itemDisplaySize", "15"); defaultProperties.setProperty("spellDisplaySize", "20"); defaultProperties.setProperty("abstractEntityDisplaySize", "20"); defaultProperties.setProperty("characterDisplaySize", "20"); defaultProperties.setProperty("showGrid","true"); defaultProperties.setProperty("snapToGrid","true"); defaultProperties.setProperty("showRoomNames","true"); defaultProperties.setProperty("showRoomNodes","true"); defaultProperties.setProperty("showItemNames","true"); defaultProperties.setProperty("showItemNodes","true"); defaultProperties.setProperty("showSpellNames","true"); defaultProperties.setProperty("showSpellNodes","true"); defaultProperties.setProperty("showCharacterNames","true"); defaultProperties.setProperty("showCharacterNodes","true"); defaultProperties.setProperty("showAbstractEntityNames","true"); defaultProperties.setProperty("showAbstractEntityNodes","true"); defaultProperties.setProperty("showArrows","true"); defaultProperties.setProperty("showArrowNames","true"); defaultProperties.setProperty("codeFrameFontSize", "18.0"); defaultProperties.setProperty("graphArrowFontSize", "10.0"); defaultProperties.setProperty("graphNodeFontSize", "11.0"); defaultProperties.setProperty("runInSDI", "false"); defaultProperties.setProperty("windowWidth", "800"); defaultProperties.setProperty("windowHeight", "600"); defaultProperties.setProperty("windowMaximized", "true"); defaultProperties.setProperty("windowLocationX","0"); defaultProperties.setProperty("windowLocationY","0"); defaultProperties.setProperty("dynamicFormResizing","true"); defaultProperties.setProperty("dividerLocation","0.60"); defaultProperties.setProperty("availableSkins","naive,urba1,orco,jenverde"); defaultProperties.setProperty("additionalLooks","Nimbus"); //L&F's available apart from default and system defaultProperties.setProperty("rsyntaxWordWrap","true"); defaultProperties.setProperty("rsyntaxShowLineNumbers","true"); defaultProperties.setProperty("rsyntaxShowTabLines","false"); defaultProperties.setProperty("rsyntaxTabsEmulated","true"); defaultProperties.setProperty("mapColor.background", "FFFFFF"); defaultProperties.setProperty("mapColor.grid", "EEEEEE"); defaultProperties.setProperty("mapColor.text", "000000"); defaultProperties.setProperty("mapColor.auxText", "222222"); defaultProperties.setProperty("mapColor.highArrow", "800080"); defaultProperties.setProperty("mapColor.arrow", "E080E0"); } private static PuckConfiguration instance; public static PuckConfiguration getInstance() { if ( instance == null ) instance = new PuckConfiguration(); return instance; } private PuckConfiguration() { System.out.println("PuckConfiguration constructor"); properties = new Properties(defaultProperties); try { //properties.load ( new InputStreamReader(new FileInputStream(new File(FILENAME))) ); //properties.load( getClass().getClassLoader().getResourceAsStream(FILENAME) ); properties.load ( new FileInputStream(new File(FILENAME)) ); } catch ( FileNotFoundException fnfe ) { System.out.println("PUCK configuration file not found."); } catch ( NullPointerException npe ) { System.out.println("PUCK configuration file not found."); } catch ( IOException ioe ) { System.out.println("Error reading PUCK configuration file."); } updateRecentFilesListFromProperties(); } public int getIntegerProperty ( String key , int defaultVal ) { try { return Integer.valueOf(properties.getProperty(key)).intValue(); } catch ( NumberFormatException nfe ) { return defaultVal; } } public int getIntegerProperty ( String key ) { return getIntegerProperty(key,0); } public boolean getBooleanProperty ( String key , boolean defaultVal ) { try { return Boolean.valueOf(properties.getProperty(key)).booleanValue(); } catch ( NumberFormatException nfe ) { return defaultVal; } } public boolean getBooleanProperty ( String key ) { return getBooleanProperty(key,false); } public double getDoubleProperty ( String key , double defaultVal ) { try { return Double.valueOf(properties.getProperty(key)).doubleValue(); } catch ( NumberFormatException nfe ) { return defaultVal; } } public double getDoubleProperty ( String key ) { return getDoubleProperty(key,0.0);} public String getProperty ( String key ) { return properties.getProperty(key); } public void setProperty ( String key , String value ) { properties.setProperty(key,value); } public void storeProperties() throws FileNotFoundException, IOException { updateRecentFilesPropertiesFromList(); File f = new File(FILENAME); FileOutputStream fos = new FileOutputStream(f); System.out.println(f.getAbsolutePath()); properties.store( fos , "Written by PUCK" ); } private LinkedList recentFiles = new LinkedList(); private void updateRecentFilesListFromProperties() { synchronized(recentFiles) { recentFiles.clear(); int nRecentFiles = Integer.parseInt(properties.getProperty("nRecentFiles")); for ( int i = 0 ; i < nRecentFiles ; i++ ) { String path = (String) properties.getProperty("recentFile."+i); if ( path != null ) recentFiles.addLast(path); } } } private void updateRecentFilesPropertiesFromList() { int i = 0; for (Iterator iter = recentFiles.iterator(); iter.hasNext(); ) { String element = (String) iter.next(); properties.setProperty("recentFile."+i,element); i++; } } public void addRecentFile ( File f ) { int nRecentFiles = Integer.parseInt(properties.getProperty("nRecentFiles")); synchronized(recentFiles) { String path = f.getAbsolutePath(); if ( !recentFiles.remove(path) && recentFiles.size() == nRecentFiles ) recentFiles.removeLast(); recentFiles.addFirst(path); } } public List getRecentFiles ( ) { return recentFiles; } }