package com.dragome.forms.bindings.client.util; import java.util.ArrayList; import java.util.List; import com.dragome.forms.bindings.client.binding.Disposable; /** * Created by IntelliJ IDEA. * User: andrew * Date: Apr 1, 2010 * Time: 2:48:51 PM * To change this template use File | Settings | File Templates. */ public class SubscriptionList<T> { private ArrayList<Subscription<T>> subscriptions= new ArrayList<Subscription<T>>(); private List<Subscription<T>> copySubscriptions() { return new ArrayList<Subscription<T>>(subscriptions); } public void visitSubscribers(Visitor<T> visitor) { for (Subscription<T> subscription : copySubscriptions()) { visitor.visit(subscription.getTarget()); } } public <S extends T> Disposable subscribe(S subscriber) { Subscription<T> subscription= new Subscription<T>(subscriber); subscriptions.add(subscription); return subscription; } private class Subscription<T> implements Disposable { private T target; private Subscription(T target) { this.target= target; } public T getTarget() { return target; } public void dispose() { subscriptions.remove(this); } } public interface Visitor<T> { void visit(T subscriber); } }