public UserPrefSpec apply(UserPref userPref) { // Using a LinkedHashMap to preserve the order the values were defined in when iterating. Map<String, String> enumValues = new LinkedHashMap<String, String>(); for (UserPref.EnumValuePair enumValue : userPref.getOrderedEnumValues()) { enumValues.put(enumValue.getValue(), enumValue.getDisplayValue()); } return UserPrefSpec.userPrefSpec(userPref.getName()) .displayName( (userPref.getDisplayName() != null) ? userPref.getDisplayName() : userPref.getName()) .required(userPref.getRequired()) .dataType(DataType.parse(userPref.getDataType().toString())) .enumValues(Collections.unmodifiableMap(enumValues)) .defaultValue(userPref.getDefaultValue()) .build(); }