001 package nl.cwi.sen1.util; 002 003 import java.awt.Color; 004 import java.awt.Font; 005 import java.io.File; 006 import java.io.FileInputStream; 007 import java.io.FileNotFoundException; 008 import java.io.IOException; 009 import java.io.InputStream; 010 import java.net.URL; 011 import java.util.Properties; 012 013 import javax.swing.Icon; 014 import javax.swing.ImageIcon; 015 import javax.swing.filechooser.FileSystemView; 016 017 // consider using java.util.prefs.Preferences as a replacement 018 public class Preferences { 019 private Properties properties; 020 021 public Preferences(InputStream propertyStream) { 022 Properties defaultProperties = readDefaultProperties(propertyStream); 023 this.properties = addUserProperties(defaultProperties); 024 } 025 026 private Properties readDefaultProperties(InputStream stream) { 027 Properties defaultProperties = new Properties(); 028 loadProperties(defaultProperties, stream); 029 return defaultProperties; 030 } 031 032 private Properties addUserProperties(Properties defaultProperties) { 033 Properties props = new Properties(defaultProperties); 034 035 File homeDir = FileSystemView.getFileSystemView().getHomeDirectory(); 036 File userPropertyFile = new File(homeDir, ".metarc"); 037 if (userPropertyFile.canRead()) { 038 try { 039 loadProperties(props, new FileInputStream(userPropertyFile)); 040 } catch (FileNotFoundException e) { 041 e.printStackTrace(); 042 } 043 } 044 045 return props; 046 } 047 048 private Properties loadProperties(Properties props, InputStream stream) { 049 try { 050 props.load(stream); 051 } catch (IOException e) { 052 e.printStackTrace(); 053 } 054 return props; 055 } 056 057 public String getString(String key) { 058 return properties.getProperty(key); 059 } 060 061 public void setString(String key, String value) { 062 properties.setProperty(key, value); 063 } 064 065 public Color getColor(String key) { 066 String spec = properties.getProperty(key); 067 return spec == null ? null : Color.decode(spec); 068 } 069 070 public Font getFont(String key) { 071 return Font.decode(getString(key)); 072 } 073 074 public Icon getIcon(String key) { 075 String path = properties.getProperty(key); 076 URL url = path.getClass().getResource(path); 077 078 return url == null ? null : new ImageIcon(url); 079 } 080 081 public int getInt(String key) { 082 String spec = properties.getProperty(key); 083 084 return Integer.parseInt(spec); 085 } 086 087 public double getDouble(String key) { 088 String spec = properties.getProperty(key); 089 return Double.parseDouble(spec); 090 } 091 092 public float getFloat(String key) { 093 String spec = properties.getProperty(key); 094 return Float.parseFloat(spec); 095 } 096 097 public boolean getBoolean(String key) { 098 099 String spec = properties.getProperty(key); 100 101 return "true".equals(spec); 102 } 103 }