package edu.umd.rhsmith.diads.meater.core.config.container; import edu.umd.rhsmith.diads.meater.core.config.ConfigUnit; public class DefaultInstanceConfigRegistration<U extends ConfigUnit> implements InstanceConfigRegistration<U> { private String name; private String desc; private Class<U> typeClass; public DefaultInstanceConfigRegistration(Class<U> typeClass) { this.typeClass = typeClass; this.name = extractName(typeClass); this.desc = extractDesc(typeClass); } public static String extractName(Class<?> typeClass) { try { return (String) typeClass.getField("TNAME").get(null); } catch (Exception e) { return typeClass.getSimpleName(); } } public static String extractDesc(Class<?> typeClass) { try { return (String) typeClass.getField("TDESC").get(null); } catch (Exception e) { return null; } } @Override public String getName() { return this.name; } @Override public String getDescription() { return this.desc; } @Override public U createConfig() throws ConfigInstantiationException { try { return this.typeClass.newInstance(); } catch (InstantiationException | IllegalAccessException e) { throw new ConfigInstantiationException(e); } } }