/* * Plugins.java * * Created on April 18, 2003, 10:57 AM */ /***************************************************************************** * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * - Redistribution of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * - Redistribution in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materails provided with the distribution. * * Neither the name Sun Microsystems, Inc. or the names of the contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * This software is provided "AS IS," without a warranty of any kind. * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING * ANY IMPLIED WARRANT OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR * NON-INFRINGEMEN, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS * A RESULT OF USING, MODIFYING OR DESTRIBUTING THIS SOFTWARE OR ITS * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, * INCIDENTAL OR PUNITIVE DAMAGES. HOWEVER CAUSED AND REGARDLESS OF THE THEORY * OF LIABILITY, ARISING OUT OF THE USE OF OUR INABILITY TO USE THIS SOFTWARE, * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. * * You acknowledge that this software is not designed or intended for us in * the design, construction, operation or maintenance of any nuclear facility * *****************************************************************************/ package net.java.games.util.plugins; /** * * @author jeff */ import java.io.*; import java.util.*; import java.util.jar.*; /** This is the application interface to the Plugin system. * One Plugins object should be created for each plug-in * directory tree root. * * On creation the Plugins object will scan its assigned * directory tree and examine all Jar files in that tree to * see if they qualify as Plug-ins. * * The Plugin classes may then be retrived from the Plugins object by calling * the appropriate get function (see below). * * If a plugin requires a native code library, that library must be present * in the same directory as the plugin Jar file. * */ public class Plugins { static final boolean DEBUG = true; List pluginList= new ArrayList(); /** Creates a new instance of Plugins * @param pluginRoot The root od the directory tree to scan for Jars * containing plugins. */ public Plugins(File pluginRoot) throws IOException { scanPlugins(pluginRoot); } private void scanPlugins(File dir) throws IOException { File[] files = dir.listFiles(); if (files == null) { throw new FileNotFoundException("Plugin directory "+dir.getName()+ " not found."); } for(int i=0;iany of the passed in set of * Interfaces (either directly or through inheritance.) * @param interfaces A set of interfaces to match against the interfaces * implemented by the plugin classes. * @return The list of plugin classes that implement at least * one member of the passed in set of interfaces. */ public Class[] getImplementsAny(Class[] interfaces){ List matchList = new ArrayList(pluginList.size()); Set interfaceSet = new HashSet(); for(int i=0;iall of the passed in set of * Interfaces (either directly or through inheritance.) * @param interfaces A set of interfaces to match against the interfaces * implemented by the plugin classes. * @return The list of plugin classes that implement at least * one member of the passed in set of interfaces. */ public Class[] getImplementsAll(Class[] interfaces){ List matchList = new ArrayList(pluginList.size()); Set interfaceSet = new HashSet(); for(int i=0;i