// Copyright 1996, Marimba Inc. All Rights Reserved.


// @(#)AudioCache.java, 1.2, 07/03/96





package marimba.gui;





import java.util.*;


import java.net.URL;


import java.applet.AudioClip;


import sun.applet.AppletAudioClip;





/**


 * This class fetches and caches audio clips.


 *


 * @author	Arthur van Hoff


 * @version 	1.2, 07/03/96


 */


public final class AudioCache {


    final static Hashtable audioHash = new Hashtable();





    /**


     * Get an audioclip.


     */


    public static AudioClip get(URL url) {


	//System.getSecurityManager().checkConnect(url.getHost(), url.getPort());


	AudioClip clip = (AudioClip)audioHash.get(url);


	if (clip == null) {


	    audioHash.put(url, clip = new AppletAudioClip(url));


	}


	return clip;


    }





    /**


     * Check if a URL is the prefix of another URL.


     */


    static boolean prefixURL(URL prefix, URL child) {


	return prefix.getProtocol().equals(child.getProtocol()) &&


	    prefix.getHost().equals(child.getHost()) &&


	    (prefix.getPort() == child.getPort()) &&


	    child.getFile().startsWith(prefix.getFile());


    }





    /**


     * Flush some audio clips from the cache.


     */


    public static void flush(URL prefix) {


	Vector v = null;


	for (Enumeration e = audioHash.keys() ; e.hasMoreElements() ;) {


	    URL audioUrl = (URL)e.nextElement();


	    if (prefixURL(prefix, audioUrl)) {


		if (v == null) {


		    v = new Vector();


		}


		v.addElement(audioUrl);


		//System.out.println("FLUSHING: " + audioUrl.toExternalForm());


	    }


	}


	if (v != null) {


	    for (Enumeration e = v.elements() ; e.hasMoreElements() ;) {


		audioHash.remove(e.nextElement());


	    }


	}


    }


}


