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}