001: /* $Id: ConfigParameter.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: * ConfigParameter.java
008: *
009: * Created: Sep 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: * An abstraction for a configuration parameter.
029: * Subclasses must implement a method that checks whether a specific value is correct for this
030: * parameter.
031: *
032: * ConfigParameters may have ConfigurationListeners that work much like the Listeners in the
033: * Java AWT. All listeners get informed if the value of the parameter has changed.
034: *
035: * Each ConfigParameter has a corresponding (unique) key, a default value (if not yet changed
036: * by the user) and a short description for the administrator about what the parameter means.
037: *
038: * This is a scheme only, however, ConfigParameters just describe the behaviour of certain
039: * keys in the WebMail configuration, they don't actually store the value itself.
040: */
041: public abstract class ConfigParameter {
042: protected String key;
043: protected Object def_value;
044: protected String desc;
045: protected Vector listeners;
046:
047: protected String group;
048:
049: /**
050: * Create a new parameter.
051: * @param name Unique key of this parameter
052: * @param def Default value for this parameter
053: * @param desc Description for this parameter
054: */
055: public ConfigParameter(String name, Object def, String desc) {
056: key = name;
057: this .def_value = def;
058: this .desc = desc;
059: group = "default";
060: listeners = new Vector();
061: }
062:
063: public void setGroup(String g) {
064: group = g;
065: }
066:
067: /**
068: * Return the key of this parameter.
069: */
070: public String getKey() {
071: return key;
072: }
073:
074: /**
075: * Return the default value of this parameter.
076: */
077: public Object getDefault() {
078: return def_value;
079: }
080:
081: public void setDefault(Object value) {
082: def_value = value;
083: }
084:
085: /**
086: * Return the description for this parameter.
087: */
088: public String getDescription() {
089: return desc;
090: }
091:
092: /**
093: * Add a ConfigurationListener for this object that will be informed if the parameter's
094: * value changes.
095: */
096: public void addConfigurationListener(ConfigurationListener l) {
097: listeners.addElement(l);
098: }
099:
100: /**
101: * Get a list of all configuration listeners.
102: */
103: public Enumeration getConfigurationListeners() {
104: return listeners.elements();
105: }
106:
107: /**
108: * Put through some sort of filter.
109: * This method is called when a String value for this parameter is set.
110: * Subclasses should implement this, if they want to change the behaviour
111: * @see CryptedStringConfigParameter
112: */
113: public String filter(String s) {
114: return s;
115: }
116:
117: /**
118: * Check whether the value that is passed as the parameter is a valid value for this
119: * ConfigParameter
120: * @see ChoiceConfigParameter
121: */
122: public abstract boolean isPossibleValue(Object value);
123:
124: public String getType() {
125: return "undefined";
126: }
127:
128: public String getGroup() {
129: return group;
130: }
131: }
|