/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package robotinterface.plugin; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import java.net.URL; import java.net.URLClassLoader; import java.security.AllPermission; import java.security.CodeSource; import java.security.PermissionCollection; import java.security.Permissions; import java.security.Policy; import java.util.ArrayList; /** * * @author antunes */ public class PluginManager { // public static class PluginPolicy extends Policy { // // public PluginPolicy() { // Policy.setPolicy(new PluginPolicy()); // System.setSecurityManager(new SecurityManager()); // } // // public PermissionCollection getPermissions(CodeSource codeSource) { // Permissions p = new Permissions(); // // if (!codeSource.getLocation().toString().endsWith("/rogue.jar")) { // p.add(new AllPermission()); // } // return p; // } // // /** // * Does nothing. // */ // public void refresh() { // } // } @Deprecated public static ArrayList<Class> getPluginsAlpha(String listFile, Class type) { ArrayList<Class> ret = new ArrayList<>(); // PluginPolicy p = new PluginPolicy(); ArrayList<String> pluginNames = new ArrayList<>(); try { ClassLoader loader = ClassLoader.getSystemClassLoader(); BufferedReader reader = new BufferedReader(new InputStreamReader(loader.getResourceAsStream(listFile))); String line; while ((line = reader.readLine()) != null) { if (!line.startsWith("#") && !line.trim().isEmpty()) { pluginNames.add(line); } } reader.close(); for (String pName : pluginNames) { Class c = loader.loadClass(pName); if (type.isAssignableFrom(c)) { ret.add(c); } } } catch (Exception ex) { ex.printStackTrace(); } return ret; } public static ArrayList<Class> getPlugins(String jarFile) { ArrayList<Class> ret = new ArrayList<>(); File pluginJar = new File(jarFile); ArrayList<String> pluginNames = new ArrayList<>(); try { ClassLoader loader = URLClassLoader.newInstance(new URL[]{pluginJar.toURL()}); BufferedReader reader = new BufferedReader(new InputStreamReader(loader.getResourceAsStream("list.txt"))); String line; while ((line = reader.readLine()) != null) { if (!line.startsWith("#") && !line.trim().isEmpty()) { pluginNames.add(line); } } reader.close(); for (String pName : pluginNames) { Class c = loader.loadClass(pName); ret.add(c); } } catch (Exception ex) { ex.printStackTrace(); } return ret; } }