diff options
author | endolf <[email protected]> | 2011-03-22 15:03:52 +0000 |
---|---|---|
committer | endolf <[email protected]> | 2011-03-22 15:03:52 +0000 |
commit | 109d6e2ebff8eb8ea96115907b58e0cb65773963 (patch) | |
tree | 218e7bd126c3be39647be7e8de0be03675f35970 /bak/net/java/games/util | |
parent | 3517b059e99f56acdf572524aed1bc9ac2a3e1ff (diff) |
tidy up
git-svn-id: file:///home/sven/projects/JOGL/git-svn/svn-server-sync/jutils/trunk@28 052365b4-98e0-4bc5-a281-465471b020e0
Diffstat (limited to 'bak/net/java/games/util')
-rw-r--r-- | bak/net/java/games/util/plugins/PluginLoader.java~1~ | 156 | ||||
-rw-r--r-- | bak/net/java/games/util/plugins/Plugins.java~1~ | 247 |
2 files changed, 0 insertions, 403 deletions
diff --git a/bak/net/java/games/util/plugins/PluginLoader.java~1~ b/bak/net/java/games/util/plugins/PluginLoader.java~1~ deleted file mode 100644 index 9d41467..0000000 --- a/bak/net/java/games/util/plugins/PluginLoader.java~1~ +++ /dev/null @@ -1,156 +0,0 @@ -/* - * 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; - boolean localDLLs = true; - /** 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(); - if (System.getProperty("net.java.games.util.plugins.nolocalnative") - !=null){ - localDLLs = false; - } - } - - /** 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){ - if (localDLLs) { - String libpath = parentDir.getPath() + File.separator + - System.mapLibraryName(libname); - if (DEBUG) { - System.out.println("Returning libname of: " + libpath); - } - return libpath; - } else { - return super.findLibrary(libname); - } - } - - /** 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/bak/net/java/games/util/plugins/Plugins.java~1~ b/bak/net/java/games/util/plugins/Plugins.java~1~ deleted file mode 100644 index 87e6146..0000000 --- a/bak/net/java/games/util/plugins/Plugins.java~1~ +++ /dev/null @@ -1,247 +0,0 @@ -/* - * 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;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); - } -} |