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();
    }