package com.baidu.disconf.client.addons.properties;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Useful base class for implementing {@link ReloadableProperties}.
*/
public class ReloadablePropertiesBase extends DelegatingProperties implements ReloadableProperties {
protected static final Logger LOGGER = LoggerFactory.getLogger(ReloadablePropertiesBase.class);
private List<IReloadablePropertiesListener> listeners = new ArrayList<IReloadablePropertiesListener>();
private Properties internalProperties;
public void setListeners(List listeners) {
this.listeners = listeners;
}
protected Properties getDelegate() {
synchronized(this) {
return internalProperties;
}
}
public Properties getProperties() {
return getDelegate();
}
/**
* 添加listener
*
* @param l
*/
public void addReloadablePropertiesListener(IReloadablePropertiesListener l) {
listeners.add(l);
}
/**
* 删除listener
*
* @param l
*
* @return
*/
public boolean removeReloadablePropertiesListener(IReloadablePropertiesListener l) {
return listeners.remove(l);
}
/**
* 通过listener去通知 reload
*
* @param oldProperties
*/
protected void notifyPropertiesChanged(Properties oldProperties) {
PropertiesReloadedEvent event = new PropertiesReloadedEvent(this, oldProperties);
for (IReloadablePropertiesListener listener : listeners) {
listener.propertiesReloaded(event);
}
}
/**
* set value 触发
*
* @param properties
*/
protected void setProperties(Properties properties) {
Properties oldProperties = internalProperties;
synchronized(this) {
internalProperties = properties;
}
notifyPropertiesChanged(oldProperties);
}
}