/// <summary>
        /// Sets the action to use on the context.
        /// </summary>
        /// <param name="setting"></param>
        /// <param name="context"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public static IResult TryGetCMAction <T>(this IValueParser <T> setting, Context context, ref string value)
        {
            var split = value.Split(new[] { ' ' }, 2);
            //Do not allow numbers being parsed as the enum in case someone wants to add numbers to a collection
            var names = Enum.GetNames(typeof(CollectionModificationAction));

            if (split.Length == 1)
            {
                //Only return success if this only value is NOT CMAction
                //b/c if someone messes up quotes it would attempt to set this otherwise
                var valid = !names.CaseInsContains(split[0]);
                return(valid
                                        ? SetValueResult.FromSuccess(setting, value, $"Defaulting action to {CollectionModificationAction.Toggle}.")
                                        : SetValueResult.FromError(setting, value, "Cannot provide only an action."));
            }
            if (names.CaseInsContains(split[0]))
            {
                context.Action = (CollectionModificationAction)Enum.Parse(typeof(CollectionModificationAction), split[0], true);
                value          = split[1];
                return(SetValueResult.FromSuccess(setting, value, $"Set action to {context.Action}."));
            }
            else
            {
                return(SetValueResult.FromSuccess(setting, value, $"Defaulting action to {CollectionModificationAction.Toggle}."));
            }
        }
        /// <summary>
        /// Attempts to convert the value.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="converter"></param>
        /// <param name="value"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        public static IResult TryConvertValue <T>(this IValueParser <T> converter, string value, out T result)
        {
            result = default;
            //Let default just pass on through and set the default value
            if (!value.CaseInsEquals("default") && !converter.Parser(value, out result))
            {
                return(SetValueResult.FromError(converter, value, "Unable to convert."));
            }
            if (result == null && converter.CannotBeNull)
            {
                return(SetValueResult.FromError(converter, value, "Cannot be set to 'NULL'."));
            }

            return(converter.Validation(result) ?? Result.FromSuccess("Successfully converted"));
        }
        /// <summary>
        /// Modifies the collection in the specified way.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="setting"></param>
        /// <param name="source"></param>
        /// <param name="value"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public static IResult ModifyCollection <T>(this IValueParser <T> setting, ICollection <T> source, T value, Context context)
        {
            setting.ThrowIfInvalid(value);

            bool success;

            switch (context.Action)
            {
            case CollectionModificationAction.Toggle:
                var rCount = source.RemoveAll(value, setting.EqualityComparer, context.MaxRemovalCount);
                if (rCount <= 0)                         //Only add if nothing was removed
                {
                    source.Add(value);
                }
                success = true;
                break;

            case CollectionModificationAction.Add:
                source.Add(value);
                success = true;
                break;

            case CollectionModificationAction.AddIfMissing:
                var contains = source.Contains(value, setting.EqualityComparer);
                if (!contains)                         //Only add if not contained in collection
                {
                    source.Add(value);
                }
                success = !contains;
                break;

            case CollectionModificationAction.Remove:
                success = source.RemoveAll(value, setting.EqualityComparer, context.MaxRemovalCount) > 0;                         //Failure if removed nothing
                break;

            default:
                throw new ArgumentException("Invalid action supplied.", nameof(context));
            }

            return(success
                                ? SetValueResult.FromSuccess(setting, value, $"Successfully {context.ActionString}.")
                                : SetValueResult.FromError(setting, value, $"Already {context.ActionString}."));
        }
Beispiel #4
0
        public override SetValueResult SetValue(string fileName, int fieldIndex, int unitIndex,
                                                ContentFieldType fieldType, string fieldValue, SetValueFlags flags)
        {
            if (String.IsNullOrEmpty(fileName) && fieldIndex < 0)    // change attributes operation has ended
            {
                return(SetValueResult.NoSuchField);
            }
            if (String.IsNullOrEmpty(fieldValue))
            {
                return(SetValueResult.NoSuchField);
            }
            SetValueResult result   = SetValueResult.NoSuchField;
            DateTime       created  = DateTime.Parse(fieldValue);
            bool           dateOnly = (flags & SetValueFlags.OnlyDate) != 0;

            if (Directory.Exists(fileName))
            {
                DirectoryInfo dirInfo = new DirectoryInfo(fileName);
                if (SetCombinedDateTime(ref created, dirInfo.CreationTime, fieldType, dateOnly))
                {
                    Directory.SetCreationTime(fileName, created);
                    result = SetValueResult.Success;
                }
            }
            else if (File.Exists(fileName))
            {
                FileInfo fileInfo = new FileInfo(fileName);
                if (SetCombinedDateTime(ref created, fileInfo.CreationTime, fieldType, dateOnly))
                {
                    File.SetCreationTime(fileName, created);
                    result = SetValueResult.Success;
                }
            }
            else
            {
                result = SetValueResult.FileError;
            }
            return(result);
        }
Beispiel #5
0
        public SetValueResult[] SetValues(params Object[] values)
        {
            var count = values.Length;
            var bb    = new SetValueResult[count];

            for (int i = 0; i < count; i++)
            {
                if (values[i] == TableRecord.SkipSetValue)
                {
                    bb[i] = SetValueResult.Skip;
                    continue;
                }
                if (this.SetValue(i, values[i]) == true)
                {
                    bb[i] = SetValueResult.Success;
                }
                else
                {
                    bb[i] = SetValueResult.Failure;
                }
            }
            return(bb);
        }