/*
* Copyright 2004-2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.compass.core.config;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
/**
* Runtime settings for Compass applies on the Session level. Reading settings
* is first perfomed against the runtime settings set, and then the global settings.
* Writing settings will only apply on the runtime settings and not affect the
* global settings.
*
* @author kimchy
*/
public class RuntimeCompassSettings extends CompassSettings {
private CompassSettings globalSettings;
private CompassSettings runtimeSettings;
public RuntimeCompassSettings(CompassSettings globalSettings) {
this.globalSettings = globalSettings;
this.runtimeSettings = new CompassSettings();
}
public void addSettings(Properties settings) {
runtimeSettings.addSettings(settings);
}
public void addSettings(Map<String, Object> settings) {
runtimeSettings.addSettings(settings);
}
public void addSettings(CompassSettings settings) {
runtimeSettings.addSettings(settings);
}
public CompassSettings copy() {
RuntimeCompassSettings copy = new RuntimeCompassSettings(globalSettings);
copy.runtimeSettings = runtimeSettings.copy();
return copy;
}
public String getSetting(String setting) {
String value = runtimeSettings.getSetting(setting);
if (value != null) {
return value;
}
return globalSettings.getSetting(setting);
}
public Object getSettingAsObject(String setting) {
Object value = runtimeSettings.getSettingAsObject(setting);
if (value != null) {
return value;
}
return globalSettings.getSettingAsObject(setting);
}
public String getSetting(String setting, String defaultValue) {
String value = runtimeSettings.getSetting(setting);
if (value != null) {
return value;
}
return globalSettings.getSetting(setting, defaultValue);
}
public Map<String, CompassSettings> getSettingGroups(String settingPrefix) {
Map<String, CompassSettings> group = runtimeSettings.getSettingGroups(settingPrefix);
if (group.size() != 0) {
return group;
}
return globalSettings.getSettingGroups(settingPrefix);
}
public float getSettingAsFloat(String setting, float defaultValue) {
String value = runtimeSettings.getSetting(setting);
if (value != null) {
return runtimeSettings.getSettingAsFloat(setting, defaultValue);
}
return globalSettings.getSettingAsFloat(setting, defaultValue);
}
public int getSettingAsInt(String setting, int defaultValue) {
String value = runtimeSettings.getSetting(setting);
if (value != null) {
return runtimeSettings.getSettingAsInt(setting, defaultValue);
}
return globalSettings.getSettingAsInt(setting, defaultValue);
}
public long getSettingAsLong(String setting, long defaultValue) {
String value = runtimeSettings.getSetting(setting);
if (value != null) {
return runtimeSettings.getSettingAsLong(setting, defaultValue);
}
return globalSettings.getSettingAsLong(setting, defaultValue);
}
public boolean getSettingAsBoolean(String setting, boolean defaultValue) {
String value = runtimeSettings.getSetting(setting);
if (value != null) {
return runtimeSettings.getSettingAsBoolean(setting, defaultValue);
}
return globalSettings.getSettingAsBoolean(setting, defaultValue);
}
public long getSettingAsTimeInSeconds(String setting, long defaultValue) {
String value = runtimeSettings.getSetting(setting);
if (value != null) {
return runtimeSettings.getSettingAsTimeInSeconds(setting, defaultValue);
}
return globalSettings.getSettingAsTimeInSeconds(setting, defaultValue);
}
public long getSettingAsTimeInMillis(String setting, long defaultValue) {
String value = runtimeSettings.getSetting(setting);
if (value != null) {
return runtimeSettings.getSettingAsTimeInMillis(setting, defaultValue);
}
return globalSettings.getSettingAsTimeInMillis(setting, defaultValue);
}
public long getSettingAsBytes(String setting, long defaultValue) {
String value = runtimeSettings.getSetting(setting);
if (value != null) {
return runtimeSettings.getSettingAsBytes(setting, defaultValue);
}
return globalSettings.getSettingAsBytes(setting, defaultValue);
}
public double getSettingAsDouble(String setting, double defaultValue) {
String value = runtimeSettings.getSetting(setting);
if (value != null) {
return runtimeSettings.getSettingAsDouble(setting, defaultValue);
}
return globalSettings.getSettingAsDouble(setting, defaultValue);
}
public Class getSettingAsClass(String setting, Class clazz) throws ClassNotFoundException {
String value = runtimeSettings.getSetting(setting);
if (value != null) {
return runtimeSettings.getSettingAsClass(setting, clazz);
}
return globalSettings.getSettingAsClass(setting, clazz);
}
public Class getSettingAsClass(String setting, Class clazz, ClassLoader classLoader) throws ClassNotFoundException {
String value = runtimeSettings.getSetting(setting);
if (value != null) {
return runtimeSettings.getSettingAsClass(setting, clazz, classLoader);
}
return globalSettings.getSettingAsClass(setting, clazz, classLoader);
}
public Object getSettingAsInstance(String setting, String defaultClass) {
Object value = runtimeSettings.getSettingAsObject(setting);
if (value != null) {
return runtimeSettings.getSettingAsInstance(setting, defaultClass);
}
return globalSettings.getSettingAsInstance(setting, defaultClass);
}
public CompassSettings setSetting(String setting, String value) {
runtimeSettings.setSetting(setting, value);
return this;
}
public CompassSettings setObjectSetting(String setting, Object value) {
runtimeSettings.setObjectSetting(setting, value);
return this;
}
public CompassSettings setBooleanSetting(String setting, boolean value) {
runtimeSettings.setBooleanSetting(setting, value);
return this;
}
public CompassSettings setFloatSetting(String setting, float value) {
runtimeSettings.setFloatSetting(setting, value);
return this;
}
public CompassSettings setIntSetting(String setting, int value) {
runtimeSettings.setIntSetting(setting, value);
return this;
}
public CompassSettings setLongSetting(String setting, long value) {
runtimeSettings.setLongSetting(setting, value);
return this;
}
public CompassSettings setTimeSetting(String setting, long value, TimeUnit timeUnit) {
runtimeSettings.setTimeSetting(setting, value, timeUnit);
return this;
}
public CompassSettings setDoubleSetting(String setting, double value) {
runtimeSettings.setDoubleSetting(setting, value);
return this;
}
public CompassSettings setClassSetting(String setting, Class clazz) {
runtimeSettings.setClassSetting(setting, clazz);
return this;
}
public CompassSettings setGroupSettings(String settingPrefix, String groupName, String[] settings, Object[] values) {
runtimeSettings.setGroupSettings(settingPrefix, groupName, settings, values);
return this;
}
public Object getRegistry(Object key) {
return globalSettings.getRegistry(key);
}
public void setRegistry(Object key, Object value) {
globalSettings.setRegistry(key, value);
}
public Object removeRegistry(Object key) {
return globalSettings.removeRegistry(key);
}
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("Global [").append(globalSettings).append("]");
sb.append("Runtime [").append(runtimeSettings).append("]");
return sb.toString();
}
}