001: // This file is part of KeY - Integrated Deductive Software Design
002: // Copyright (C) 2001-2007 Universitaet Karlsruhe, Germany
003: // Universitaet Koblenz-Landau, Germany
004: // Chalmers University of Technology, Sweden
005: //
006: // The KeY system is protected by the GNU General Public License.
007: // See LICENSE.TXT for details.
008: //
009: //
010: package de.uka.ilkd.key.gui.configuration;
011:
012: import java.io.File;
013: import java.util.*;
014:
015: import de.uka.ilkd.key.gui.GUIEvent;
016:
017: /** This class encapsulates the information about the active
018: * libraries settings
019: */
020: public class LibrariesSettings implements Settings {
021:
022: private static final String LIBRARIES_KEY = "[Libraries]Default";
023: private static final String LIBRARIES_PATH = "libraries"
024: + File.separator;
025: private LinkedList listenerList = new LinkedList();
026:
027: /** keys: the file names of the libraries,
028: * standard libraries are given by the library name
029: * and user libraries are given by the absolute path
030: * values: Booleans that indicate if a library is selected
031: */
032: private HashMap libToSel = new HashMap();
033:
034: /** this boolean indicates that there was no "Libraries" properties section,
035: * we need this because the there at least the standard libraries in
036: * in the libaries settings*/
037: private boolean emptyProperties = true;
038:
039: private static String[] standardLibs = { "stringRules.key",
040: "deprecatedRules.key", "acc.key" };
041:
042: public LibrariesSettings() {
043: /*adds the standard libraries to libToSel, maybe they will be
044: replaced by readSettings */
045: for (int i = 0; i < standardLibs.length; i++) {
046: libToSel.put(standardLibs[i], new Boolean(false));
047: }
048: }
049:
050: /** gets a Properties object and has to perform the necessary
051: * steps in order to change this object in a way that it
052: * represents the stored settings.
053: */
054: public void readSettings(Properties props) {
055: String librariesSequence = props.getProperty(LIBRARIES_KEY);
056: emptyProperties = false;
057: if (librariesSequence != null) {
058: StringTokenizer st = new StringTokenizer(librariesSequence,
059: ",");
060: while (st.hasMoreTokens()) {
061: String token = st.nextToken().trim();
062: int sepIndex = token.lastIndexOf("-");
063: if ((sepIndex > 0) && (sepIndex < token.length() - 1))
064: libToSel.put(token.substring(0, sepIndex).trim(),
065: new Boolean(token.substring(sepIndex + 1)
066: .trim()));
067: }
068: } else
069: emptyProperties = true;
070: }
071:
072: /** implements the method required by the Settings interface. The
073: * settings are written to the given Properties object. Only entries of the form
074: * <key> = <value> (,<value>)* are allowed.
075: * @param props the Properties object where to write the settings as (key, value) pair
076: */
077: public void writeSettings(Properties props) {
078: String s = "";
079: Iterator keyIt = libToSel.keySet().iterator();
080: while (keyIt.hasNext()) {
081: String fileName = (String) keyIt.next();
082: String sel = libToSel.get(fileName).toString();
083: s += fileName + "-" + sel;
084: if (keyIt.hasNext())
085: s += ", ";
086: }
087: props.setProperty(LIBRARIES_KEY, s);
088: }
089:
090: /** sends the message that the state of this setting has been
091: * changed to its registered listeners (not thread-safe)
092: */
093: protected void fireSettingsChanged() {
094: Iterator it = listenerList.iterator();
095: while (it.hasNext()) {
096: ((SettingsListener) it.next())
097: .settingsChanged(new GUIEvent(this ));
098: }
099: }
100:
101: /** adds a listener to the settings object
102: * @param l the listener
103: */
104: public void addSettingsListener(SettingsListener l) {
105: listenerList.add(l);
106: }
107:
108: public HashMap getLibraries() {
109: return (HashMap) libToSel.clone();
110: }
111:
112: public void setLibraries(HashMap libraries) {
113: HashMap oldLibToSel = this .libToSel;
114: this .libToSel = libraries;
115: if (oldLibToSel != null && !oldLibToSel.equals(libToSel)) {
116: fireSettingsChanged();
117: }
118:
119: }
120:
121: public boolean emptyProperties() {
122: return emptyProperties;
123: }
124:
125: /** @return the path of the libraries */
126: public static String getLibrariesPath() {
127: return LIBRARIES_PATH;
128: }
129:
130: }
|