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
38 import com.google.common.base.Objects;
39
40
41
42
43
44
45
46 public class CachingDefinitionDecorator<T> implements DefinitionDecorator<T> {
47
48 private DefinitionDecorator<T> delegate;
49
50 private DefinitionProvider<T> decorationResult;
51
52 private DefinitionProvider<T> decoratedDefinitionProvider;
53
54 public CachingDefinitionDecorator(DefinitionDecorator<T> delegate) {
55 this.delegate = delegate;
56 }
57
58 @Override
59 public DefinitionDecoratorMetadata metadata() {
60 return delegate.metadata();
61 }
62
63 @Override
64 public boolean appliesTo(DefinitionProvider<T> definitionProvider) {
65 return delegate.appliesTo(definitionProvider);
66 }
67
68 @Override
69 public DefinitionProvider<T> decorate(DefinitionProvider<T> definitionProvider) {
70 if (!Objects.equal(definitionProvider, decoratedDefinitionProvider)) {
71 this.decoratedDefinitionProvider = definitionProvider;
72 this.decorationResult = delegate.decorate(decoratedDefinitionProvider);
73 }
74
75 return decorationResult;
76 }
77
78 @Override
79 public String toString() {
80 return this.delegate.toString();
81 }
82
83 @Override
84 public boolean equals(Object o) {
85 if (this == o) return true;
86
87 if (!(o instanceof DefinitionDecorator)) {
88 return false;
89 }
90
91 DefinitionDecorator other = (DefinitionDecorator) o;
92 if (other instanceof CachingDefinitionDecorator) {
93 other = ((CachingDefinitionDecorator)other).delegate;
94 }
95
96 return Objects.equal(this.delegate, other);
97 }
98
99 @Override
100 public int hashCode() {
101 return Objects.hashCode(delegate);
102 }
103 }