diff -r 000000000000 -r 6fceb66e1ad7 org/sonews/daemon/Config.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/org/sonews/daemon/Config.java Fri Jun 26 16:48:50 2009 +0200 @@ -0,0 +1,149 @@ +/* + * SONEWS News Server + * see AUTHORS for the list of contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package org.sonews.daemon; + +import org.sonews.util.Log; +import java.sql.SQLException; +import org.sonews.daemon.storage.Database; +import org.sonews.util.AbstractConfig; +import org.sonews.util.TimeoutMap; + +/** + * Provides access to the program wide configuration that is stored within + * the server's database. + * @author Christian Lins + * @since sonews/0.5.0 + */ +public final class Config extends AbstractConfig +{ + + /** Config key constant. Value is the maximum article size in kilobytes. */ + public static final String ARTICLE_MAXSIZE = "sonews.article.maxsize"; + + /** Config key constant. Value: Amount of news that are feeded per run. */ + public static final String FEED_NEWSPERRUN = "sonews.feed.newsperrun"; + public static final String FEED_PULLINTERVAL = "sonews.feed.pullinterval"; + public static final String HOSTNAME = "sonews.hostname"; + public static final String PORT = "sonews.port"; + public static final String TIMEOUT = "sonews.timeout"; + public static final String MLPOLL_DELETEUNKNOWN = "sonews.mlpoll.deleteunknown"; + public static final String MLPOLL_HOST = "sonews.mlpoll.host"; + public static final String MLPOLL_PASSWORD = "sonews.mlpoll.password"; + public static final String MLPOLL_USER = "sonews.mlpoll.user"; + public static final String MLSEND_ADDRESS = "sonews.mlsend.address"; + public static final String MLSEND_RW_FROM = "sonews.mlsend.rewrite.from"; + public static final String MLSEND_RW_SENDER = "sonews.mlsend.rewrite.sender"; + public static final String MLSEND_HOST = "sonews.mlsend.host"; + public static final String MLSEND_PASSWORD = "sonews.mlsend.password"; + public static final String MLSEND_PORT = "sonews.mlsend.port"; + public static final String MLSEND_USER = "sonews.mlsend.user"; + + public static final String[] AVAILABLE_KEYS = { + Config.ARTICLE_MAXSIZE, + Config.FEED_NEWSPERRUN, + Config.FEED_PULLINTERVAL, + Config.HOSTNAME, + Config.MLPOLL_DELETEUNKNOWN, + Config.MLPOLL_HOST, + Config.MLPOLL_PASSWORD, + Config.MLPOLL_USER, + Config.MLSEND_ADDRESS, + Config.MLSEND_HOST, + Config.MLSEND_PASSWORD, + Config.MLSEND_PORT, + Config.MLSEND_RW_FROM, + Config.MLSEND_RW_SENDER, + Config.MLSEND_USER, + Config.PORT, + Config.TIMEOUT + }; + + private static Config instance = new Config(); + + public static Config getInstance() + { + return instance; + } + + private final TimeoutMap values + = new TimeoutMap(); + + private Config() + { + super(); + } + + /** + * Returns the config value for the given key or the defaultValue if the + * key is not found in config. + * @param key + * @param defaultValue + * @return + */ + public String get(String key, String defaultValue) + { + try + { + String configValue = values.get(key); + if(configValue == null) + { + configValue = Database.getInstance().getConfigValue(key); + if(configValue == null) + { + return defaultValue; + } + else + { + values.put(key, configValue); + return configValue; + } + } + else + { + return configValue; + } + } + catch(SQLException ex) + { + Log.msg(ex.getMessage(), false); + return defaultValue; + } + } + + /** + * Sets the config value which is identified by the given key. + * @param key + * @param value + */ + public void set(String key, String value) + { + values.put(key, value); + + try + { + // Write values to database + Database.getInstance().setConfigValue(key, value); + } + catch(SQLException ex) + { + ex.printStackTrace(); + } + } + +}