/* * Copyright 2015 Evgeny Dolganov (evgenij.dolganov@gmail.com). * * 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 och.service.props.impl; import static och.util.Util.*; import java.math.BigDecimal; import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; import och.api.exception.PropertyNotFoundException; import och.service.props.KeyWithDef; import och.service.props.PropsChangedListener; import och.service.props.WriteProps; import org.apache.commons.logging.Log; public abstract class BaseProps implements WriteProps { protected Log log = getLog(getClass()); private CopyOnWriteArrayList<PropsChangedListener> listeners = new CopyOnWriteArrayList<>(); @Override public void addChangedListener(PropsChangedListener l) { listeners.add(l); } protected void fireChangedEvent(Set<String> keys){ for (PropsChangedListener l : listeners) { l.onChanged(keys); } } @Override public String getVal(Object key) { return getVal(key, (String)null); } @Override public String findVal(Object key) { String out = getVal(key, (String)null); if(out == null) throw new PropertyNotFoundException(key); return out; } @Override public Integer getVal(Object key, Integer defaultVal) { return tryParseInt(getVal(key), defaultVal); } @Override public Long getVal(Object key, Long defaultVal) { return tryParseLong(getVal(key), defaultVal); } @Override public Boolean getVal(Object key, Boolean defaultVal) { return tryParseBool(getVal(key), defaultVal); } @Override public Double getVal(Object key, Double defaultVal) { return tryParseDouble(getVal(key), defaultVal); } @Override public BigDecimal getVal(Object key, BigDecimal defaultVal) { return tryParseBigDecimal(getVal(key), defaultVal); } @Override public Class<?> getVal(Object key, Class<?> defaultVal) { String className = getVal(key); if(className == null) return defaultVal; try { return Class.forName(className); } catch (ClassNotFoundException e) { log.warn("ClassNotFoundException for key: "+key); return defaultVal; } } @Override public void putVal(Object key, Integer val) { putVal(key, val == null? (String) null : val.toString()); } @Override public void putVal(Object key, Long val) { putVal(key, val == null? (String) null : val.toString()); } @Override public void putVal(Object key, Boolean val) { putVal(key, val == null? (String) null : val.toString()); } @Override public void putVal(Object key, Class<?> val) { putVal(key, val == null? null : val.getName()); } @Override public void removeVal(Object key) { putVal(key, (String)null); } @Override public String getStrVal(KeyWithDef key){ return getVal(key, key.strDefVal()); } @Override public Integer getIntVal(KeyWithDef key){ return getVal(key, key.intDefVal()); } @Override public Long getLongVal(KeyWithDef key){ return getVal(key, key.longDefVal()); } @Override public Boolean getBoolVal(KeyWithDef key){ return getVal(key, key.boolDefVal()); } @Override public Double getDoubleVal(KeyWithDef key) { return getVal(key, key.doubleDefVal()); } @Override public BigDecimal getBigDecimalVal(KeyWithDef key) { return getVal(key, key.bigDecimalDefVal()); } }