package org.openhab.domain.rule;
import org.openhab.domain.util.ILogger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* Created by Tony Alpskog in 2014.
*/
public class UnitValueChangedListener {
private final ILogger mLogger;
Map<String, List<OnValueChangedListener>> mOnValueChangedListeners = new HashMap<String, List<OnValueChangedListener>>();
public UnitValueChangedListener(ILogger logger) {
mLogger = logger;
}
// public void registerOnValueChangedListener(OnValueChangedListener eventListener, List<OnValueChangedListener> listenersToListenFor) {
// Iterator<OnValueChangedListener> iterator = listenersToListenFor.iterator();
// while(iterator.hasNext()) {
// OnValueChangedListener subListener = iterator.next();
// String listenerId = subListener.getDataSourceId();
// if(!StringHandler.isNullOrEmpty(listenerId))
// registerOnValueChangedListener(eventListener, listenerId);
// }
// }
public void registerOnValueChangedListener(OnValueChangedListener eventListener, String dataSourceId) {
if(!mOnValueChangedListeners.containsKey(dataSourceId)) {
List<OnValueChangedListener> newList = new ArrayList<OnValueChangedListener>();
newList.add(eventListener);
mOnValueChangedListeners.put(dataSourceId, newList);
} else {
List<OnValueChangedListener> listenerList = mOnValueChangedListeners.get(dataSourceId);
if(!listenerList.contains(eventListener))
listenerList.add(eventListener);
}
}
public void unregisterOnValueChangedListener(OnValueChangedListener eventListener) {
for (List<OnValueChangedListener> listenerList : mOnValueChangedListeners.values()) {
if (listenerList.contains(eventListener))
listenerList.remove(eventListener);
}
}
public void fireValueChangedEvent(String sourceID, String value) {
mLogger.v("UnitValueChangedListener", String.format("ValueChanged event: %s = %s", sourceID, value));
if(!mOnValueChangedListeners.containsKey(sourceID)) {
List<OnValueChangedListener> listenerList = mOnValueChangedListeners.get(sourceID);
Iterator<OnValueChangedListener> iterator = listenerList.iterator();
while(iterator.hasNext()) {
iterator.next().onValueChanged(sourceID, value);
}
}
}
}