001package org.galaxyproject.gxformat2.v19_09.utils; 002 003import java.lang.reflect.Method; 004 005public class EnumLoader<T extends Enum> implements Loader<T> { 006 private final Class<T> symbolEnumClass; 007 008 public EnumLoader(final Class<T> symbolEnumClass) { 009 this.symbolEnumClass = symbolEnumClass; 010 } 011 012 public T load( 013 final Object doc, 014 final String baseUri, 015 final LoadingOptions loadingOptions, 016 final String docRoot) { 017 final String docString = Loader.validateOfJavaType(String.class, doc); 018 try { 019 final Method m = symbolEnumClass.getMethod("fromDocumentVal", String.class); 020 final T val = (T) m.invoke(null, docString); 021 return val; 022 } catch (final ReflectiveOperationException e) { 023 final Throwable cause = e.getCause(); 024 if (cause instanceof RuntimeException) { 025 throw (RuntimeException) cause; 026 } 027 throw new RuntimeException(e); 028 } 029 } 030}