source: josm/src/org/openstreetmap/josm/data/Preferences.java@ 77

Last change on this file since 77 was 77, checked in by imi, 18 years ago

added customizable colores for raw gps layers (popup menu in layer list)

File size: 4.3 KB
Line 
1package org.openstreetmap.josm.data;
2
3import java.awt.Color;
4import java.io.BufferedReader;
5import java.io.FileReader;
6import java.io.FileWriter;
7import java.io.IOException;
8import java.io.PrintWriter;
9import java.util.ArrayList;
10import java.util.Map;
11import java.util.SortedMap;
12import java.util.TreeMap;
13import java.util.Map.Entry;
14
15import org.openstreetmap.josm.data.osm.visitor.SimplePaintVisitor;
16import org.openstreetmap.josm.tools.ColorHelper;
17
18
19/**
20 * This class holds all preferences for JOSM.
21 *
22 * Other classes can register their beloved properties here. All properties will be
23 * saved upon set-access.
24 *
25 * @author imi
26 */
27public class Preferences {
28
29 public static interface PreferenceChangedListener {
30 void preferenceChanged(String key, String newValue);
31 }
32
33 ArrayList<PreferenceChangedListener> listener = new ArrayList<PreferenceChangedListener>();
34
35 /**
36 * Map the property name to the property object.
37 */
38 private SortedMap<String, String> properties = new TreeMap<String, String>();
39
40 /**
41 * Return the location of the preferences file
42 */
43 public static String getPreferencesDir() {
44 return System.getProperty("user.home")+"/.josm/";
45 }
46
47
48 public void addPreferenceChangedListener(PreferenceChangedListener listener) {
49 this.listener.add(listener);
50 }
51 public void removePreferenceChangedListener(PreferenceChangedListener listener) {
52 this.listener.remove(listener);
53 }
54
55
56 synchronized public String get(String key) {
57 if (!properties.containsKey(key))
58 return "";
59 return properties.get(key);
60 }
61 synchronized public String get(String key, String def) {
62 String prop = properties.get(key);
63 if (prop == null || prop.equals(""))
64 return def;
65 return prop;
66 }
67 synchronized public Map<String, String> getAllPrefix(String prefix) {
68 Map<String,String> all = new TreeMap<String,String>();
69 for (Entry<String,String> e : properties.entrySet())
70 if (e.getKey().startsWith(prefix))
71 all.put(e.getKey(), e.getValue());
72 return all;
73 }
74 synchronized public boolean getBoolean(String key) {
75 return properties.containsKey(key) ? Boolean.parseBoolean(properties.get(key)) : false;
76 }
77
78
79 synchronized public void put(String key, String value) {
80 if (value == null)
81 properties.remove(key);
82 else
83 properties.put(key, value);
84 save();
85 firePreferenceChanged(key, value);
86 }
87 synchronized public void put(String key, boolean value) {
88 properties.put(key, Boolean.toString(value));
89 save();
90 firePreferenceChanged(key, Boolean.toString(value));
91 }
92
93 private void firePreferenceChanged(String key, String value) {
94 for (PreferenceChangedListener l : listener)
95 l.preferenceChanged(key, value);
96 }
97
98
99 /**
100 * Called after every put. In case of a problem, do nothing but output the error
101 * in log.
102 */
103 private void save() {
104 try {
105 PrintWriter out = new PrintWriter(new FileWriter(
106 getPreferencesDir() + "preferences"));
107 for (Entry<String, String> e : properties.entrySet())
108 if (!e.getValue().equals(""))
109 out.println(e.getKey() + "=" + e.getValue());
110 out.close();
111 } catch (IOException e) {
112 e.printStackTrace();
113 // do not message anything, since this can be called from strange
114 // places.
115 }
116 }
117
118
119 public void load() throws IOException {
120 properties.clear();
121 BufferedReader in = new BufferedReader(new FileReader(getPreferencesDir()+"preferences"));
122 int lineNumber = 0;
123 for (String line = in.readLine(); line != null; line = in.readLine(), lineNumber++) {
124 int i = line.indexOf('=');
125 if (i == -1 || i == 0)
126 throw new IOException("Malformed config file at line "+lineNumber);
127 properties.put(line.substring(0,i), line.substring(i+1));
128 }
129 }
130
131 public void resetToDefault() {
132 properties.clear();
133 properties.put("laf", "javax.swing.plaf.metal.MetalLookAndFeel");
134 properties.put("projection", "org.openstreetmap.josm.data.projection.Epsg4263");
135 properties.put("osm-server.url", "http://www.openstreetmap.org/api");
136 properties.put("color.node", ColorHelper.color2html(Color.red));
137 properties.put("color.segment", ColorHelper.color2html(SimplePaintVisitor.darkgreen));
138 properties.put("color.way", ColorHelper.color2html(SimplePaintVisitor.darkblue));
139 properties.put("color.incomplete way", ColorHelper.color2html(SimplePaintVisitor.darkerblue));
140 properties.put("color.selected", ColorHelper.color2html(Color.white));
141 properties.put("color.gps point", ColorHelper.color2html(Color.gray));
142 save();
143 }
144}
Note: See TracBrowser for help on using the repository browser.