001: /* CVS ID: $Id: ConfigStore.java,v 1.1.1.1 2002/10/02 18:41:44 wastl Exp $ */
002: package net.wastl.webmail.config;
003:
004: import java.util.*;
005:
006: /*
007: * ConfigStore.java
008: *
009: * Created: Tue Oct 19 11:54:12 1999
010: *
011: * Copyright (C) 1999-2000 Sebastian Schaffert
012: *
013: * This program is free software; you can redistribute it and/or
014: * modify it under the terms of the GNU General Public License
015: * as published by the Free Software Foundation; either version 2
016: * of the License, or (at your option) any later version.
017: *
018: * This program is distributed in the hope that it will be useful,
019: * but WITHOUT ANY WARRANTY; without even the implied warranty of
020: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
021: * GNU General Public License for more details.
022: *
023: * You should have received a copy of the GNU General Public License
024: * along with this program; if not, write to the Free Software
025: * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
026: */
027: /**
028: * This class is a generic storage for configuration parameters.
029: * Subclasses must implement setConfigRaw and getConfigRaw.
030: *
031: * @author Sebastian Schaffert
032: * @version
033: */
034:
035: public abstract class ConfigStore {
036:
037: protected ConfigScheme scheme;
038:
039: public ConfigStore(ConfigScheme cs) {
040: scheme = cs;
041: }
042:
043: public ConfigStore() {
044: this (new ConfigScheme());
045: }
046:
047: public ConfigScheme getConfigScheme() {
048: return scheme;
049: }
050:
051: /**
052: * Fetch all keys of the current configuration.
053: */
054: public Enumeration getConfigKeys() {
055: return scheme.getPossibleKeys();
056: }
057:
058: /**
059: * Fetch the configuration associated with the specified key.
060: * @param key Identifier for the configuration
061: */
062: public String getConfig(String key) {
063: String value = getConfigRaw(key.toUpperCase());
064: if (value == null || value.equals("")) {
065: value = (String) scheme.getDefaultValue(key.toUpperCase());
066: }
067: if (value == null) {
068: value = "";
069: }
070: return value;
071: }
072:
073: /**
074: * Access a configuration on a low level, e.g. access a file, make a SQL query, ...
075: * Will be called by getConfig.
076: * return null if undefined
077: */
078: protected abstract String getConfigRaw(String key);
079:
080: public boolean isConfigSet(String key) {
081: return getConfigRaw(key) != null;
082: }
083:
084: public void setConfig(String key, String value)
085: throws IllegalArgumentException {
086: setConfig(key, value, true, true);
087: }
088:
089: /**
090: * Set a configuration "key" to the specified value.
091: * @param key Identifier for the configuration
092: * @paran value value to set
093: */
094: public void setConfig(String key, String value, boolean filter,
095: boolean notify) throws IllegalArgumentException {
096: if (!scheme.isValid(key, value))
097: throw new IllegalArgumentException();
098: if (!(isConfigSet(key) && getConfigRaw(key).equals(value))) {
099: // System.err.println("Key: "+key);
100: // System.err.println("Value old: |"+getConfigRaw(key)+"|");
101: // System.err.println("Value new: |"+value+"|");
102:
103: setConfigRaw(scheme.getConfigParameterGroup(key), key,
104: filter ? scheme.filter(key, value) : value, scheme
105: .getConfigParameterType(key));
106: if (notify)
107: scheme.notifyConfigurationChange(key);
108: }
109: }
110:
111: /**
112: * Access a configuration on a low level, e.g. access a file, make a SQL query, ...
113: * Will be called by setConfig.
114: * return null if undefined
115: */
116: public abstract void setConfigRaw(String group, String key,
117: String value, String type);
118:
119: public void addConfigurationListener(String key,
120: ConfigurationListener l) {
121: scheme.addConfigurationListener(key, l);
122: }
123:
124: } // ConfigStore
|