private bool TryCreateImplicitFilter(
            PropertyInfo property,
            out FilterFieldDefintion definition)
        {
            if (property.PropertyType == typeof(string))
            {
                var field = new StringFilterFieldDescriptor(Context, property);
                definition = field.CreateDefinition();
                return(true);
            }

            if (property.PropertyType == typeof(bool) ||
                property.PropertyType == typeof(bool?))
            {
                var field = new BooleanFilterFieldDescriptor(
                    Context, property);
                definition = field.CreateDefinition();
                return(true);
            }

            if (typeof(IComparable).IsAssignableFrom(property.PropertyType))
            {
                var field = new ComparableFilterFieldDescriptor(
                    Context, property);
                definition = field.CreateDefinition();
                return(true);
            }

            definition = null;
            return(false);
        }
        private string GetNameForDefintion(FilterFieldDefintion definition)
        {
            var name = definition.Name.Value;

            if (name.Length > 1)
            {
                return(name.Substring(0, 1).ToUpperInvariant() +
                       name.Substring(1));
            }
            return(name.ToUpperInvariant());
        }
 public abstract NameString CreateFieldName(FilterFieldDefintion definition, FilterOperationKind kind);
        public NameString CreateFieldName(FilterFieldDefintion definition, FilterOperationKind kind)
        {
            switch (kind)
            {
            case FilterOperationKind.Equals:
                return(GetNameForDefintion(definition));

            case FilterOperationKind.NotEquals:
                return(GetNameForDefintion(definition) + "_Not");

            case FilterOperationKind.Contains:
                return(GetNameForDefintion(definition) + "_Contains");

            case FilterOperationKind.NotContains:
                return(GetNameForDefintion(definition) + "_Not_Contains");

            case FilterOperationKind.In:
                return(GetNameForDefintion(definition) + "_In");

            case FilterOperationKind.NotIn:
                return(GetNameForDefintion(definition) + "_Not_In");

            case FilterOperationKind.StartsWith:
                return(GetNameForDefintion(definition) + "_StartsWith");

            case FilterOperationKind.NotStartsWith:
                return(GetNameForDefintion(definition) + "_Not_StartsWith");

            case FilterOperationKind.EndsWith:
                return(GetNameForDefintion(definition) + "_EndsWith");

            case FilterOperationKind.NotEndsWith:
                return(GetNameForDefintion(definition) + "_Not_EndsWith");

            case FilterOperationKind.GreaterThan:
                return(GetNameForDefintion(definition) + "_Gt");

            case FilterOperationKind.NotGreaterThan:
                return(GetNameForDefintion(definition) + "_Not_Gt");

            case FilterOperationKind.GreaterThanOrEquals:
                return(GetNameForDefintion(definition) + "_Gte");

            case FilterOperationKind.NotGreaterThanOrEquals:
                return(GetNameForDefintion(definition) + "_Not_Gte");

            case FilterOperationKind.LowerThan:
                return(GetNameForDefintion(definition) + "_Lt");

            case FilterOperationKind.NotLowerThan:
                return(GetNameForDefintion(definition) + "_Not_Lt");

            case FilterOperationKind.LowerThanOrEquals:
                return(GetNameForDefintion(definition) + "_Lte");

            case FilterOperationKind.NotLowerThanOrEquals:
                return(GetNameForDefintion(definition) + "_Not_Lte");

            case FilterOperationKind.Object:
                return(GetNameForDefintion(definition));

            case FilterOperationKind.ArraySome:
                return(definition.Name + "_Some");

            case FilterOperationKind.ArrayNone:
                return(definition.Name + "_None");

            case FilterOperationKind.ArrayAll:
                return(definition.Name + "_All");

            case FilterOperationKind.ArrayAny:
                return(definition.Name + "_Any");

            default:
                throw new NotSupportedException();
            }
        }
