001package org.galaxyproject.gxformat2.v19_09.utils;
002
003import java.util.ArrayList;
004import java.util.List;
005
006public class ArrayLoader<T> implements Loader<List<T>> {
007  private final Loader<T> itemLoader;
008
009  public ArrayLoader(Loader<T> itemLoader) {
010    this.itemLoader = itemLoader;
011  }
012
013  public List<T> load(
014      final Object doc,
015      final String baseUri,
016      final LoadingOptions loadingOptions,
017      final String docRoot) {
018    final List<Object> docList = (List<Object>) Loader.validateOfJavaType(List.class, doc);
019    final List<T> r = new ArrayList();
020    final List<Loader> loaders = new ArrayList<Loader>();
021    loaders.add(this);
022    loaders.add(this.itemLoader);
023    final UnionLoader unionLoader = new UnionLoader(loaders);
024    final List<ValidationException> errors = new ArrayList();
025    for (final Object el : docList) {
026      try {
027        final Object loadedField = unionLoader.loadField(el, baseUri, loadingOptions);
028        if (loadedField instanceof List) {
029          r.addAll((List<T>) loadedField);
030        } else {
031          r.add((T) loadedField);
032        }
033      } catch (final ValidationException e) {
034        errors.add(e);
035      }
036    }
037    if (!errors.isEmpty()) {
038      throw new ValidationException("", errors);
039    }
040    return r;
041  }
042}