public override ConversionResult Convert(int sourceDataTypeId, int targetDataTypeId, bool updatePropertyTypes, bool publish, bool test = true)
        {
            var result = new ConversionResult(Services, sourceDataTypeId, targetDataTypeId, updatePropertyTypes, publish, test);

            foreach (var ac in result.AffectedContent)
            {
                var oldValue     = ac.Content.GetValue <string>(ac.PropertyType.Alias);
                var newValue     = convert(oldValue);
                var seemedToWork = (!String.IsNullOrWhiteSpace(newValue));

                if (!String.IsNullOrWhiteSpace(oldValue))
                {
                    result.PropertyResults.Add(new PropertyResult()
                    {
                        ContentName   = ac.Content.Name,
                        ContentId     = ac.Content.Id,
                        PropertyAlias = ac.PropertyType.Alias,
                        PropertyValue = oldValue.TruncateAtWord(1000000),
                        NewValue      = newValue,
                        IsCompatible  = seemedToWork
                    });

                    if (!test && seemedToWork)
                    {
                        //save the new properties
                        ac.Content.SetValue(ac.PropertyType.Alias, newValue);
                        Services.ContentService.Save(ac.Content);
                        //publish?
                    }
                }
            }

            result         = result.Summarize();
            result.Message = "Complete.";

            if (result.SuccessfulConversions >= result.FailedConversions)
            {
                result.IsCompatible = true;
                if (!test)
                {
                    result.UpdatePropertyTypes();
                }
            }
            else
            {
                result.IsCompatible = false;
            }

            return(result);
        }