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.config.registry.decoration;
35
36 import info.magnolia.config.registry.DefinitionProvider;
37 import info.magnolia.module.ModuleRegistry;
38 import info.magnolia.module.model.ModuleDefinition;
39
40 import java.util.Comparator;
41
42 import com.google.common.base.Predicate;
43 import com.google.common.collect.ComparisonChain;
44
45
46
47
48 public class DefinitionDecorators {
49
50 public static <T> Predicate<DefinitionDecorator<T>> appliesTo(final DefinitionProvider<T> definitionProvider) {
51 return new Predicate<DefinitionDecorator<T>>() {
52 @Override
53 public boolean apply(DefinitionDecorator<T> decorator) {
54 return decorator.appliesTo(definitionProvider);
55 }
56 };
57 }
58
59 public static Comparator<DefinitionDecorator> moduleDependencyBasedComparator(final ModuleRegistry moduleRegistry) {
60 return new Comparator<DefinitionDecorator>() {
61 @Override
62 public int compare(DefinitionDecorator o1, DefinitionDecorator o2) {
63 final String firstModule = o1.metadata().getSourceModule();
64 final String secondModule = o2.metadata().getSourceModule();
65
66 boolean isFirstModuleRegistered = moduleRegistry.isModuleRegistered(firstModule);
67 boolean isSecondModuleRegistered = moduleRegistry.isModuleRegistered(secondModule);
68
69 if (!isFirstModuleRegistered || !isSecondModuleRegistered) {
70
71 return ComparisonChain.start().compare(isFirstModuleRegistered, isSecondModuleRegistered).result();
72 }
73
74 final ModuleDefinition d1 = moduleRegistry.getDefinition(firstModule);
75 final ModuleDefinition d2 = moduleRegistry.getDefinition(secondModule);
76
77 return ComparisonChain.start().
78 compare(moduleRegistry.getModuleDefinitions().indexOf(d1),
79 moduleRegistry.getModuleDefinitions().indexOf(d2)).
80 result();
81 }
82 };
83 }
84
85 }