package org.herac.tuxguitar.gui.system.plugins;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.herac.tuxguitar.gui.util.MessageDialog;
import org.herac.tuxguitar.util.TGClassLoader;
import org.herac.tuxguitar.util.TGServiceReader;
public class TGPluginManager {
private List<TGPlugin> plugins;
public TGPluginManager() {
this.plugins = new ArrayList<TGPlugin>();
this.initPlugins();
}
public void closePlugins() {
for (final TGPlugin plugin : this.plugins) {
try {
plugin.close();
} catch (TGPluginException exception) {
MessageDialog.errorMessage(exception);
} catch (Throwable throwable) {
MessageDialog.errorMessage(new TGPluginException(
"An error ocurred when trying to close plugin", throwable));
}
}
}
public String getEnabledProperty(TGPlugin plugin) {
return (plugin.getClass().getName() + ".enabled");
}
public List<TGPlugin> getPlugins() {
return this.plugins;
}
public void initPlugins() {
try {
// Search available providers
Iterator it = TGServiceReader.lookupProviders(TGPlugin.class,
TGClassLoader.instance().getClassLoader());
while (it.hasNext()) {
try {
TGPlugin plugin = (TGPlugin) it.next();
plugin.init();
this.plugins.add(plugin);
} catch (TGPluginException exception) {
MessageDialog.errorMessage(exception);
} catch (Throwable throwable) {
MessageDialog.errorMessage(new TGPluginException(
"An error ocurred when trying to init plugin", throwable));
}
}
} catch (Throwable throwable) {
MessageDialog.errorMessage(new TGPluginException(
"An error ocurred when trying to init plugin", throwable));
}
}
public boolean isEnabled(TGPlugin plugin) {
try {
return TGPluginProperties.instance().getBooleanConfigValue(
getEnabledProperty(plugin), true);
} catch (Throwable throwable) {
MessageDialog.errorMessage(new TGPluginException(
"An error ocurred when trying to get plugin status", throwable));
}
return false;
}
public void openPlugins() {
for (final TGPlugin plugin : this.plugins) {
try {
plugin.setEnabled(isEnabled(plugin));
} catch (TGPluginException exception) {
MessageDialog.errorMessage(exception);
} catch (Throwable throwable) {
MessageDialog.errorMessage(new TGPluginException(
"An error ocurred when trying to set plugin status", throwable));
}
}
}
public void setEnabled(TGPlugin plugin, boolean enabled) {
try {
TGPluginProperties.instance().setProperty(getEnabledProperty(plugin),
enabled);
TGPluginProperties.instance().save();
plugin.setEnabled(enabled);
} catch (TGPluginException exception) {
MessageDialog.errorMessage(exception);
} catch (Throwable throwable) {
MessageDialog.errorMessage(new TGPluginException(
"An error ocurred when trying to set plugin status", throwable));
}
}
}