ConfigScheme.java
上传用户:huihesys
上传日期:2007-01-04
资源大小:3877k
文件大小:7k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. /* $Id: ConfigScheme.java,v 1.3 2000/04/06 08:02:01 wastl Exp $ */
  2. package net.wastl.webmail.config;
  3. import java.util.*;
  4. /*
  5.  * ConfigScheme.java
  6.  *
  7.  * Created: 31.08.99
  8.  *
  9.  * Copyright (C) 1999-2000 Sebastian Schaffert
  10.  * 
  11.  * This program is free software; you can redistribute it and/or
  12.  * modify it under the terms of the GNU General Public License
  13.  * as published by the Free Software Foundation; either version 2
  14.  * of the License, or (at your option) any later version.
  15.  * 
  16.  * This program is distributed in the hope that it will be useful,
  17.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  * GNU General Public License for more details.
  20.  * 
  21.  * You should have received a copy of the GNU General Public License
  22.  * along with this program; if not, write to the Free Software
  23.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  24.  */
  25. /**
  26.  * This class contains a scheme for WebMail configuration data.
  27.  *
  28.  * It is mainly a container for the ConfigParameter objects and a wrapper to access
  29.  * the main functions in them to ease access to the scheme.
  30.  *
  31.  * Created: 31.08.99
  32.  *
  33.  * @author Sebastian Schaffert
  34.  * @version $Revision: 1.3 $
  35.  */
  36. public class ConfigScheme {
  37.     
  38.     protected Hashtable config_scheme;
  39.     public ConfigScheme() {
  40. System.err.print("- Configuration Scheme Handler ... ");
  41. config_scheme=new Hashtable();
  42. System.err.println("done!");
  43.     }
  44.     /**
  45.      * Check whether a key/value pair is valid in this configuration scheme
  46.      * @param key Name of the parameter
  47.      * @param value value to check for
  48.      */
  49.     public boolean isValid(String key, Object value) {
  50. ConfigParameter scheme=getConfigParameter(key);
  51. if(scheme==null) {
  52.     return false;
  53. } else {
  54.     return scheme.isPossibleValue(value);
  55. }
  56.     }
  57.     public String filter(String key, String value) {
  58. ConfigParameter c=(ConfigParameter)config_scheme.get(key);
  59. if(c!=null) {
  60.     return c.filter(value);
  61. } else {
  62.     return value;
  63. }
  64.     }
  65.     /**
  66.      * Register a configuration key that can take String values
  67.      * @param key Name of the configuration key
  68.      * @param default Default value for this key
  69.      * @param desc Description for this key
  70.      */
  71.     public void configRegisterStringKey(String key, String def, String desc) {
  72. StringConfigParameter parm=new StringConfigParameter(key,def,desc);
  73. registerConfig(parm);
  74.     }
  75.     public void configRegisterStringKey(ConfigurationListener l,String key, String def, String desc) {
  76. StringConfigParameter parm=new StringConfigParameter(key,def,desc);
  77. registerConfig(parm);
  78. parm.addConfigurationListener(l);
  79.     }
  80.     /**
  81.      * Register a configuration key that can take String values
  82.      * @param key Name of the configuration key
  83.      * @param default Default value for this key
  84.      * @param desc Description for this key
  85.      */
  86.     public void configRegisterIntegerKey(String key, String def, String desc) {
  87. IntegerConfigParameter parm=new IntegerConfigParameter(key,def,desc);
  88. registerConfig(parm);
  89.     }
  90.     public void configRegisterIntegerKey(ConfigurationListener l,String key, String def, String desc) {
  91. IntegerConfigParameter parm=new IntegerConfigParameter(key,def,desc);
  92. registerConfig(parm);
  93. parm.addConfigurationListener(l);
  94.     }
  95.     /**
  96.      * Register a configuration key that can take String values and crypts them
  97.      * @param key Name of the configuration key
  98.      * @param default Default value for this key
  99.      * @param desc Description for this key
  100.      */
  101.     public void configRegisterCryptedStringKey(String key, String def, String desc) {
  102. CryptedStringConfigParameter parm=new CryptedStringConfigParameter(key,def,desc);
  103. registerConfig(parm);
  104.     }
  105.     public void configRegisterCryptedStringKey(ConfigurationListener l,String key, String def, String desc) {
  106. CryptedStringConfigParameter parm=new CryptedStringConfigParameter(key,def,desc);
  107. registerConfig(parm);
  108. parm.addConfigurationListener(l);
  109.     }
  110.     /**
  111.      * Register a configuration key that can take one of a choice of possible values
  112.      * @param key Name of the configuration key
  113.      * @param desc Description for this key
  114.      * @see configAddChoice
  115.      */
  116.     public void configRegisterChoiceKey(String key, String desc) {
  117. ChoiceConfigParameter parm=new ChoiceConfigParameter(key,desc);
  118. registerConfig(parm);
  119.     }
  120.     public void configRegisterChoiceKey(ConfigurationListener l,String key, String desc) {
  121. ChoiceConfigParameter parm=new ChoiceConfigParameter(key,desc);
  122. registerConfig(parm);
  123. parm.addConfigurationListener(l);
  124.     }
  125.     public void configRegisterYesNoKey(String key, String desc) {
  126. ChoiceConfigParameter parm=new ConfigYesNoParameter(key,desc);
  127. registerConfig(parm);
  128.     }
  129.     public void configRegisterYesNoKey(ConfigurationListener l,String key, String desc) {
  130. ChoiceConfigParameter parm=new ConfigYesNoParameter(key,desc);
  131. registerConfig(parm);
  132. parm.addConfigurationListener(l);
  133.     }
  134.     /**
  135.      * Add a choice to an already-existing Choice-key
  136.      * @param key Name of the configuration key where a choice is to be added
  137.      * @param choice Name of the new choice
  138.      * @param desc Description for this choice
  139.      */
  140.     public void configAddChoice(String key, String choice, String desc) {
  141. if(config_scheme!=null) {
  142.     ConfigParameter parm=(ConfigParameter)config_scheme.get(key);
  143.     if(parm instanceof ChoiceConfigParameter) {
  144. ((ChoiceConfigParameter)parm).addChoice(choice,desc);
  145.     }
  146. }
  147.     }
  148.     /**
  149.      * Add a configuration listener for a key.
  150.      * There may be any amount of Listeners for a parameter.
  151.      */
  152.     public void addConfigurationListener(String key,ConfigurationListener l) {
  153. ConfigParameter parm=getConfigParameter(key);
  154. parm.addConfigurationListener(l);
  155.     }
  156.     public ConfigParameter getConfigParameter(String key) {
  157. return (ConfigParameter)config_scheme.get(key);
  158.     }
  159.     public String getConfigParameterType(String key) {
  160. return getConfigParameter(key).getType();
  161.     }
  162.     public String getConfigParameterGroup(String key) {
  163. return getConfigParameter(key).getGroup();
  164.     }
  165.     public Object getDefaultValue(String key) {
  166. ConfigParameter cp=(ConfigParameter)config_scheme.get(key);
  167. if(cp!=null) {
  168.     return cp.getDefault();
  169. } else {
  170.     return null;
  171. }
  172.     }
  173.     public String getDescription(String key) {
  174. ConfigParameter cp=(ConfigParameter)config_scheme.get(key);
  175. if(cp!=null) {
  176.     return cp.getDescription();
  177. } else {
  178.     return null;
  179. }
  180.     }
  181.     public Enumeration getPossibleKeys() {
  182. return config_scheme.keys();
  183.     }
  184.     public void notifyConfigurationChange(String key) {
  185. //  System.err.println("NOTIFY: "+key);
  186. ConfigParameter parm=getConfigParameter(key);
  187. if(parm!=null) {
  188.     Enumeration enum=parm.getConfigurationListeners();
  189.     while(enum.hasMoreElements()) {
  190. ConfigurationListener l=(ConfigurationListener)enum.nextElement();
  191. //  System.err.println(l);
  192. try {
  193.     l.notifyConfigurationChange(key);
  194. } catch(Exception e) {
  195.     e.printStackTrace();
  196. }
  197.     }
  198. }
  199.     }
  200.     public void registerConfig(ConfigParameter parm) {
  201. if(config_scheme == null) {
  202.     config_scheme=new Hashtable();
  203. }
  204. Enumeration e=config_scheme.keys();
  205. boolean flag=false;
  206. while(e.hasMoreElements()) {
  207.     if(e.nextElement().equals(parm.getKey())) {
  208. flag=true;
  209. break;
  210.     }
  211. }
  212. if(!flag) {
  213.     config_scheme.put(parm.getKey(),parm);
  214. }
  215.     }
  216. }
  217.