/* * 11/19/04 1.0 moved to LGPL. * 29/01/00 Initial version. mdm@techie.com *----------------------------------------------------------------------- * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as published * by the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *---------------------------------------------------------------------- */ package audio.javazoom.jl.player; import audio.javazoom.jl.decoder.JavaLayerException; /** * An <code>AudioDeviceFactory</code> class is responsible for creating * a specific <code>AudioDevice</code> implementation. A factory implementation * can be as simple or complex as desired and may support just one implementation * or may return several implementations depending upon the execution * environment. * <p> * When implementing a factory that provides an AudioDevice that uses * class that may not be present, the factory should dynamically link to any * specific implementation classes required to instantiate or test the audio * implementation. This is so that the application as a whole * can run without these classes being present. The audio * device implementation, however, will usually statically link to the classes * required. (See the JavaSound deivce and factory for an example * of this.) * * @see FactoryRegistry * * @since 0.0.8 * @author Mat McGowan */ public abstract class AudioDeviceFactory { /** * Creates a new <code>AudioDevice</code>. * * @return a new instance of a specific class of <code>AudioDevice</code>. * @throws JavaLayerException if an instance of AudioDevice could not * be created. */ public abstract AudioDevice createAudioDevice() throws JavaLayerException; /** * Creates an instance of an AudioDevice implementation. * @param loader The <code>ClassLoader</code> to use to * load the named class, or null to use the * system class loader. * @param name The name of the class to load. * @return A newly-created instance of the audio device class. */ protected AudioDevice instantiate(ClassLoader loader, String name) throws ClassNotFoundException, IllegalAccessException, InstantiationException { AudioDevice dev = null; Class cls = null; if (loader==null) { cls = Class.forName(name); } else { cls = loader.loadClass(name); } Object o = cls.newInstance(); dev = (AudioDevice)o; return dev; } }