/** * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE, Version 3, 29 June 2007; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.gnu.org/licenses/lgpl-3.0.txt * * 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. */ /** * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE, Version 3, 29 June 2007; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.gnu.org/licenses/lgpl-3.0.txt * * 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 org.kevoree.platform.android.boot.utils; import java.util.ArrayList; /** * Created by jed * User: jedartois@gmail.com * Date: 08/03/12 * Time: 11:33 */ public class KObservable<T> implements IKObservable<T> { private final ArrayList<OnChangeListener<T>> listeners = new ArrayList<OnChangeListener<T>>(); public void addListener(OnChangeListener<T> listener) { synchronized (listeners) { listeners.add(listener); } } public void removeListener(OnChangeListener<T> listener) { synchronized (listeners) { listeners.remove(listener); } } protected void notifyObservers(final T model) { synchronized (listeners) { for (OnChangeListener<T> listener : listeners) { listener.onChange(model); } } } }