package org.eclipse.iee.editor.core.bindings; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; public class DefaultObservableValue<T> implements IObservableValue<T> { private T fModel; private List<IObserver<T>> observers = new CopyOnWriteArrayList<>(); @Override public void setValue(T value) { T oldValue = fModel; fModel = value; for (IObserver<T> observer : observers) { observer.valueChanged(oldValue, value); } } @Override public T getValue() { return fModel; } @Override public void addObserver(IObserver<T> observer) { if (!observers.contains(observer)) { observers.add(observer); } } @Override public void removeObserver(IObserver<T> observer) { observers.remove(observer); } public void dispose() { } public static <T> DefaultObservableValue<T> fromValue(T value) { DefaultObservableValue<T> observableValue = new DefaultObservableValue<T>(); observableValue.setValue(value); return observableValue; } }