create changelog entry
[debian/openrocket] / core / src / net / sf / openrocket / plugin / framework / JSPFPluginFactory.java
1 package net.sf.openrocket.plugin.framework;
2
3 import java.net.URI;
4 import java.net.URISyntaxException;
5 import java.util.ArrayList;
6 import java.util.List;
7
8 import net.sf.openrocket.util.BugException;
9 import net.xeoh.plugins.base.Plugin;
10 import net.xeoh.plugins.base.PluginManager;
11 import net.xeoh.plugins.base.impl.PluginManagerFactory;
12 import net.xeoh.plugins.base.util.JSPFProperties;
13 import net.xeoh.plugins.base.util.PluginManagerUtil;
14
15 public class JSPFPluginFactory implements PluginFactory {
16         
17         private final PluginManager pluginManager;
18         
19         public JSPFPluginFactory() {
20                 
21                 final JSPFProperties props = new JSPFProperties();
22                 
23                 //              props.setProperty(PluginManager.class, "cache.enabled", "true");
24                 //              props.setProperty(PluginManager.class, "cache.mode", "weak"); //optional
25                 //              props.setProperty(PluginManager.class, "cache.file", "jspf.cache");
26                 
27                 try {
28                         pluginManager = PluginManagerFactory.createPluginManager(props);
29                         pluginManager.addPluginsFrom(new URI("classpath://*"));
30                 } catch (URISyntaxException e) {
31                         throw new BugException(e);
32                 }
33         }
34         
35         @Override
36         public <E extends Plugin> List<E> getPlugins(Class<E> e, Object... args) {
37                 
38                 List<E> plugins = new ArrayList<E>();
39                 
40                 PluginManagerUtil pluginManagerUtil = new PluginManagerUtil(pluginManager);
41                 plugins.addAll(pluginManagerUtil.getPlugins(e));
42                 
43                 for (Service s : pluginManagerUtil.getPlugins(Service.class)) {
44                         plugins.addAll(s.getPlugins(e, args));
45                 }
46                 
47                 return plugins;
48                 
49         }
50 }