/** * $RCSfile: ,v $ * $Revision: $ * $Date: $ * * Copyright (C) 2004-2011 Jive Software. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jivesoftware.spark.ui.themes; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Enumeration; import java.util.HashMap; import java.util.Properties; import org.jivesoftware.Spark; import org.jivesoftware.resource.Default; import org.jivesoftware.spark.util.log.Log; public class ColorSettingManager { private static HashMap<String, String> _propertyHashMap = new HashMap<String, String>(); private static ColorSettings _colorsettings; public ColorSettingManager() { } /** * Returns the ColorSettingagent * * @return ColorSettingagent */ public static ColorSettings getColorSettings() { File settings = getSettingsFile(); _colorsettings = loadSettings(settings); return _colorsettings; } public static boolean exists() { return getSettingsFile().exists(); } /** * Returns the file or creates it * * @return */ public static File getSettingsFile() { File path = new File(Spark.getSparkUserHome()); if (!path.exists()) { path.mkdirs(); } File f = new File(path, "color.settings"); if (!f.exists()) try { f.createNewFile(); } catch (IOException e) { Log.error("Error saving settings.", e); } return f; } /** * Save all settings */ public static void saveColorSettings() { final Properties props = new Properties(); for (String key : _propertyHashMap.keySet()) { String value = _propertyHashMap.get(key); props.setProperty(key, value); } try { props.store(new FileOutputStream(getSettingsFile()), "Storing Spark Color Settings"); } catch (Exception e) { Log.error("Error saving settings.", e); } } /** * load the Settingfile * * @param file * @return */ private static ColorSettings loadSettings(File file) { // load from file loadSettingsToMap(file); if (_propertyHashMap.size() == 0) { Properties p = new Properties(); try { p.load(new FileInputStream(getSettingsFile())); initialLoad(p); loadSettingsToMap(file); } catch (FileNotFoundException e) { Log.error("Error saving settings.", e); } catch (IOException e) { Log.error("Error saving settings.", e); } } else if (_propertyHashMap.size() != getDefaultColors().size()) { compareSettings(_propertyHashMap, getDefaultColors()); } ColorSettings settings = new ColorSettings(_propertyHashMap); return settings; } /** * Compares two Hashmaps, if defaultmap has keys that are not within mymap * * @param mymap * HashMap < String,String > * @param defaultmap * HashMap < String,String > */ private static void compareSettings(HashMap<String, String> mymap, HashMap<String, String> defaultmap) { boolean changesmade = false; for (String key : defaultmap.keySet()) { if (mymap.get(key) == null) // key doesnt exist in mymap { mymap.put(key, defaultmap.get(key)); changesmade = true; } } if (changesmade) { saveColorSettings(); } } /** * loads all Properties into a HashMap from the File specified * * @param file */ private static void loadSettingsToMap(File file) { Properties props = new Properties(); try { props.load(new FileInputStream(file)); Enumeration<Object> enume = props.keys(); while (enume.hasMoreElements()) { String object = (String) enume.nextElement(); _propertyHashMap.put(object, props.getProperty(object)); } } catch (FileNotFoundException e) { Log.error("Error saving settings.", e); } catch (IOException e) { Log.error("Error saving settings.", e); } } public static HashMap<String, String> getDefaultColors() { HashMap<String, String> hashmap = new HashMap<String, String>(); Enumeration<String> enu = Default.getAllKeys(); while (enu.hasMoreElements()) { String s = enu.nextElement(); if (Default.getString(s).replace(" ", "") .matches("[0-9]*,[0-9]*,[0-9]*,[0-9]*")) { hashmap.put(s, Default.getString(s)); } } return hashmap; } /** * Used to set the Default values * * @param props */ private static void initialLoad(Properties props) { HashMap<String, String> map = getDefaultColors(); for (String key : map.keySet()) { props.setProperty(key, map.get(key)); } try { props.store(new FileOutputStream(getSettingsFile()), "Storing Spark Color Settings"); } catch (FileNotFoundException e) { Log.error("Error saving settings.", e); } catch (IOException e) { Log.error("Error saving settings.", e); } } /** * Restores the Default Settings */ public static void restoreDefault() { _propertyHashMap = getDefaultColors(); saveColorSettings(); } }