package com.serliunx.ddns.config; import com.serliunx.ddns.support.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.LinkedHashMap; import java.util.Map; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * 配置信息的抽象实现, 定义公共逻辑 * * @author SerLiunx * @version 1.0.0 * @since 2024/5/15 */ public abstract class AbstractConfiguration implements Configuration { protected final Logger log = LoggerFactory.getLogger(this.getClass()); protected final Map valueMap = new LinkedHashMap<>(16); protected final Lock loadLock = new ReentrantLock(); public AbstractConfiguration() {} @Override public Integer getInteger(String key) { Assert.notNull(key); String v = valueMap.get(key); return v == null ? null : Integer.valueOf(v); } @Override public Integer getInteger(String key, Integer defaultValue) { Assert.notNull(key, defaultValue); Integer v = getInteger(key); return v == null ? defaultValue : v; } @Override public Long getLong(String key) { Assert.notNull(key); String v = valueMap.get(key); return v == null ? null : Long.valueOf(v); } @Override public Long getLong(String key, Long defaultValue) { Assert.notNull(key, defaultValue); Long v = getLong(key); return v == null ? defaultValue : v; } @Override public String getString(String key) { Assert.notNull(key); return valueMap.get(key); } @Override public String getString(String key, String defaultValue) { Assert.notNull(key, defaultValue); String v = getString(key); return v == null ? defaultValue : v; } @Override public Boolean getBoolean(String key) { Assert.notNull(key); return Boolean.valueOf(valueMap.get(key)); } @Override public Boolean getBoolean(String key, Boolean defaultValue) { Assert.notNull(key, defaultValue); String value = valueMap.get(key); return value == null ? defaultValue : Boolean.valueOf(value); } @Override @SuppressWarnings({"rawtypes", "unchecked"}) public T getEnum(Class clazz, String key) { String rawValue = getString(key); Assert.notNull(rawValue); return (T)Enum.valueOf(clazz, rawValue); } @Override @SuppressWarnings({"rawtypes"}) public T getEnum(Class clazz, String key, T defaultValue) { T value = null; try { value = getEnum(clazz, key); }catch (Exception ignored){} return value == null ? defaultValue : value; } @Override public void refresh() { // 刷新配置信息 refresh0(); final Boolean needPrint = getBoolean(ConfigurationKeys.KEY_CFG_LOG_ONSTART, false); if (needPrint) printDetails(); } @Override public Map getAllKeyAndValue() { return valueMap; } @Override public int getPriority() { return Integer.MAX_VALUE; } /** * 载入配置信息请加锁 */ protected void load() { try { loadLock.lock(); // 清空原有的配置信息 valueMap.clear(); load0(); }finally { loadLock.unlock(); } } /** * 打印配置信息 */ protected void printDetails(){ log.info("=====配置信息====="); valueMap.forEach((k, v) -> { log.info("{} = {}", k, v); }); log.info("================="); } /** * 具体的刷新逻辑 */ protected abstract void refresh0(); /** * 载入逻辑 */ protected abstract void load0(); }