internal PpsViewDefinition(PpsEnvironment environment, XElement xDefinition)
            : base(environment, xDefinition.GetAttribute("name", null))
        {
            viewId = xDefinition.GetAttribute("view", String.Empty);
            if (String.IsNullOrEmpty(viewId))
            {
                throw new ArgumentException("List viewId is missing.");
            }

            viewBaseFilter = PpsDataFilterExpression.Parse(xDefinition.GetAttribute("filter", String.Empty));
            displayName    = xDefinition.GetAttribute("displayName", this.Name);
            displayImage   = xDefinition.GetAttribute("displayImage", this.Name);

            visibleCondition = environment.CreateChunk(xDefinition.Element(xnVisible), true);

            // parse the filters
            var priority = 0;

            this.filters = (
                from c in xDefinition.Elements(xnFilter)
                select new PpsViewFilter(c, ref priority)
                ).OrderBy(c => c.Priority).ToArray();

            // parse orders
            priority        = 0;
            this.sortOrders = (
                from c in xDefinition.Elements(xnOrder)
                select new PpsViewOrder(c, ref priority)
                ).OrderBy(c => c.Priority).ToArray();
        }         // ctor
示例#2
0
        }         // func GetStringArray

        private async Task OpenCursorAsync(LuaTable table)
        {
            // not optional
            var selectExpression = table.GetOptionalValue("name", (string)null) ?? throw new ArgumentNullException("name");

            // parse selector
            var selectorExpression = PpsDataFilterExpression.Parse(table.GetMemberValue("filter"));

            // parse optional columns
            var columns = PpsDataColumnExpression.Parse(table.GetMemberValue("columns")).ToArray();

            // parse optional order
            var orderExpressions = PpsDataOrderExpression.Parse(table.GetMemberValue("order")).ToArray();

            // try to get a list
            int cursorId;

            lock (cursors)
                cursorId = ++lastCursorId;

            var cursor = new OpenCursor(cursorId, await provider.GetListAsync(selectExpression, columns, selectorExpression, orderExpressions));

            lock (cursors)
                cursors.Add(cursorId, cursor);

            // return the cursor id
            await PushPacketAsync(new LuaTable()
            {
                ["id"] = cursorId
            });
        }         // proc OpenCursorAsync
示例#3
0
        /// <summary>Parse string representation from ToString.</summary>
        /// <param name="data"></param>
        /// <param name="list"></param>
        /// <returns></returns>
        public static bool TryParse(string data, out PpsDataQuery list)
        {
            var arguments = HttpUtility.ParseQueryString(data, Encoding.UTF8);
            var viewId    = arguments["v"];

            if (String.IsNullOrEmpty(viewId))
            {
                list = null;
                return(false);
            }

            list = new PpsDataQuery(viewId);

            var f = arguments["f"];

            if (!String.IsNullOrEmpty(f))
            {
                list.Filter = PpsDataFilterExpression.Parse(f);
            }

            var l = arguments["l"];

            if (!String.IsNullOrEmpty(l))
            {
                list.Columns = PpsDataColumnExpression.Parse(l).ToArray();
            }

            var o = arguments["o"];

            if (!String.IsNullOrEmpty(o))
            {
                list.Order = PpsDataOrderExpression.Parse(o).ToArray();
            }

            var s = arguments["s"];

            if (!String.IsNullOrEmpty(s))
            {
                list.Start = Int32.Parse(s);
            }
            var c = arguments["c"];

            if (!String.IsNullOrEmpty(c))
            {
                list.Count = Int32.Parse(c);
            }

            var a = arguments["a"];

            if (!String.IsNullOrEmpty(a))
            {
                list.AttributeSelector = a;
            }

            return(true);
        }         // func TryParse
        internal PpsViewFilter(XElement x, ref int priority)
        {
            this.name = x.GetAttribute("name", String.Empty);
            if (String.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException("@name");
            }

            this.displayName = x.GetAttribute("displayName", name);
            this.priority    = priority = x.GetAttribute("priority", priority + 1);

            var expr = x.Value;

            this.filterExpression = String.IsNullOrEmpty(expr) ? new PpsDataFilterNativeExpression(name) : PpsDataFilterExpression.Parse(expr);
        }         // ctor
示例#5
0
        private void TestFilter(string expected, string filterExpression)
        {
            var f      = PpsDataFilterExpression.Parse(filterExpression);
            var result = f.ToString();

            Console.Write("Input====> ");
            Console.WriteLine(filterExpression);
            Console.Write("BaseType=> ");
            Console.WriteLine("{0}", f.Type);
            Console.Write("result===> ");
            Console.WriteLine(result);
            Console.Write("expected=> ");
            Console.WriteLine(expected);

            Assert.AreEqual(expected, result);
        }
示例#6
0
 private void UpdateFilterExpression()
 {
     if (filterView != null && AllowFilter)
     {
         var expr = PpsDataFilterExpression.Parse(UserFilterText);
         filterView.FilterExpression = expr;
         SetValue(isFilteredPropertyKey, expr == PpsDataFilterExpression.True);
     }
     else
     {
         SetValue(isFilteredPropertyKey, false);
         if (filterView != null)
         {
             filterView.FilterExpression = PpsDataFilterExpression.True;
         }
     }
 }         // proc UpdateFilterExpression
