diff options
author | jeffpk <[email protected]> | 2003-06-07 00:17:26 +0000 |
---|---|---|
committer | jeffpk <[email protected]> | 2003-06-07 00:17:26 +0000 |
commit | fe011589ffb1f4405fe5dd27ebf94692934250f9 (patch) | |
tree | cfa41512b8a17530e88c999faff2b4c9b6a010fc /src | |
parent | 4ab19a606a56e6bd4d5f2450d6720834d5fb5d63 (diff) |
This commit was generated by cvs2svn to compensate for changes in r4, which
included commits to RCS files with non-trunk default branches.
git-svn-id: file:///home/sven/projects/JOGL/git-svn/svn-server-sync/jutils/trunk@5 052365b4-98e0-4bc5-a281-465471b020e0
Diffstat (limited to 'src')
9 files changed, 815 insertions, 0 deletions
diff --git a/src/java/net/java/games/util/plugins/Plugin.java b/src/java/net/java/games/util/plugins/Plugin.java new file mode 100644 index 0000000..cfb533b --- /dev/null +++ b/src/java/net/java/games/util/plugins/Plugin.java @@ -0,0 +1,60 @@ +/* + * Plugin.java + * + * Created on April 18, 2003, 11:29 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; + +/** This is a marker interface used to mark plugins in a Jar file + * for retrieval by the Plugins class. In order for a class to be + * treated as a Plugin the following must be true: + * + * (1) The name of the class must end with "Plugin". + * (ie MedianCutFilterPlugin, DirectInput EnvrionmentPlugin) + * + * (2) The class must implement the Plugin interface. It can do + * so directly, through inheritence of either a superclass + * that implements this interface, or through the implementation + * of an interface that extends this interface. + * + * + * @author Jeffrey P. Kesselman + * + */ +public interface Plugin { + +} diff --git a/src/java/net/java/games/util/plugins/PluginLoader.java b/src/java/net/java/games/util/plugins/PluginLoader.java new file mode 100644 index 0000000..1882713 --- /dev/null +++ b/src/java/net/java/games/util/plugins/PluginLoader.java @@ -0,0 +1,147 @@ +/* + * PluginLodaer.java + * + * Created on April 18, 2003, 11:32 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.net.*; + +/** This class is used internally by the Plugin system. + * End users of the system are unlikely to need to be aware + * of it. + * + * + * This is the class loader used to keep the namespaces of + * different plugins isolated from each other and from the + * main app code. One plugin loader is created per Jar + * file in the sub-directory tree of the plugin directory. + * + * In addition to isolating java classes this loader also isolates + * DLLs such that plugins with conflicting DLL names may be + * used by simply placing the plugin and its associated DLL + * in a sub-folder of its own. + * + * This class also currently implements methods for testing + * classes for inheritance of superclasses or interfaces. + * This code is genericly useful and should really be moved + * to a seperate ClassUtils class. + * @author Jeffrey Kesselman + */ +public class PluginLoader extends URLClassLoader { + static final boolean DEBUG = false; + File parentDir; + /** Creates a new instance of PluginLodaer + * @param jf The JarFile to load the Plugins from. + * @throws MalformedURLException Will throw this exception if jf does not refer to a + * legitimate Jar file. + */ + public PluginLoader(File jf) throws MalformedURLException { + super(new URL[] {jf.toURL()}); + parentDir = jf.getParentFile(); + } + + /** This method is queried by the System.loadLibrary() + * code to find the actual native name and path to the + * native library to load. + * + * This subclass implementation of this method ensures that + * the native library will be loaded from, and only from, + * the parent directory of the Jar file this loader was + * created to support. This allows different Plugins + * with supporting DLLs of the same name to co-exist, each + * in their own subdirectory. + * @param libname The JNI name of the native library to locate. + * @return Returns a string describing the actual loation of the + * native library in the native file system. + */ + protected String findLibrary(String libname){ + String libpath = parentDir.getPath()+File.separator+ + System.mapLibraryName(libname); + if (DEBUG) { + System.out.println("Returning libname of: "+libpath); + } + return libpath; + } + + /** This function is called as part of scanning the Jar for + * plugins. It checks to make sure the class passed in is + * a legitimate plugin, which is to say that it meets + * the following criteria: + * + * (1) Is not itself an interface + * (2) Implements the Plugin marker interface either directly + * or through inheritance. + * + * interface, either + * @param pc The potential plug-in class to vette. + * @return Returns true if the class meets the criteria for a + * plugin. Otherwise returns false. + */ + public boolean attemptPluginDefine(Class pc){ + return ((!pc.isInterface()) && classImplementsPlugin(pc)); + } + + private boolean classImplementsPlugin(Class testClass){ + if (testClass == null) return false; // end of tree + if (DEBUG) { + System.out.println("testing class "+testClass.getName()); + } + Class[] implementedInterfaces = testClass.getInterfaces(); + for(int i=0;i<implementedInterfaces.length;i++){ + if (DEBUG) { + System.out.println("examining interface: "+implementedInterfaces[i]); + } + if (implementedInterfaces[i]==Plugin.class) { + if (DEBUG) { + System.out.println("returning true from classImplementsPlugin"); + } + return true; + } + } + for(int i=0;i<implementedInterfaces.length;i++){ + if (classImplementsPlugin(implementedInterfaces[i])){ + return true; + } + } + return classImplementsPlugin(testClass.getSuperclass()); + } + +} diff --git a/src/java/net/java/games/util/plugins/Plugins.java b/src/java/net/java/games/util/plugins/Plugins.java new file mode 100644 index 0000000..7a7e5f4 --- /dev/null +++ b/src/java/net/java/games/util/plugins/Plugins.java @@ -0,0 +1,243 @@ +/* + * 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) { + scanPlugins(pluginRoot); + } + + private void scanPlugins(File dir) { + File[] files = dir.listFiles(); + for(int i=0;i<files.length;i++){ + File f = files[i]; + if (f.getName().endsWith(".jar")) { // process JAR file + processJar(f); + } else if (f.isDirectory()) { + scanPlugins(f); // recurse + } + } + } + + + private void processJar(File f) { + try { + //JarFile jf = new JarFile(f); + if (DEBUG) { + System.out.println("Scanning jar: "+f.getName()); + } + PluginLoader loader = new PluginLoader(f); + JarFile jf = new JarFile(f); + for (Enumeration enum = jf.entries();enum.hasMoreElements();){ + JarEntry je = (JarEntry)enum.nextElement(); + if (DEBUG) { + System.out.println("Examining file : "+je.getName()); + } + if (je.getName().endsWith("Plugin.class")) { + if (DEBUG) { + System.out.println("Found candidate class: "+je.getName()); + } + String cname = je.getName(); + cname = cname.substring(0,cname.length()-6); + Class pc = loader.loadClass(cname); + if (loader.attemptPluginDefine(pc)) { + if (DEBUG) { + System.out.println("Adding class to plugins:"+pc.getName()); + } + pluginList.add(pc); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** This method returns all the Plugins found in the + * directory passed in at object creation time or any of its + * sub-directories. + * @return + */ + public Class[] get(){ + Class[] pluginArray = new Class[pluginList.size()]; + return (Class[])pluginList.toArray(pluginArray); + } + + /** This method returns a sub-list of all the found Plugin + * classes that implement <B>any</B> 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;i<interfaces.length;i++){ + interfaceSet.add(interfaces[i]); + } + for(Iterator i = pluginList.iterator();i.hasNext();){ + Class pluginClass = (Class)i.next(); + if (classImplementsAny(pluginClass,interfaceSet)){ + matchList.add(pluginClass); + } + } + Class[] pluginArray = new Class[matchList.size()]; + return (Class[])matchList.toArray(pluginArray); + } + + private boolean classImplementsAny(Class testClass,Set interfaces){ + if (testClass == null) return false; // end of tree + Class[] implementedInterfaces = testClass.getInterfaces(); + for(int i=0;i<implementedInterfaces.length;i++){ + if (interfaces.contains(implementedInterfaces[i])) { + return true; + } + } + for(int i=0;i<implementedInterfaces.length;i++){ + if (classImplementsAny(implementedInterfaces[i],interfaces)){ + return true; + } + } + return classImplementsAny(testClass.getSuperclass(),interfaces); + } + + /** This method returns a sub-list of all the found Plugin + * classes that implement <B>all</B> 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<interfaces.length;i++){ + interfaceSet.add(interfaces[i]); + } + for(Iterator i = pluginList.iterator();i.hasNext();){ + Class pluginClass = (Class)i.next(); + if (classImplementsAll(pluginClass,interfaceSet)){ + matchList.add(pluginClass); + } + } + Class[] pluginArray = new Class[matchList.size()]; + return (Class[])matchList.toArray(pluginArray); + } + + private boolean classImplementsAll(Class testClass,Set interfaces){ + if (testClass == null) return false; // end of tree + Class[] implementedInterfaces = testClass.getInterfaces(); + for(int i=0;i<implementedInterfaces.length;i++){ + if (interfaces.contains(implementedInterfaces[i])) { + interfaces.remove(implementedInterfaces[i]); + if (interfaces.size() == 0) { // found them all + return true; + } + } + } + for(int i=0;i<implementedInterfaces.length;i++){ + if (classImplementsAll(implementedInterfaces[i],interfaces)){ + return true; + } + } + return classImplementsAll(testClass.getSuperclass(),interfaces); + } + + /** This method returns a sub-list of all the found Plugin + * classes that extend the passed in Class + * (either directly or through inheritance.) + * @param superclass The class to match. + * @return The list of plugin classes that extend the passed + * in class. + */ + public Class[] getExtends(Class superclass){ + List matchList = new ArrayList(pluginList.size()); + for(Iterator i = pluginList.iterator();i.hasNext();){ + Class pluginClass = (Class)i.next(); + if (classExtends(pluginClass,superclass)){ + matchList.add(pluginClass); + } + } + Class[] pluginArray = new Class[matchList.size()]; + return (Class[])matchList.toArray(pluginArray); + } + + private boolean classExtends(Class testClass,Class superclass){ + if (testClass == null) { // end of hirearchy + return false; + } + if (testClass == superclass) { + return true; + } + return classExtends(testClass.getSuperclass(),superclass); + } +} diff --git a/src/java/net/java/games/util/plugins/test/FooChildPlugin.java b/src/java/net/java/games/util/plugins/test/FooChildPlugin.java new file mode 100644 index 0000000..ee8678a --- /dev/null +++ b/src/java/net/java/games/util/plugins/test/FooChildPlugin.java @@ -0,0 +1,50 @@ +/* + * FooChildPlugin.java + * + * Created on April 22, 2003, 12:22 AM + */ + +package net.java.games.util.plugins.test; +/***************************************************************************** + * 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 + * + *****************************************************************************/ +/** + * + * @author jeff + */ +public class FooChildPlugin extends FooPlugin { + + /** Creates a new instance of FooChildPlugin */ + public FooChildPlugin() { + } + +} diff --git a/src/java/net/java/games/util/plugins/test/FooPlugin.java b/src/java/net/java/games/util/plugins/test/FooPlugin.java new file mode 100644 index 0000000..684406a --- /dev/null +++ b/src/java/net/java/games/util/plugins/test/FooPlugin.java @@ -0,0 +1,51 @@ +/* + * FooPlugin.java + * + * Created on April 21, 2003, 5:48 PM + */ +/***************************************************************************** + * 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.test; +import net.java.games.util.plugins.Plugin; + +/** + * + * @author jeff + */ +public class FooPlugin implements Plugin{ + + /** Creates a new instance of FooPlugin */ + public FooPlugin() { + } + +} diff --git a/src/java/net/java/games/util/plugins/test/InheritedInterfacePlugin.java b/src/java/net/java/games/util/plugins/test/InheritedInterfacePlugin.java new file mode 100644 index 0000000..4458a20 --- /dev/null +++ b/src/java/net/java/games/util/plugins/test/InheritedInterfacePlugin.java @@ -0,0 +1,50 @@ +/* + * InheritedInterfacePlugin.java + * + * Created on April 22, 2003, 12:23 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.test; + +/** + * + * @author jeff + */ +public class InheritedInterfacePlugin implements InterfaceNotAPlugin { + + /** Creates a new instance of InheritedInterfacePlugin */ + public InheritedInterfacePlugin() { + } + +} diff --git a/src/java/net/java/games/util/plugins/test/InterfaceNotAPlugin.java b/src/java/net/java/games/util/plugins/test/InterfaceNotAPlugin.java new file mode 100644 index 0000000..a6bfca6 --- /dev/null +++ b/src/java/net/java/games/util/plugins/test/InterfaceNotAPlugin.java @@ -0,0 +1,49 @@ +/* + * InterfaceceNotaPlugin.java + * + * Created on April 21, 2003, 6:24 PM + */ +/***************************************************************************** + * 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.test; +import net.java.games.util.plugins.Plugin; + +/** + * + * @author jeff + */ +public interface InterfaceNotAPlugin extends Plugin{ + + + +} diff --git a/src/java/net/java/games/util/plugins/test/NotAPlugin.java b/src/java/net/java/games/util/plugins/test/NotAPlugin.java new file mode 100644 index 0000000..cabcc08 --- /dev/null +++ b/src/java/net/java/games/util/plugins/test/NotAPlugin.java @@ -0,0 +1,50 @@ +/* + * NotAPlugin.java + * + * Created on April 21, 2003, 6:24 PM + */ +/***************************************************************************** + * 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.test; + +/** + * + * @author jeff + */ +public class NotAPlugin { + + /** Creates a new instance of NotAPlugin */ + public NotAPlugin() { + } + +} diff --git a/src/java/net/java/games/util/plugins/test/PluginTest.java b/src/java/net/java/games/util/plugins/test/PluginTest.java new file mode 100644 index 0000000..a5ea39d --- /dev/null +++ b/src/java/net/java/games/util/plugins/test/PluginTest.java @@ -0,0 +1,115 @@ +/* + * PluginTest.java + * + * Created on April 21, 2003, 4:59 PM + */ +/***************************************************************************** + * 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.test; + +/** + * + * @author jeff + */ + +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.io.*; +import net.java.games.util.plugins.Plugins; + + +class ClassRenderer implements ListCellRenderer { + JLabel label = new JLabel(); + public Component getListCellRendererComponent(JList jList, Object obj, int param, + boolean param3, boolean param4) + { + label.setText(((Class)obj).getName()); + label.setForeground(Color.BLACK); + label.setBackground(Color.WHITE); + if (PluginTest.DEBUG) { + System.out.println("Rendering: "+label.getText()); + } + return label; + } +} + +class ListUpdater implements Runnable{ + Object[] objList; + DefaultListModel mdl; + public ListUpdater(JList jlist, Object[] list){ + objList = list; + mdl = (DefaultListModel)jlist.getModel(); + } + + public void run() { + mdl.clear(); + for(int i=0;i<objList.length;i++){ + mdl.addElement(objList[i]); + } + } +} + +public class PluginTest { + static final boolean DEBUG = false; + Plugins plugins = new Plugins(new File("test_plugins")); + JList plist; + Class[] piList; // holder for current list of plugins + /** Creates a new instance of PluginTest */ + public PluginTest() { + JFrame f = new JFrame("PluginTest"); + plist = new JList(new DefaultListModel()); + plist.setCellRenderer(new ClassRenderer()); + Container c = f.getContentPane(); + c.setLayout(new BorderLayout()); + c.add(new JScrollPane(plist),BorderLayout.CENTER); + JPanel p = new JPanel(); + c.add(p,BorderLayout.SOUTH); + p.setLayout(new FlowLayout()); + f.pack(); + f.setDefaultCloseOperation(f.EXIT_ON_CLOSE); + f.setVisible(true); + doListAll(); + } + + private void doListAll(){ + SwingUtilities.invokeLater(new ListUpdater(plist,plugins.get())); + } + /** + * @param args the command line arguments + */ + public static void main(String[] args) { + new PluginTest(); + } + +} |