001 /* 002 003 $Id: PluginManager.java,v 1.4 2003/05/08 17:12:31 ndulgheru Exp $ 004 005 */ 006 007 package sharpster.common; 008 009 import java.io.File; 010 import java.util.LinkedList; 011 import java.util.ListIterator; 012 013 import sharpster.common.FileCollection; 014 import sharpster.common.SharedFile; 015 import sharpster.common.PluginLoader; 016 import sharpster.common.PartOfFilePlugin; 017 import sharpster.common.PluginData; 018 019 public class PluginManager { 020 /** 021 * A list holding all loaded plugins 022 */ 023 protected LinkedList plugins; 024 025 /** 026 * Constructor 027 */ 028 public PluginManager() { 029 plugins = new LinkedList(); 030 } 031 032 /** 033 * Loads all plug-ins from the given directory 034 * (Loads all classes ending with Plugin.class). 035 */ 036 public boolean loadPlugins(String directory) { 037 File path = new File(directory); 038 039 if(!path.isDirectory()) return false; 040 File[] files = path.listFiles(); 041 042 plugins.clear(); 043 044 for(int i=0;i<files.length;i++) { 045 if(files[i].getName().matches(".*(Plugin.class)")) { 046 File parent = files[i].getParentFile(); 047 String name = files[i].getName(); 048 name = name.substring(0,name.length()-6); 049 050 try { 051 //System.out.println(name); 052 PartOfFilePlugin plugin = (PartOfFilePlugin) 053 PluginLoader.load(name, parent.getAbsolutePath()); 054 if(plugin != null) { 055 plugins.add(plugin); 056 } 057 } 058 catch(Exception e) { 059 } 060 } 061 } 062 return true; 063 } 064 065 /** 066 * Returns an array of available plug-in names. 067 */ 068 public String[] getPluginNames() { 069 String[] names = new String[plugins.size()]; 070 ListIterator i; 071 int j=0; 072 for(i=plugins.listIterator();i.hasNext();) { 073 names[j++] = ((PartOfFilePlugin)i.next()).getPluginName(); 074 } 075 return names; 076 } 077 078 /** 079 * Returns a plug-in object given a specific plug-in name 080 */ 081 public PartOfFilePlugin getPluginFromName(String pluginName) { 082 PartOfFilePlugin retval = null; 083 for(int i=0; i<plugins.size(); i++) { 084 retval = (PartOfFilePlugin)plugins.get(i); 085 if(pluginName.equals(retval.getPluginName())) 086 return retval; 087 } 088 return null; 089 } 090 091 /** 092 * Returns a description about the given plug-in name. 093 */ 094 public String getPluginDescription(String name) { 095 PartOfFilePlugin plugin = getPluginFromName(name); 096 if(plugin != null) { 097 return plugin.getPluginDescription(); 098 } 099 return new String(); 100 } 101 } 102 103 104 105 106