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 public class DependencyCheckerImpl implements DependencyChecker {
52
53 public void checkDependencies(Map<String, ModuleDefinition> moduleDefinitions) throws ModuleDependencyException {
54 for (ModuleDefinition def : moduleDefinitions.values()) {
55 for (DependencyDefinition dep : def.getDependencies()) {
56 if (!dep.isOptional()) {
57 checkSpecificDependency(def, dep, moduleDefinitions);
58 }
59 }
60 }
61 }
62
63 public List<ModuleDefinition> sortByDependencyLevel(Map<String, ModuleDefinition> moduleDefinitions) {
64 final List<ModuleDefinition> modules = new ArrayList<ModuleDefinition>(moduleDefinitions.values());
65
66 Collections.sort(modules, new DependencyLevelComparator(moduleDefinitions));
67
68 return modules;
69 }
70
71 protected void checkSpecificDependency(ModuleDefinition checkedModule, DependencyDefinition requiredDependency, Map<String, ModuleDefinition> moduleDefinitions) throws ModuleDependencyException {
72 final ModuleDefinition dependencyModuleDef = moduleDefinitions.get(requiredDependency.getName());
73 if (dependencyModuleDef == null) {
74 throw new ModuleDependencyException("Module " + checkedModule + " is dependent on " + requiredDependency + ", which was not found.");
75 }
76
77 final VersionRange requiredRange = requiredDependency.getVersionRange();
78 final Version dependencyVersion = dependencyModuleDef.getVersion();
79
80
81
82
83
84
85
86 if (!requiredRange.contains(dependencyVersion)) {
87 throw new ModuleDependencyException("Module " + checkedModule + " is dependent on " + requiredDependency + ", but " + dependencyModuleDef + " is currently installed.");
88 }
89 }
90 }