Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 package com.generalrobotix.ui.util;
00020
00021 import java.io.File;
00022 import java.io.FilenameFilter;
00023 import java.lang.reflect.Constructor;
00024 import java.net.MalformedURLException;
00025 import java.net.URL;
00026 import java.net.URLClassLoader;
00027
00028 import com.generalrobotix.ui.GrxBasePlugin;
00029 import com.generalrobotix.ui.GrxBaseView;
00030 import com.generalrobotix.ui.GrxPluginManager;
00031
00036 public class GrxPluginLoader extends URLClassLoader {
00037 public GrxPluginLoader(String pluginDir, ClassLoader parent) {
00038 super(new URL[0], parent);
00039 }
00040
00041 public GrxPluginLoader(String pluginDir) {
00042 this(pluginDir, null);
00043 }
00044
00048 @SuppressWarnings("deprecation")
00049 public void addURL(String path) {
00050 File f = new File(path);
00051 if ( f.isDirectory() || (path.endsWith(".jar")&&f.exists())){
00052 URL[] urls=getURLs();
00053 for(URL url : urls){
00054 if(url.equals(path))
00055 return;
00056 }
00057 try{
00058 super.addURL(f.toURL());
00059 System.out.println("classpath added: "+f.toString());
00060 } catch (MalformedURLException e) {
00061 e.printStackTrace();
00062 }
00063 }else
00064 return;
00065 }
00066
00067 public Class<?> loadClass(String cname){
00068 try {
00069 return super.loadClass(cname, true);
00070 } catch (ClassNotFoundException e) {
00071 GrxDebugUtil.println("ClassNotFound "+cname);
00072 }
00073 return null;
00074 }
00075
00076 public boolean existClass(String cname) {
00077 try{
00078 super.loadClass(cname, true);
00079 return true;
00080 }catch(ClassNotFoundException e){
00081 return false;
00082 }
00083 }
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115 public GrxBasePlugin createPlugin(Class cls, String name, GrxPluginManager manager) {
00116 try {
00117
00118 if( GrxBaseView.class.isAssignableFrom(cls) ) {
00119
00120
00121
00122
00123 return null;
00124 }else{
00125
00126 Constructor c = cls.getConstructor(new Class[] { String.class, GrxPluginManager.class });
00127 return (GrxBasePlugin) c.newInstance(new Object[] { name, manager});
00128 }
00129 } catch (Exception e) {
00130 e.printStackTrace();
00131 }
00132 return null;
00133 }
00134 }