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}