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;
35
36 import java.util.ArrayList;
37 import java.util.Collections;
38 import java.util.List;
39
40
41
42
43
44
45
46
47
48 public class DefinitionProviderBuilder<T> {
49 public static <T> DefinitionProviderBuilder<T> newBuilder() {
50 return new DefinitionProviderBuilder<>();
51 }
52
53 private static final List<String> NO_ERRORS = Collections.emptyList();
54 private DefinitionMetadataBuilder metadata;
55 private DefinitionRawView rawView;
56 private T definition;
57 private List<String> errorMessages = null;
58
59 private DefinitionProviderBuilder() {
60 }
61
62 public DefinitionProviderBuilder<T> metadata(DefinitionMetadataBuilder metadata) {
63 this.metadata = metadata;
64 return this;
65 }
66
67 public DefinitionProviderBuilder<T> rawView(DefinitionRawView rawView) {
68 this.rawView = rawView;
69 return this;
70 }
71
72 public DefinitionProviderBuilder<T> definition(T definition) {
73 this.definition = definition;
74 return this;
75 }
76
77 public DefinitionProviderBuilder<T> addErrorMessage(String errorMessage) {
78
79 if (this.errorMessages == null) {
80 this.errorMessages = new ArrayList<>();
81 }
82 this.errorMessages.add(errorMessage);
83 return this;
84 }
85
86 public DefinitionProvider<T> build() {
87 return new DefinitionProviderImpl<>(
88 this.metadata.build(),
89 this.rawView,
90 this.definition,
91 this.errorMessages != null ? this.errorMessages : NO_ERRORS
92 );
93 }
94
95
96
97
98 static class DefinitionProviderImpl<T> implements DefinitionProvider<T> {
99 private final DefinitionMetadata metadata;
100 private final DefinitionRawView rawView;
101 private final T definition;
102 private final List<String> errorMessages;
103 private final boolean valid;
104
105 protected DefinitionProviderImpl(DefinitionMetadata metadata, DefinitionRawView rawView, T definition, List<String> errorMessages) {
106 this.metadata = metadata;
107 this.rawView = rawView;
108 this.definition = definition;
109 this.errorMessages = errorMessages;
110
111 this.valid = (metadata != null && rawView != null && definition != null && errorMessages.isEmpty());
112 }
113
114 @Override
115 public DefinitionMetadata getMetadata() {
116 return metadata;
117 }
118
119 @Override
120 public DefinitionRawView getRaw() {
121 return rawView;
122 }
123
124 @Override
125 public T get() {
126 if (!isValid()) {
127 throw new Registry.InvalidDefinitionException(metadata.getReferenceId());
128 }
129 return definition;
130 }
131
132 @Override
133 public boolean isValid() {
134 return valid;
135 }
136
137 @Override
138 public List<String> getErrorMessages() {
139 return errorMessages;
140 }
141
142 }
143 }