1
package org.herac.tuxguitar.gui.system.plugins;
4
import java.io.FileInputStream;
5
import java.io.FileNotFoundException;
6
import java.io.FilenameFilter;
7
import java.io.IOException;
9
import java.net.URLClassLoader;
10
import java.util.ArrayList;
11
import java.util.Iterator;
12
import java.util.List;
13
import java.util.Properties;
15
import org.herac.tuxguitar.gui.TuxGuitar;
16
import org.herac.tuxguitar.gui.util.TuxGuitarFileUtils;
18
public class PluginManager {
20
public static final String PROPERTY_PLUGIN_PATH = "plugin.path";
22
public static final String PROPERTY_PLUGIN_CLASS = "plugin.class";
24
private static final String LANGUAGE_FOLDER = "lang";
28
private List pluginItems;
30
public PluginManager(){
31
this.plugins = new ArrayList();
32
this.pluginItems = new ArrayList();
35
public List getPlugins(){
39
public List getPluginItems(){
40
return this.pluginItems;
44
* Load language files from lang folder
47
public void loadPlugins(){
48
// we need plugin_*.properties files only
49
final FilenameFilter filter = new FilenameFilter() {
50
public boolean accept(File dir, String name) {
51
return (name.indexOf("plugin_") != -1 && name.indexOf(".properties") != -1);
55
String prefix = TuxGuitarFileUtils.PLUGINS_PREFIX;
57
File path = new File(prefix);
58
if(path != null && path.exists()){
59
String[] files = path.list(filter);
60
for(int i = 0;i < files.length;i++){
62
loadPLugin(prefix + File.separator + files[i]);
63
} catch (Exception e) {
73
private void loadPLugin(String pluginProperties) throws FileNotFoundException, IOException, InstantiationException, IllegalAccessException, ClassNotFoundException{
75
Properties properties = new Properties();
76
properties.load(new FileInputStream(pluginProperties));
78
String pluginPath = properties.getProperty(PROPERTY_PLUGIN_PATH,new String());
79
String pluginClass = properties.getProperty(PROPERTY_PLUGIN_CLASS,new String());
81
File file = new File(pluginPath);
83
if(file != null && file.exists()){
84
ClassLoader loader = new URLClassLoader(new URL[]{ new File(pluginPath).toURL() },getClass().getClassLoader());
86
Class loadedClass = loader.loadClass(pluginClass);
87
if(loadedClass != null){
88
Object object = loadedClass.newInstance();
89
if(object instanceof TGPlugin){
90
TGPlugin plugin = (TGPlugin)object;
92
if(plugin.getItem().isEnabled()){
93
pluginItems.add(plugin);
100
TuxGuitar.instance().showErrorMessage(e);
102
TuxGuitar.instance().showErrorMessage(e);
106
public void initPLugins(){
107
Iterator it = plugins.iterator();
110
TGPlugin plugin = (TGPlugin)it.next();
111
plugin.init(TuxGuitar.instance());
113
TuxGuitar.instance().showErrorMessage(e);
115
TuxGuitar.instance().showErrorMessage(e);
120
public void closePLugins(){
121
Iterator it = plugins.iterator();
124
TGPlugin plugin = (TGPlugin)it.next();
127
TuxGuitar.instance().showErrorMessage(e);
129
TuxGuitar.instance().showErrorMessage(e);