package org.ovirt.engine.core.utils; import java.util.Properties; @SuppressWarnings("serial") public class EnumTranslationProperties<E extends Enum<E>> extends Properties { private final Class<E> enumClass; public EnumTranslationProperties(Class<E> enumClass) { this.enumClass = enumClass; } /** * This method overrides the put method of Map in order to add the validation * of an existing key. Otherwise the Hashtable implementation inherited by * Properties class it would just override existing value without indicating * the caller that it already exists. */ @Override public Object put(Object key, Object value) { String stringKey = (String) key; try { // Will throw an IllegalArgumentException if the key isn't an EnumConstant Enum.valueOf(enumClass, stringKey); } catch (IllegalArgumentException e) { throw new MissingEnumTranslationException("No translation for key [" + stringKey + "] in " + enumClass); } return super.put(key, value); } }