/** * Copyright (c) 2011-2012, Thilo Planz. All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package v7db.files; import java.io.IOException; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Properties; import java.util.Set; import java.util.TreeSet; import java.util.Map.Entry; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.PropertyConfigurator; import com.mongodb.Mongo; import com.mongodb.MongoException; import com.mongodb.MongoURI; public class Configuration { private static final Properties props = new Properties(); /** * For every property starting with "-D" (such as "-DDEBUG.MONGO") set it as * a system property (unless already set), and remove it from the properties * object */ static void setSystemProperties(Properties properties) { Iterator<Entry<Object, Object>> it = properties.entrySet().iterator(); while (it.hasNext()) { Entry<Object, Object> e = it.next(); String key = (String) e.getKey(); if (key.startsWith("-D")) { String kk = key.substring(2); if (System.getProperty(kk) == null) System.setProperty(kk, (String) e.getValue()); it.remove(); } } } static void init(Properties settings) throws IOException { props.clear(); props.load(Main.class.getResourceAsStream("defaults.properties")); if (settings != null) props.putAll(settings); props.putAll(System.getProperties()); // configure Log4j PropertyConfigurator.configure(props); } static Properties getProperties() { return props; } public static String getProperty(String key) { return props.getProperty(key); } /** * property string value is split by comma and trimmed for space */ static String[] getArrayProperty(String key) { String[] x = StringUtils.stripAll(StringUtils.split(getProperty(key), ',')); if (x == null) x = ArrayUtils.EMPTY_STRING_ARRAY; return x; } public static Set<String> checkEndpoints() { Set<String> result = new TreeSet<String>(); List<String> duplicates = new ArrayList<String>(); for (String ep : getArrayProperty("webdav.endpoints")) { if (!result.add(ep)) { duplicates.add(ep); } } for (String ep : getArrayProperty("formpost.endpoints")) { if (!result.add(ep)) { duplicates.add(ep); } } if (duplicates.isEmpty()) return result; throw new IllegalArgumentException("duplicate endpoint definition for " + StringUtils.join(duplicates, ",")); } public static Properties getEndpointProperties(String endpoint) { return new EndpointProperties(endpoint, props); } public static final Mongo getMongo() throws UnknownHostException, MongoException { return getMongo(props); } public static final Mongo getMongo(Properties props) throws UnknownHostException, MongoException { MongoURI uri = new MongoURI(props.getProperty("db.uri")); Mongo mongo = new Mongo(uri); return mongo; } }