src/org/sonews/config/Config.java
author František Kučera <franta-hg@frantovo.cz>
Thu, 05 Jul 2012 13:19:19 +0200
changeset 119 f5b57e221e38
parent 58 b2df305a13ce
permissions -rwxr-xr-x
mezery, tabulátory
     1 /*
     2  *   SONEWS News Server
     3  *   see AUTHORS for the list of contributors
     4  *
     5  *   This program is free software: you can redistribute it and/or modify
     6  *   it under the terms of the GNU General Public License as published by
     7  *   the Free Software Foundation, either version 3 of the License, or
     8  *   (at your option) any later version.
     9  *
    10  *   This program is distributed in the hope that it will be useful,
    11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    13  *   GNU General Public License for more details.
    14  *
    15  *   You should have received a copy of the GNU General Public License
    16  *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
    17  */
    18 package org.sonews.config;
    19 
    20 /**
    21  * Configuration facade class.
    22  * @author Christian Lins
    23  * @since sonews/1.0
    24  */
    25 public class Config extends AbstractConfig {
    26 
    27 	public static final int LEVEL_CLI = 1;
    28 	public static final int LEVEL_FILE = 2;
    29 	public static final int LEVEL_BACKEND = 3;
    30 	public static final String CONFIGFILE = "sonews.configfile";
    31 	/** BackendConfig key constant. Value is the maximum article size in kilobytes. */
    32 	public static final String ARTICLE_MAXSIZE = "sonews.article.maxsize";
    33 	/** BackendConfig key constant. Value: Amount of news that are feeded per run. */
    34 	public static final String EVENTLOG = "sonews.eventlog";
    35 
    36 	public static final String FEED_NEWSPERRUN = "sonews.feed.newsperrun";
    37 	public static final String FEED_PULLINTERVAL = "sonews.feed.pullinterval";
    38 
    39 	public static final String HOSTNAME = "sonews.hostname";
    40 	public static final String PORT = "sonews.port";
    41 	public static final String TIMEOUT = "sonews.timeout";
    42 	public static final String LOGLEVEL = "sonews.loglevel";
    43 
    44 	public static final String MLPOLL_DELETEUNKNOWN = "sonews.mlpoll.deleteunknown";
    45 	public static final String MLPOLL_HOST = "sonews.mlpoll.host";
    46 	public static final String MLPOLL_PASSWORD = "sonews.mlpoll.password";
    47 	public static final String MLPOLL_USER = "sonews.mlpoll.user";
    48 
    49 	public static final String MLSEND_ADDRESS = "sonews.mlsend.address";
    50 	public static final String MLSEND_RW_FROM = "sonews.mlsend.rewrite.from";
    51 	public static final String MLSEND_RW_SENDER = "sonews.mlsend.rewrite.sender";
    52 	public static final String MLSEND_HOST = "sonews.mlsend.host";
    53 	public static final String MLSEND_PASSWORD = "sonews.mlsend.password";
    54 	public static final String MLSEND_PORT = "sonews.mlsend.port";
    55 	public static final String MLSEND_USER = "sonews.mlsend.user";
    56 	public static final String MLSEND_AUTH = "sonews.mlsend.auth";
    57 
    58 	/** Key constant. If value is "true" every I/O is written to logfile
    59 	 * (which is a lot!) */
    60 	public static final String DEBUG = "sonews.debug";
    61 
    62 	/** Key constant. Value is classname of the JDBC driver */
    63 	public static final String STORAGE_DBMSDRIVER = "sonews.storage.dbmsdriver";
    64 	/** Key constant. Value is JDBC connect String to the database. */
    65 	public static final String STORAGE_DATABASE = "sonews.storage.database";
    66 	/** Key constant. Value is the username for the DBMS. */
    67 	public static final String STORAGE_USER = "sonews.storage.user";
    68 	/** Key constant. Value is the password for the DBMS. */
    69 	public static final String STORAGE_PASSWORD = "sonews.storage.password";
    70 	public static final String STORAGE_PROVIDER = "sonews.storage.provider";
    71 
    72 	/** Key constant. Value is the name of the host which is allowed to use the
    73 	 *  XDAEMON command; default: "localhost" */
    74 	public static final String XDAEMON_HOST = "sonews.xdaemon.host";
    75 
    76 	/** The config key for the filename of the logfile */
    77 	public static final String LOGFILE = "sonews.log";
    78 	public static final String[] AVAILABLE_KEYS = {
    79 		ARTICLE_MAXSIZE,
    80 		EVENTLOG,
    81 		FEED_NEWSPERRUN,
    82 		FEED_PULLINTERVAL,
    83 		HOSTNAME,
    84 		MLPOLL_DELETEUNKNOWN,
    85 		MLPOLL_HOST,
    86 		MLPOLL_PASSWORD,
    87 		MLPOLL_USER,
    88 		MLSEND_ADDRESS,
    89 		MLSEND_HOST,
    90 		MLSEND_PASSWORD,
    91 		MLSEND_PORT,
    92 		MLSEND_RW_FROM,
    93 		MLSEND_RW_SENDER,
    94 		MLSEND_USER,
    95 		PORT,
    96 		TIMEOUT,
    97 		XDAEMON_HOST
    98 	};
    99 	private static Config instance = new Config();
   100 
   101 	public static Config inst() {
   102 		return instance;
   103 	}
   104 
   105 	private Config() {
   106 	}
   107 
   108 	@Override
   109 	public String get(String key, String def) {
   110 		String val = CommandLineConfig.getInstance().get(key, null);
   111 
   112 		if (val == null) {
   113 			val = FileConfig.getInstance().get(key, null);
   114 		}
   115 
   116 		if (val == null) {
   117 			val = BackendConfig.getInstance().get(key, def);
   118 		}
   119 
   120 		return val;
   121 	}
   122 
   123 	public String get(int maxLevel, String key, String def) {
   124 		String val = CommandLineConfig.getInstance().get(key, null);
   125 
   126 		if (val == null && maxLevel >= LEVEL_FILE) {
   127 			val = FileConfig.getInstance().get(key, null);
   128 			if (val == null && maxLevel >= LEVEL_BACKEND) {
   129 				val = BackendConfig.getInstance().get(key, def);
   130 			}
   131 		}
   132 
   133 		return val != null ? val : def;
   134 	}
   135 
   136 	@Override
   137 	public void set(String key, String val) {
   138 		set(LEVEL_BACKEND, key, val);
   139 	}
   140 
   141 	public void set(int level, String key, String val) {
   142 		switch (level) {
   143 			case LEVEL_CLI: {
   144 				CommandLineConfig.getInstance().set(key, val);
   145 				break;
   146 			}
   147 			case LEVEL_FILE: {
   148 				FileConfig.getInstance().set(key, val);
   149 				break;
   150 			}
   151 			case LEVEL_BACKEND: {
   152 				BackendConfig.getInstance().set(key, val);
   153 				break;
   154 			}
   155 		}
   156 	}
   157 }