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

WEB邮件程序

开发平台:

C/C++

  1. /* CVS ID: $Id: ConfigStore.java,v 1.3 2000/04/06 08:02:01 wastl Exp $ */
  2. package net.wastl.webmail.config;
  3. import java.util.*;
  4. /*
  5.  * ConfigStore.java
  6.  * 
  7.  * Created: Tue Oct 19 11:54:12 1999
  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 is a generic storage for configuration parameters. 
  27.  * Subclasses must implement setConfigRaw and getConfigRaw.
  28.  *
  29.  * @author Sebastian Schaffert
  30.  * @version
  31.  */
  32. public abstract class ConfigStore  {
  33.     
  34.     protected ConfigScheme scheme;
  35.     public ConfigStore(ConfigScheme cs) {
  36. scheme=cs;
  37.     }
  38.     public ConfigStore() {
  39. this(new ConfigScheme());
  40.     }
  41.     public ConfigScheme getConfigScheme() {
  42. return scheme;
  43.     }
  44.     /**
  45.      * Fetch all keys of the current configuration.
  46.      */
  47.     public Enumeration getConfigKeys() {
  48. return scheme.getPossibleKeys();
  49.     }
  50.     /**
  51.      * Fetch the configuration associated with the specified key.
  52.      * @param key Identifier for the configuration
  53.      */
  54.     public String getConfig(String key) {
  55. String value=getConfigRaw(key.toUpperCase());
  56. if(value==null || value.equals("")) {
  57.     value=(String)scheme.getDefaultValue(key.toUpperCase());
  58. }
  59. if(value==null) {
  60.     value="";
  61. }
  62. return value;
  63.     }
  64.     /**
  65.      * Access a configuration on a low level, e.g. access a file, make a SQL query, ...
  66.      * Will be called by getConfig.
  67.      * return null if undefined
  68.      */
  69.     protected abstract String getConfigRaw(String key);
  70.     public boolean isConfigSet(String key) {
  71. return getConfigRaw(key) != null;
  72.     }
  73.     public void setConfig(String key, String value) throws IllegalArgumentException {
  74. setConfig(key,value,true,true);
  75.     }
  76.     /**
  77.      * Set a configuration "key" to the specified value.
  78.      * @param key Identifier for the configuration
  79.      * @paran value value to set
  80.      */
  81.     public void setConfig(String key, String value, boolean filter, boolean notify) throws IllegalArgumentException {
  82. if(!scheme.isValid(key,value)) throw new IllegalArgumentException();
  83. if(!(isConfigSet(key) && getConfigRaw(key).equals(value))) {
  84. //      System.err.println("Key: "+key);
  85. //      System.err.println("Value old: |"+getConfigRaw(key)+"|");
  86. //      System.err.println("Value new: |"+value+"|");
  87.     setConfigRaw(scheme.getConfigParameterGroup(key),
  88.  key,
  89.  filter?scheme.filter(key,value):value,
  90.  scheme.getConfigParameterType(key));
  91.     if(notify) scheme.notifyConfigurationChange(key);
  92. }
  93.     }
  94.     
  95.     /**
  96.      * Access a configuration on a low level, e.g. access a file, make a SQL query, ...
  97.      * Will be called by setConfig.
  98.      * return null if undefined
  99.      */
  100.     public abstract void setConfigRaw(String group,String key, String value, String type);
  101.     public void addConfigurationListener(String key, ConfigurationListener l) {
  102. scheme.addConfigurationListener(key,l);
  103.     }
  104. } // ConfigStore