package com.redhat.ceylon.common.tool; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; public abstract class EnumUtil { public static <ENUM extends Enum<ENUM>> ENUM valueOf(Class<ENUM> enumClass, String name) { try { return Enum.valueOf(enumClass, name); } catch (IllegalArgumentException e) { StringBuffer sb = new StringBuffer(); for (String n : possibilities(enumClass)) { sb.append("'").append(n).append("', "); } sb.setLength(sb.length() - 2); throw new IllegalArgumentException(ToolMessages.msg( "argument.enum.invalid.option", enumClass.getSimpleName(), sb.toString())); } } public static <ENUM extends Enum<ENUM>> Iterable<String> possibilities(Class<ENUM> enumClass) { EnumSet<ENUM> values = EnumSet.allOf(enumClass); List<String> result = new ArrayList<>(values.size()); for (ENUM value : values) { result.add(value.toString()); } return result; } public static <ENUM extends Enum<ENUM>> EnumSet<ENUM> enumsFromStrings(Class<ENUM> enumClass, List<String> elems) { if (elems != null) { EnumSet<ENUM> result = EnumSet.noneOf(enumClass); for (String elem : elems) { elem = elem.trim(); elem = elem.replace('-', '_'); for (ENUM e : EnumSet.allOf(enumClass)) { if (e.name().equalsIgnoreCase(elem)) { elem = e.name(); } } result.add(EnumUtil.valueOf(enumClass, elem)); } return result; } else { return null; } } public static <ENUM extends Enum<ENUM>> String enumsToString(EnumSet<ENUM> elems) { if (elems != null) { StringBuilder buf = new StringBuilder(); for (ENUM e : elems) { if (buf.length() > 0) { buf.append(","); } buf.append(e.name()); } return buf.toString(); } else { return null; } } }