001package org.galaxyproject.gxformat2.v19_09.utils;
002
003import java.util.ArrayList;
004import java.util.Arrays;
005import java.util.List;
006
007public class UnionLoader implements Loader<Object> {
008  private final List<Loader> alternates;
009
010  public UnionLoader(List<Loader> alternates) {
011    this.alternates = alternates;
012  }
013
014  public UnionLoader(Loader[] alternates) {
015    this(Arrays.asList(alternates));
016  }
017
018  public Object load(
019      final Object doc,
020      final String baseUri,
021      final LoadingOptions loadingOptions,
022      final String docRoot) {
023    final List<ValidationException> errors = new ArrayList();
024    for (final Loader loader : this.alternates) {
025      try {
026        return loader.load(doc, baseUri, loadingOptions, docRoot);
027      } catch (ValidationException e) {
028        errors.add(e);
029      }
030    }
031    throw new ValidationException("Failed to match union type", errors);
032  }
033}