示例#7
0
            }             // func CreateSelectorAsync

            /// <summary>Create a selector from a select information.</summary>
            /// <param name="select"></param>
            /// <param name="columns"></param>
            /// <param name="filter"></param>
            /// <param name="order"></param>
            /// <param name="throwException"></param>
            /// <returns></returns>
            public async Task <PpsDataSelector> CreateSelectorAsync(string select, PpsDataColumnExpression[] columns, PpsDataFilterExpression filter = null, PpsDataOrderExpression[] order = null, bool throwException = true)
            {
                if (String.IsNullOrEmpty(select))
                {
                    throw new ArgumentNullException(nameof(select));
                }

                // create selector
                var selectorInfo = new PpsViewJoinExpression(this, select, throwException);

                if (!selectorInfo.IsValid && !throwException)
                {
                    return(null);
                }

                // create selector
                var selector = await selectorInfo.CreateSelectorAsync();

                if (selector == null)
                {
                    return(null);
                }

                // column restrictions
                if (!PpsDataColumnExpression.IsEmpty(columns))
                {
                    selector = selector.ApplyColumns(columns);
                }

                // apply filter rules
                if (!PpsDataFilterExpression.IsEmpty(filter))
                {
                    selector = selector.ApplyFilter(filter, selectorInfo.LookupFilter);
                }

                // apply order
                if (!PpsDataOrderExpression.IsEmpty(order))
                {
                    selector = selector.ApplyOrder(order, selectorInfo.LookupOrder);
                }

                return(selector);
            }             // func CreateSelector
示例#8
0
 public PpsDataQuery GetShellList(bool includeColumnAlias)
 {
     if (IsEmpty)
     {
         return(null);
     }
     else
     {
         return(new PpsDataQuery(Views)
         {
             Filter = PpsDataFilterExpression.Parse(Filter),
             Columns = columnInfos.Select(c => c.ToColumn(includeColumnAlias)).ToArray(),
             Order = (
                 from col in columnInfos
                 let o = col.ToOrder()
                         where o != null
                         select o
                 ).ToArray()
         });
     }
 }         // func GetShellList
示例#9
0
            }             // ctor

            public async override Task <IEnumerable <IDataRow> > GetListAsync(string select, PpsDataColumnExpression[] columns, PpsDataFilterExpression filter, PpsDataOrderExpression[] order)
            => await application.Database.CreateSelectorAsync(select, columns, filter, order);
示例#10
0
        }         // proc OnApplyTemplate

        private void UpdateFilteredList()
        {
            if (ItemsSource == null)
            {
                return;
            }

            var expr = String.IsNullOrWhiteSpace(FilterText) ? PpsDataFilterExpression.True : PpsDataFilterExpression.Parse(FilterText);

            if (ItemsSource is IPpsDataRowViewFilter filterAble)
            {
                filterAble.FilterExpression = expr;
                SetValue(FilteredItemsSourcePropertyKey, ItemsSource);
            }
            else
            {
                SetValue(FilteredItemsSourcePropertyKey, ItemsSource);
            }
        }         // proc UpdateFilteredList
示例#11
0
 /// <summary>Access to a list.</summary>
 /// <param name="select">Command to choose the this.</param>
 /// <param name="columns">Columns the should be returned.</param>
 /// <param name="filter">A condition to select the rows.</param>
 /// <param name="order">Row order</param>
 /// <returns></returns>
 public abstract Task <IEnumerable <IDataRow> > GetListAsync(string select, PpsDataColumnExpression[] columns, PpsDataFilterExpression filter, PpsDataOrderExpression[] order);
示例#12
0
            }             // ctor

            protected override Predicate <object> CreateFilterPredicate(PpsDataFilterExpression filterExpression)
            {
                var filterFunc = PpsDataFilterVisitorLambda.CompileTypedFilter <IPpsAttachmentItem>(filterExpression);

                return(new Predicate <object>(o => filterFunc((IPpsAttachmentItem)o)));
            }     // func CreateFilterPredicate
示例#13
0
 public Predicate <IDataRow> CreateDataRowFilter(string filterExpr)
 => PpsDataFilterVisitorDataRow.CreateDataRowFilter <IDataRow>(PpsDataFilterExpression.Parse(filterExpr));
示例#14
0
        }         // proc OnCollectionChanged

        /// <summary></summary>
        /// <param name="filterExpression"></param>
        /// <returns></returns>
        protected sealed override Predicate <object> CreateFilterPredicate(PpsDataFilterExpression filterExpression)
        => PpsDataFilterVisitorDataRow.CreateDataRowFilter <object>(filterExpression);
示例#15
0
 public void TestInExpr()
 {
     var f  = PpsDataFilterExpression.Parse("Int64:(1 2 3 4 5)");
     var p  = PpsDataFilterVisitorLambda.CompileTypedFilter <Props>(f);
     var f2 = PpsDataFilterExpression.Parse("or(or(Int64:=1 Int64:=2 Int64:=3 Int64:=4 Int64:=2) Int64:=5)").Reduce();
 }