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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
package ${package}.utils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MapLoader<T> implements Loader<Map<String, T>> {
private final Loader<T> valueLoader;
private final String container;
private final Boolean noLinkCheck;
public MapLoader(Loader<T> valueLoader, final String container, final Boolean noLinkCheck) {
this.valueLoader = valueLoader;
this.container = container;
this.noLinkCheck = noLinkCheck;
}
public Map<String, T> load(
final Object doc,
final String baseUri,
final LoadingOptions loadingOptions,
final String docRoot) {
final Map<String, Object> docMap = (Map<String, Object>) Loader.validateOfJavaType(Map.class, doc);
LoadingOptions innerLoadingOptions = loadingOptions;
if (this.container != null || this.noLinkCheck != null) {
LoadingOptionsBuilder builder = new LoadingOptionsBuilder().copiedFrom(loadingOptions);
if (this.container != null) {
builder.setContainer(this.container);
}
if (this.noLinkCheck != null) {
builder.setNoLinkCheck(this.noLinkCheck);
}
innerLoadingOptions = builder.build();
}
final Map<String, T> r = new HashMap();
final List<ValidationException> errors = new ArrayList();
for (final Map.Entry<String, Object> entry : docMap.entrySet()) {
try {
final Object loadedField = this.valueLoader.loadField(entry.getValue(), baseUri, innerLoadingOptions);
r.put(entry.getKey(), (T) loadedField);
} catch (final ValidationException e) {
errors.add(e);
}
}
if (!errors.isEmpty()) {
throw new ValidationException("", errors);
}
return r;
}
}
|