Browse Source

little preparation for #42

pull/44/head
Decebal Suiu 10 years ago
parent
commit
e159468196
  1. 38
      pf4j/src/main/java/ro/fortsoft/pf4j/DependencyResolver.java

38
pf4j/src/main/java/ro/fortsoft/pf4j/DependencyResolver.java

@ -28,29 +28,18 @@ class DependencyResolver {
private static final Logger log = LoggerFactory.getLogger(DependencyResolver.class);
private List<PluginWrapper> plugins;
private DirectedGraph<String> graph;
public DependencyResolver(List<PluginWrapper> plugins) {
this.plugins = plugins;
initGraph();
}
/**
* Get the list of plugins in dependency sorted order.
*/
public List<PluginWrapper> getSortedPlugins() throws PluginException {
DirectedGraph<String> graph = new DirectedGraph<>();
for (PluginWrapper pluginWrapper : plugins) {
PluginDescriptor descriptor = pluginWrapper.getDescriptor();
String pluginId = descriptor.getPluginId();
List<PluginDependency> dependencies = descriptor.getDependencies();
if (!dependencies.isEmpty()) {
for (PluginDependency dependency : dependencies) {
graph.addEdge(pluginId, dependency.getPluginId());
}
} else {
graph.addVertex(pluginId);
}
}
log.debug("Graph: {}", graph);
List<String> pluginsId = graph.reverseTopologicalSort();
@ -67,7 +56,26 @@ class DependencyResolver {
return sortedPlugins;
}
private PluginWrapper getPlugin(String pluginId) throws PluginNotFoundException {
private void initGraph() {
// create graph
graph = new DirectedGraph<>();
// populate graph
for (PluginWrapper pluginWrapper : plugins) {
PluginDescriptor descriptor = pluginWrapper.getDescriptor();
String pluginId = descriptor.getPluginId();
List<PluginDependency> dependencies = descriptor.getDependencies();
if (!dependencies.isEmpty()) {
for (PluginDependency dependency : dependencies) {
graph.addEdge(pluginId, dependency.getPluginId());
}
} else {
graph.addVertex(pluginId);
}
}
}
private PluginWrapper getPlugin(String pluginId) throws PluginNotFoundException {
for (PluginWrapper pluginWrapper : plugins) {
if (pluginId.equals(pluginWrapper.getDescriptor().getPluginId())) {
return pluginWrapper;

Loading…
Cancel
Save