Esempio n. 5
0
        private bool TryCreateImplicitFilter(
            PropertyInfo property,
            out FilterFieldDefintion definition)
        {
            Type type = property.PropertyType;

            if (type.IsGenericType && Nullable.GetUnderlyingType(type) is Type nullableType)
            {
                type = nullableType;
            }

            if (type == typeof(string))
            {
                var field = new StringFilterFieldDescriptor(Context, property);
                definition = field.CreateDefinition();
                return(true);
            }

            if (type == typeof(bool))
            {
                var field = new BooleanFilterFieldDescriptor(
                    Context, property);
                definition = field.CreateDefinition();
                return(true);
            }

            if (IsComparable(property.PropertyType))
            {
                var field = new ComparableFilterFieldDescriptor(
                    Context, property);
                definition = field.CreateDefinition();
                return(true);
            }

            if (DotNetTypeInfoFactory.IsListType(type))
            {
                if (!TypeInspector.Default.TryCreate(type, out Utilities.TypeInfo typeInfo))
                {
                    throw new ArgumentException(
                              FilterResources.FilterArrayFieldDescriptor_InvalidType,
                              nameof(property));
                }

                Type elementType = typeInfo.ClrType;
                ArrayFilterFieldDescriptor field;

                if (elementType == typeof(string) ||
                    elementType == typeof(bool) ||
                    typeof(IComparable).IsAssignableFrom(elementType))
                {
                    field = new ArrayFilterFieldDescriptor(
                        Context,
                        property,
                        typeof(ISingleFilter <>).MakeGenericType(elementType));
                }
                else
                {
                    field = new ArrayFilterFieldDescriptor(Context, property, elementType);
                }

                definition = field.CreateDefinition();
                return(true);
            }

            if (type.IsClass)
            {
                var field = new ObjectFilterFieldDescriptor(
                    Context, property, property.PropertyType);
                definition = field.CreateDefinition();
                return(true);
            }

            definition = null;
            return(false);
        }
        public override NameString CreateFieldName(
            FilterFieldDefintion definition,
            FilterOperationKind kind)
        {
            switch (kind)
            {
            case FilterOperationKind.Equals:
                return(definition.Name);

            case FilterOperationKind.NotEquals:
                return(definition.Name + "_not");

            case FilterOperationKind.Contains:
                return(definition.Name + "_contains");

            case FilterOperationKind.NotContains:
                return(definition.Name + "_not_contains");

            case FilterOperationKind.In:
                return(definition.Name + "_in");

            case FilterOperationKind.NotIn:
                return(definition.Name + "_not_in");

            case FilterOperationKind.StartsWith:
                return(definition.Name + "_starts_with");

            case FilterOperationKind.NotStartsWith:
                return(definition.Name + "_not_starts_with");

            case FilterOperationKind.EndsWith:
                return(definition.Name + "_ends_with");

            case FilterOperationKind.NotEndsWith:
                return(definition.Name + "_not_ends_with");

            case FilterOperationKind.GreaterThan:
                return(definition.Name + "_gt");

            case FilterOperationKind.NotGreaterThan:
                return(definition.Name + "_not_gt");

            case FilterOperationKind.GreaterThanOrEquals:
                return(definition.Name + "_gte");

            case FilterOperationKind.NotGreaterThanOrEquals:
                return(definition.Name + "_not_gte");

            case FilterOperationKind.LowerThan:
                return(definition.Name + "_lt");

            case FilterOperationKind.NotLowerThan:
                return(definition.Name + "_not_lt");

            case FilterOperationKind.LowerThanOrEquals:
                return(definition.Name + "_lte");

            case FilterOperationKind.NotLowerThanOrEquals:
                return(definition.Name + "_not_lte");

            case FilterOperationKind.Object:
                return(definition.Name);

            case FilterOperationKind.ArraySome:
                return(definition.Name + "_some");

            case FilterOperationKind.ArrayNone:
                return(definition.Name + "_none");

            case FilterOperationKind.ArrayAll:
                return(definition.Name + "_all");

            case FilterOperationKind.ArrayAny:
                return(definition.Name + "_any");

            default:
                throw new NotSupportedException();
            }
        }
Esempio n. 7
0
 private static string GetNameForDefinition(FilterFieldDefintion definition) =>
 definition.Name.Value is
 {
Esempio n. 8
0
        private bool TryCreateImplicitFilter(
            PropertyInfo property,
            out FilterFieldDefintion definition)
        {
            var type = property.PropertyType;

            if (type.IsGenericType && Nullable.GetUnderlyingType(type) is Type nullableType)
            {
                type = nullableType;
            }

            if (type == typeof(string))
            {
                var field = new StringFilterFieldDescriptor(Context, property);
                definition = field.CreateDefinition();
                return(true);
            }

            if (type == typeof(bool))
            {
                var field = new BooleanFilterFieldDescriptor(
                    Context, property);
                definition = field.CreateDefinition();
                return(true);
            }

            if (IsComparable(property.PropertyType))
            {
                var field = new ComparableFilterFieldDescriptor(
                    Context, property);
                definition = field.CreateDefinition();
                return(true);
            }

            if (typeof(IEnumerable).IsAssignableFrom(type))
            {
                ArrayFilterFieldDescriptor field;

                var genericTypeArgument = type.GetGenericArguments()[0];

                if (genericTypeArgument.IsGenericType &&
                    Nullable.GetUnderlyingType(genericTypeArgument) is Type nullableEnumerableType)
                {
                    genericTypeArgument = nullableEnumerableType;
                }
                if (genericTypeArgument == typeof(string) ||
                    genericTypeArgument == typeof(bool) ||
                    genericTypeArgument == typeof(bool?) ||
                    typeof(IComparable).IsAssignableFrom(genericTypeArgument))
                {
                    field = new ArrayFilterFieldDescriptor(
                        Context,
                        property,
                        typeof(ISingleFilter <>).MakeGenericType(genericTypeArgument)
                        );
                }
                else
                {
                    field = new ArrayFilterFieldDescriptor(Context, property, genericTypeArgument);
                }
                definition = field.CreateDefinition();
                return(true);
            }

            if (type.IsClass)
            {
                var field = new ObjectFilterFieldDescriptor(
                    Context, property, property.PropertyType);
                definition = field.CreateDefinition();
                return(true);
            }

            definition = null;
            return(false);
        }