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}