public FieldListType() { // OptionParameter.Add(new OptionParameter() { Name = "Collection", Type = "text", Description = "Collection name" }); }
public DateTimeFieldType() { OptionParameter.Add(new OptionParameter() { Name = "max", Type = "date" }); OptionParameter.Add(new OptionParameter() { Name = "min", Type = "date" }); }
public NumberFieldType() { OptionParameter.Add(new OptionParameter() { Name = "max", Type = "number" }); OptionParameter.Add(new OptionParameter() { Name = "min", Type = "number" }); }
public IntFieldType() { OptionParameter.Add(new OptionParameter() { Name = "max", Type = "int" }); OptionParameter.Add(new OptionParameter() { Name = "min", Type = "int" }); }
public TextFieldType() { OptionParameter.Add(new OptionParameter() { Name = "regexp", Type = "text" }); OptionParameter.Add(new OptionParameter() { Name = "maxlength", Type = "int" }); }
public ListType() { // OptionParameter.Add(new OptionParameter() { Name = "allowNotMapped", Type = "bool", Description = "true if you allow values not listed into values" }); //comma separated values OptionParameter.Add(new OptionParameter() { Name = "values", Type = "text", Description = "comma separated values. Format is A|B|C or 1=A|2=B. | and = are not allowed within values" }); }
public RelationFieldType() { OptionParameter.Add(new OptionParameter() { Name = "Collection", Type = "entities-list" }); OptionParameter.Add(new OptionParameter() { Name = "Multiple", Type = "bool", Description = "1N or NM", }); OptionParameter.Add(new OptionParameter() { Name = "Property", Type = "fields-list", Description = "property to show in search list", }); }
public ShortOptionAttribute(char option, OptionParameter parameter = OptionParameter.None) { Option = option; Parameter = parameter; }
static bool TryGetInvokeArguments(ParameterInfo[] parameters, string[] args, int argsOffset, out object[] invokeArgs, out string errorMessage) { var argumentDictionary = ParseArgument(args, argsOffset); invokeArgs = new object[parameters.Length]; for (int i = 0; i < parameters.Length; i++) { var item = parameters[i]; var option = item.GetCustomAttribute <OptionAttribute>(); var value = default(OptionParameter); if (option != null && option.Index != -1) { value = new OptionParameter { Value = args[argsOffset + i] }; } if (value.Value != null || argumentDictionary.TryGetValue(item.Name, out value) || argumentDictionary.TryGetValue(option?.ShortName?.TrimStart('-') ?? "", out value)) { if (parameters[i].ParameterType == typeof(bool) && value.Value == null) { invokeArgs[i] = value.BooleanSwitch; continue; } if (value.Value != null) { if (parameters[i].ParameterType == typeof(string)) { // when string, invoke directly(avoid JSON escape) invokeArgs[i] = value.Value; continue; } else if (parameters[i].ParameterType.IsEnum) { try { invokeArgs[i] = Enum.Parse(parameters[i].ParameterType, value.Value, true); continue; } catch { errorMessage = "Parameter \"" + item.Name + "\"" + " fail on Enum parsing."; return(false); } } else if (typeof(System.Collections.IEnumerable).IsAssignableFrom(parameters[i].ParameterType)) { var v = value.Value; if (!(v.StartsWith("[") && v.EndsWith("]"))) { v = "[" + v + "]"; } try { invokeArgs[i] = JsonSerializer.NonGeneric.Deserialize(parameters[i].ParameterType, v); continue; } catch { errorMessage = "Parameter \"" + item.Name + "\"" + " fail on JSON deserialize, plaease check type or JSON escape or add double-quotation."; return(false); } } else { // decouple dependency? try { invokeArgs[i] = JsonSerializer.NonGeneric.Deserialize(parameters[i].ParameterType, value.Value); continue; } catch { errorMessage = "Parameter \"" + item.Name + "\"" + " fail on JSON deserialize, plaease check type or JSON escape or add double-quotation."; return(false); } } } } if (item.HasDefaultValue) { invokeArgs[i] = item.DefaultValue; } else { errorMessage = "Required parameter \"" + item.Name + "\"" + " not found in argument."; return(false); } } errorMessage = null; return(true); }
public OptionInDefaultCategory(MemberInfo target, OptionParameter parameter) { Target = target; Parameter = parameter; }
bool TryGetInvokeArguments(ParameterInfo[] parameters, string?[] args, int argsOffset, out object[] invokeArgs, out string?errorMessage) { var jsonOption = (JsonSerializerOptions)provider.GetService(typeof(JsonSerializerOptions)); var argumentDictionary = ParseArgument(args, argsOffset); invokeArgs = new object[parameters.Length]; for (int i = 0; i < parameters.Length; i++) { var item = parameters[i]; var option = item.GetCustomAttribute <OptionAttribute>(); var value = default(OptionParameter); if (option != null && option.Index != -1) { value = new OptionParameter { Value = args[argsOffset + i] }; } if (value.Value != null || argumentDictionary.TryGetValue(item.Name, out value) || argumentDictionary.TryGetValue(option?.ShortName?.TrimStart('-') ?? "", out value)) { if (parameters[i].ParameterType == typeof(bool) && value.Value == null) { invokeArgs[i] = value.BooleanSwitch; continue; } if (value.Value != null) { if (parameters[i].ParameterType == typeof(string)) { // when string, invoke directly(avoid JSON escape) invokeArgs[i] = value.Value; continue; } else if (parameters[i].ParameterType.IsEnum) { try { invokeArgs[i] = Enum.Parse(parameters[i].ParameterType, value.Value, true); continue; } catch { errorMessage = "Parameter \"" + item.Name + "\"" + " fail on Enum parsing."; return(false); } } else if (typeof(System.Collections.IEnumerable).IsAssignableFrom(parameters[i].ParameterType)) { var v = value.Value; if (!(v.StartsWith("[") && v.EndsWith("]"))) { var elemType = UnwrapCollectionElementType(parameters[i].ParameterType); if (elemType == typeof(string)) { if (!(v.StartsWith("\"") && v.EndsWith("\""))) { v = "[" + string.Join(",", v.Split(' ', ',').Select(x => "\"" + x + "\"")) + "]"; } else { v = "[" + v + "]"; } } else { v = "[" + string.Join(",", v.Trim('\'', '\"').Split(' ', ',')) + "]"; } } try { invokeArgs[i] = JsonSerializer.Deserialize(v, parameters[i].ParameterType, jsonOption); continue; } catch { errorMessage = "Parameter \"" + item.Name + "\"" + " fail on JSON deserialize, plaease check type or JSON escape or add double-quotation."; return(false); } } else { try { invokeArgs[i] = JsonSerializer.Deserialize(value.Value, parameters[i].ParameterType, jsonOption); continue; } catch { errorMessage = "Parameter \"" + item.Name + "\"" + " fail on JSON deserialize, plaease check type or JSON escape or add double-quotation."; return(false); } } } } if (item.HasDefaultValue) { invokeArgs[i] = item.DefaultValue; } else { var name = item.Name; if (option?.ShortName != null) { name = item.Name + "(" + "-" + option.ShortName + ")"; } errorMessage = "Required parameter \"" + name + "\"" + " not found in argument."; return(false); } } errorMessage = null; return(true); }
public LongOptionAttribute(string option, OptionParameter parameter = OptionParameter.None) { Option = option; Parameter = parameter; }