/*
* Copyright 2014 Avanza Bank AB
*
* 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 com.avanza.astrix.config;
/**
* This is an abstraction for an application/framework setting. A Setting
* can be read from a {@link DynamicConfig} instance. It has a name and also
* an associated default value which is used when a DynamicConfig instance
* does not hold a value for this Setting. <p>
*
* The Setting abstraction is parameterized with the type of the given setting.
*
* @author Elias Lindholm (elilin)
*
* @param <T>
*/
public interface Setting<T> {
/**
* The name of this Setting. Used when reading this Setting from a DynamicConfig instance. <p>
*
* @return
*/
String name();
/**
* Reads this Setting from the given {@link DynamicConfig} instance.
* If the DynamicConfig instance does not hold a value for this
* Setting, then the default value will be returned.
*
* @param config DynamicConfig instance to read this setting from
* @return This value of this setting in the given {@link DynamicConfig} instance,
* or the default value if the DynamicConfig instance does not contain a
* value for this Setting
*/
DynamicProperty<T> getFrom(DynamicConfig config);
/**
* The default value for this setting.
*
* For settings of primitive types this method
* returns the boxed version of the given type,
* and never returns null.
* @return
*/
T defaultValue();
}