예제 #1
0
        /// <summary>
        /// Predicates for rule.
        /// </summary>
        /// <param name="condition">The condition.</param>
        /// <param name="isResourceCondition">if set to <c>true</c> [is resource condition].</param>
        /// <param name="gridResultColumn">The result column.</param>
        /// <param name="conditionalFormatter">The conditional formatter column.</param>
        /// <returns>Predicate{System.Object}.</returns>
        private static Predicate <object> PredicateForRule(Condition condition, bool isResourceCondition, ResultColumn gridResultColumn, ConditionalFormatter conditionalFormatter)
        {
            try
            {
                Predicate <object> valueFilterPredicate = BuildValueFilterPredicateNoNulls(condition, gridResultColumn, conditionalFormatter);

                return(value =>
                {
                    try
                    {
                        // Handle nulls
                        // for now ANY type of filter on a column will reject null values
                        if (value == null || value is DBNull)
                        {
                            switch (condition.Operator)
                            {
                            case ConditionType.NotEqual:
                                value = "";
                                break;

                            case ConditionType.IsNull:
                                return true;

                            case ConditionType.IsNotNull:
                                return false;

                            case ConditionType.AnyExcept:
                                return true;

                            default:
                                return false;
                            }
                        }

                        // Handle transforms
                        if (isResourceCondition)
                        {
                            var xml = (string)value;
                            if (condition.Operator == ConditionType.AnyExcept ||
                                condition.Operator == ConditionType.AnyOf ||
                                condition.Operator == ConditionType.CurrentUser)
                            {
                                value = DatabaseTypeHelper.GetEntityXmlId(xml);
                            }
                            else
                            {
                                value = DatabaseTypeHelper.GetEntityXmlName(xml);
                            }
                        }

                        // Evaluate the specific predicate
                        return valueFilterPredicate(value);
                    }
                    catch
                    {
                        return false;
                        //throw new Exception( string.Format( "Predicate failed. Data={0} {1}. Expected={2}", value == null ? "null" : value.GetType( ).Name, value, condition.ColumnType ), ex );
                    }
                });
            }
            catch (ArgumentException)
            {
                return(null); //  argument does not exist .. return null
            }
        }