1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.model.reader;
35
36 import info.magnolia.module.model.DependencyDefinition;
37 import info.magnolia.module.model.ModuleDefinition;
38 import info.magnolia.module.model.Version;
39 import info.magnolia.module.model.VersionRange;
40
41 import java.util.ArrayList;
42 import java.util.Collections;
43 import java.util.List;
44 import java.util.Map;
45
46
47
48
49
50
51
52 public class DependencyCheckerImpl implements DependencyChecker {
53
54 public void checkDependencies(Map<String, ModuleDefinition> moduleDefinitions) throws ModuleDependencyException {
55 for (ModuleDefinition def : moduleDefinitions.values()) {
56 for (DependencyDefinition dep : def.getDependencies()) {
57 if (!dep.isOptional()) {
58 checkSpecificDependency(def, dep, moduleDefinitions);
59 }
60 }
61 }
62 }
63
64 public List<ModuleDefinition> sortByDependencyLevel(Map<String, ModuleDefinition> moduleDefinitions) {
65 final List<ModuleDefinition> modules = new ArrayList<ModuleDefinition>(moduleDefinitions.values());
66
67 Collections.sort(modules, new DependencyLevelComparator(moduleDefinitions));
68
69 return modules;
70 }
71
72 protected void checkSpecificDependency(ModuleDefinition checkedModule, DependencyDefinition requiredDependency, Map<String, ModuleDefinition> moduleDefinitions) throws ModuleDependencyException {
73 final ModuleDefinition dependencyModuleDef = moduleDefinitions.get(requiredDependency.getName());
74 if (dependencyModuleDef == null) {
75 throw new ModuleDependencyException("Module " + checkedModule + " is dependent on " + requiredDependency + ", which was not found.");
76 }
77
78 final VersionRange requiredRange = requiredDependency.getVersionRange();
79 final Version dependencyVersion = dependencyModuleDef.getVersion();
80
81
82
83
84
85
86
87 if (!requiredRange.contains(dependencyVersion)) {
88 throw new ModuleDependencyException("Module " + checkedModule + " is dependent on " + requiredDependency + ", but " + dependencyModuleDef + " is currently installed.");
89 }
90 }
91 }