/// <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}.")); }
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); }
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); }