view src/org/dancres/blitz/cache/CacheListenerSet.java @ 27:511648fa4d64 Version 2.1

Version to 2.1
author Dan Creswell <dan.creswell@gmail.com>
date Mon, 04 Jan 2010 13:00:40 +0000
parents 3dc0c5604566
children
line wrap: on
line source

package org.dancres.blitz.cache;

import java.util.ArrayList;

/**
   Utility class which handles aspects of CacheListener management including
   signalling of an event
 */
public class CacheListenerSet {
    public static final int LOADED = 1;
    public static final int FLUSHED = 2;
    public static final int DIRTIED = 3;

    private ArrayList theListeners = new ArrayList();

    public CacheListenerSet() {
    }

    public void add(CacheListener aListener) {
        synchronized(theListeners) {
            if (! theListeners.contains(aListener)) {
                theListeners.add(aListener);
            }
        }
    }

    public void signal(int aSignal, Identifiable aTarget) {
        CacheListener[] myListeners;

        synchronized(theListeners) {
            myListeners = new CacheListener[theListeners.size()];
            myListeners = (CacheListener[]) theListeners.toArray(myListeners);
        }

        for (int i = 0; i < myListeners.length; i++) {
            CacheListener myListener = myListeners[i];

            switch (aSignal) {
                case LOADED: {
                    myListener.loaded(aTarget);
                    break;
                }
                case FLUSHED: {
                    myListener.flushed(aTarget);
                    break;
                }
                case DIRTIED: {
                    myListener.dirtied(aTarget);
                    break;
                }
            }
        }
    }
}