package rocks.inspectit.ui.rcp.preferences.valueproviders; import java.util.HashSet; import java.util.Set; import java.util.StringTokenizer; import rocks.inspectit.ui.rcp.preferences.PreferenceException; import rocks.inspectit.ui.rcp.preferences.PreferencesConstants; import rocks.inspectit.ui.rcp.preferences.valueproviders.PreferenceValueProviderFactory.PreferenceValueProvider; /** * Provider that can save and retrieve set of enum values. * * @author Ivan Senic * * @param <E> */ public class EnumSetPreferenceValueProvider<E extends Enum<E>> extends PreferenceValueProvider<Set<E>> { /** * Class of the enum. */ private Class<E> enumClass; /** * @param enumClass * Class of the enum. */ public EnumSetPreferenceValueProvider(Class<E> enumClass) { this.enumClass = enumClass; } /** * {@inheritDoc} */ @Override public boolean isObjectValid(Object object) { if (object instanceof Set) { Set<?> set = (Set<?>) object; for (Object inSet : set) { if (!enumClass.isAssignableFrom(inSet.getClass())) { return false; } } return true; } return false; } /** * {@inheritDoc} */ @Override public String getValueForObject(Set<E> collection) throws PreferenceException { StringBuilder stringBuilder = new StringBuilder(); for (E object : collection) { stringBuilder.append(object.toString() + PreferencesConstants.PREF_OBJECT_SEPARATION_TOKEN); } return stringBuilder.toString(); } /** * {@inheritDoc} */ @Override public Set<E> getObjectFromValue(String value) throws PreferenceException { Set<E> results = new HashSet<>(); StringTokenizer tokenizer = new StringTokenizer(value, PreferencesConstants.PREF_OBJECT_SEPARATION_TOKEN); while (tokenizer.hasMoreElements()) { results.add(Enum.valueOf(enumClass, tokenizer.nextToken())); } return results; } }