예제 #1
0
 public FieldListType()
 {
     //
     OptionParameter.Add(new OptionParameter()
     {
         Name        = "Collection",
         Type        = "text",
         Description = "Collection name"
     });
 }
예제 #2
0
        public DateTimeFieldType()
        {
            OptionParameter.Add(new OptionParameter()
            {
                Name = "max",
                Type = "date"
            });

            OptionParameter.Add(new OptionParameter()
            {
                Name = "min",
                Type = "date"
            });
        }
예제 #3
0
        public NumberFieldType()
        {
            OptionParameter.Add(new OptionParameter()
            {
                Name = "max",
                Type = "number"
            });

            OptionParameter.Add(new OptionParameter()
            {
                Name = "min",
                Type = "number"
            });
        }
예제 #4
0
        public IntFieldType()
        {
            OptionParameter.Add(new OptionParameter()
            {
                Name = "max",
                Type = "int"
            });

            OptionParameter.Add(new OptionParameter()
            {
                Name = "min",
                Type = "int"
            });
        }
예제 #5
0
        public TextFieldType()
        {
            OptionParameter.Add(new OptionParameter()
            {
                Name = "regexp",
                Type = "text"
            });

            OptionParameter.Add(new OptionParameter()
            {
                Name = "maxlength",
                Type = "int"
            });
        }
예제 #6
0
파일: ListType.cs 프로젝트: tuanva/RawCMS
        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"
            });
        }
예제 #7
0
        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",
            });
        }
예제 #8
0
 public ShortOptionAttribute(char option, OptionParameter parameter = OptionParameter.None)
 {
     Option    = option;
     Parameter = parameter;
 }
예제 #9
0
        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;
 }
예제 #11
0
        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);
        }
예제 #12
0
 public LongOptionAttribute(string option, OptionParameter parameter = OptionParameter.None)
 {
     Option    = option;
     Parameter = parameter;
 }