*/
private final void buildDepTree(HashMap<String, PropertiesFile> knownJars, LinkedList<DependencyNode> loadOrder) {
HashMap<String, DependencyNode> nodes = new HashMap<String, DependencyNode>();
// Make the flat dep tree
for (String jar : knownJars.keySet()) {
PropertiesFile inf = knownJars.get(jar);
nodes.put(inf.getString("name"), new DependencyNode(inf.getString("name"), jar, inf));
}
// Create the basic dependency list
Iterator<String> itr = nodes.keySet().iterator();
while (itr.hasNext()) {
String jar = itr.next();
DependencyNode node = nodes.get(jar);
PropertiesFile inf = node.getInf();
if (inf.containsKey("dependencies")) {
String[] dependencies = inf.getStringArray("dependencies", "[,;]+");
for (String dependency : dependencies) {
dependency = dependency.trim();
// Remove empty entries
if (dependency.length() == 0) {
continue;
}
if (!nodes.containsKey(dependency)) {
Canary.logServerMessage("Cannot find dependency " + dependency + " but " + jar + " depends on it. Removing.");
itr.remove();
continue;
}
if (!node.edges.contains(nodes.get(dependency))) {
node.edges.add(nodes.get(dependency));
}
}
}
if (inf.containsKey("optional-dependencies")) {
String[] softDependencies = inf.getStringArray("optional-dependencies", "[,;]+");
for (String dependency : softDependencies) {
dependency = dependency.trim();
// Remove empty entries
if (dependency.length() == 0) {
continue;