Exemple #1
0
        private IEnumerable <TabEntryDto> GetEntries(
            DeviceConfig config,
            PaginationRequest pagination,
            SortRequest sort,
            IEnumerable <AdvancedFilterRequest> filter,
            string tabSelector)
        {
            var actionDefs = _configHandler.GetActions(config.Actions).AsQueryable()
                             .Where(x => string.Equals(x.Tab, tabSelector, StringComparison.Ordinal));
            var entries = actionDefs.Select(x => new TabEntryDto {
                ListUi = x
            });

            foreach (var f in filter)
            {
                TabEntryFilter.AddFilter(ref entries, f.FilterBy, f.FilterString, f.FilterExcluding);
            }

            TabEntryFilter.AddSort(ref entries, sort.SortBy, sort.SortOrderAscending);

            List <TabEntryDto> list;

            if (pagination.PageNumber > 0 && pagination.PageSize > 0)
            {
                list = entries.ToPagedList(pagination.PageNumber, pagination.PageSize);
            }
            else
            {
                list = entries.ToList();
            }
            return(list);
        }
Exemple #2
0
        public void SingleSortTest()
        {
            var request = new SortRequest
            {
                Sorts = new ISort[]
                {
                    new Sort
                    {
                        Field     = nameof(Track.Name),
                        Direction = SortDirection.Ascending
                    }
                }
            };

            using (var dbContext = new TestDataContext())
            {
                var items     = dbContext.Tracks.ToList();
                var queryable = dbContext.Tracks.Sort(request);
                var sql       = ""; // ((DbSet<Track>)queryable).Sql;
                var sorted    = queryable.ToList();

                Debug.WriteLine(sql);

                Assert.AreEqual(items.Count, sorted.Count);
                Assert.AreNotEqual(items[0].Name, sorted[0].Name);
                Assert.AreEqual("\"40\"", sorted[0].Name);
            }
        }
Exemple #3
0
        public void SortTest()
        {
            var request = new SortRequest
            {
                Sorts = new ISort[]
                {
                    new Sort
                    {
                        Field     = nameof(Student.LastName),
                        Direction = SortDirection.Ascending
                    },
                    new Sort
                    {
                        Field     = nameof(Student.FirstName),
                        Direction = SortDirection.Ascending
                    }
                }
            };

            using (var dbContext = new TestDataContext())
            {
                var items  = dbContext.Students.ToList();
                var sorted = dbContext.Students.Sort(request).ToList();

                Assert.AreEqual(items.Count, sorted.Count);
                Assert.AreNotEqual(items.First().LastName, sorted.First().LastName);
                Assert.AreEqual("Leonard", sorted.First().FirstName);
            }
        }
Exemple #4
0
        private IEnumerable <TabEntryDto> GetActionsTab(DeviceConfig config, PaginationRequest pagination,
                                                        SortRequest sort, IEnumerable <AdvancedFilterRequest> filter)
        {
            if (string.IsNullOrEmpty(sort.SortBy))
            {
                sort.SortBy = "name";
            }

            return(GetEntries(config, pagination, sort, filter, "actions"));
        }
Exemple #5
0
        public Dictionary <DeviceId, IEnumerable <JobEntryDto> > GetAllJobs(SortRequest sort,
                                                                            IList <AdvancedFilterRequest> filterRequest)
        {
            var allDeviceIds = _persistenceProvider.GetAllDeviceIds().ToList();
            var data         = new Dictionary <DeviceId, IEnumerable <JobEntryDto> >();

            foreach (var deviceId in allDeviceIds)
            {
                data[deviceId] = GetJobs(deviceId, null, sort, filterRequest);
            }
            return(data);
        }
Exemple #6
0
        public void MultiSortTest()
        {
            var request = new SortRequest
            {
                Sorts = new Sort[]
                {
                    new Sort {
                        Direction = SortDirection.Ascending, Field = nameof(Track.AlbumId)
                    },
                    new Sort {
                        Direction = SortDirection.Descending, Field = nameof(Track.Bytes)
                    }
                }
            };

            using (var dbContext = new TestDataContext())
            {
                var items = dbContext.Tracks
                            .Include(x => x.Album)
                            .ToList();
                var queryable = dbContext.Tracks.Sort(request);
                var sql       = ""; // ((DbQuery<Track>)queryable).Sql;
                var sorted    = queryable.ToList();

                Debug.WriteLine(sql);

                Assert.AreEqual(items.Count, sorted.Count);

                var albumId = int.MinValue;
                foreach (var album in sorted.GroupBy(x => x.AlbumId))
                {
                    Assert.IsFalse(albumId > album.Key);
                    albumId = album.Key;

                    var bytes = decimal.MaxValue;
                    foreach (var track in album)
                    {
                        Assert.IsFalse(bytes < track.Bytes);
                        bytes = track.Bytes;
                    }
                }
            }
        }
Exemple #7
0
        private void HandleSortChange(object s, PropertyChangedEventArgs e)
        {
            var sender = (SortRequest <Ship>)s;

            if (sortMode.Last() != sender && sender.SortKey == _builtinSorts[0])
            {
                sortMode.Remove(sender);
                sender.PropertyChanged -= HandleSortChange;
            }
            if (sortMode.Last().SortKey != _builtinSorts[0])
            {
                var defSort = new SortRequest <Ship>(this)
                {
                    SortKey = _builtinSorts[0]
                };
                defSort.PropertyChanged += HandleSortChange;
                sortMode.Add(defSort);
            }
            RaiseMultiPropertyChanged(nameof(ShipSortMode));
        }
Exemple #8
0
        public IEnumerable <TabEntryDto> GetTab(DeviceId deviceId, string tab, PaginationRequest pagination,
                                                SortRequest sort, IEnumerable <AdvancedFilterRequest> filter)
        {
            var config = _configHandler.GetDeviceConfig(deviceId);

            switch (tab)
            {
            case "dashboard":
                return(GetJobsTab(config, pagination, sort, filter));

            case "actions":
                return(GetActionsTab(config, pagination, sort, filter));

            case "livedata":
                return(GetValuesTab(config, pagination, sort, filter));

            default:
                throw new UnknownKeyException();
            }
        }
Exemple #9
0
        private IEnumerable <TabEntryDto> GetJobsTab(DeviceConfig config, PaginationRequest pagination, SortRequest sort,
                                                     IEnumerable <AdvancedFilterRequest> filterRequest)
        {
            var jobs = _messageHandler.GetJobs(config)
                       .AsQueryable()
                       .Cast <Job>();

            foreach (var filter in filterRequest)
            {
                JobFilter.AddFilter(ref jobs, filter.FilterBy, filter.FilterString, filter.FilterExcluding);
            }

            JobFilter.AddJobSort(ref jobs, sort.SortBy, sort.SortOrderAscending);

            //FIXME -> Pagination in Watch implementieren !
            //Momentan für Watch -> limit 10 Jobs !!!
            if (config.DeviceId.DeviceName == "B")
            {
                pagination.PageSize = 10;
                jobs = jobs.Where(x => x.Status != JobStatus.Done);
            }
            //END FIXME

            List <Job> list;

            if (pagination.PageNumber > 0 && pagination.PageSize > 0)
            {
                list = jobs.ToPagedList(pagination.PageNumber, pagination.PageSize);
            }
            else
            {
                list = jobs.ToList();
            }
            //            return list.Select(x => new TabEntryDto { Entry = x });
            var actionDefs    = _configHandler.GetActions(config.Actions);
            var actionEntries = actionDefs.Select(x => new TabEntryDto {
                ListUi = x
            })
                                .Where(x => string.Equals(x.ListUi.Tab, "dashboard", StringComparison.Ordinal))
                                .OrderBy(x => x.ListUi.Id).ToList();
            var jobEntries = list.Select(x => new TabEntryDto {
                Entry = x
            }).ToList();

            jobEntries.AddRange(actionEntries);
            return(jobEntries);
        }
Exemple #10
0
 private IEnumerable <TabEntryDto> GetValuesTab(DeviceConfig config, PaginationRequest pagination,
                                                SortRequest sort, IEnumerable <AdvancedFilterRequest> filter)
 {
     return(GetEntries(config, pagination, sort, filter, "livedata"));
 }
        /// <summary>
        /// 排序
        /// </summary>
        /// <typeparam name="TSource">查询对象的类型</typeparam>
        /// <param name="source">原始查询</param>
        /// <param name="sortRequest">排序请求</param>
        /// <returns>排序后的查询</returns>
        public static IQueryable <TSource> OrderBy <TSource>(this IQueryable <TSource> source, SortRequest sortRequest)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source));
            }
            if (sortRequest == null)
            {
                throw new ArgumentNullException(nameof(sortRequest));
            }

            var result = source;

            if (!string.IsNullOrEmpty(sortRequest.Ordering))
            {
                result = source.OrderBy(sortRequest.Ordering);
            }

            return(result);
        }
Exemple #12
0
        public IEnumerable <JobEntryDto> GetJobs(DeviceId deviceId, PaginationRequest pagination, SortRequest sort,
                                                 IEnumerable <AdvancedFilterRequest> filterRequest)
        {
            var config = _configHandler.GetDeviceConfig(deviceId);
            var jobs   = _messageHandler.GetJobs(config)
                         .AsQueryable()
                         .Cast <Job>();

            foreach (var filter in filterRequest)
            {
                JobFilter.AddFilter(ref jobs, filter.FilterBy, filter.FilterString, filter.FilterExcluding);
            }
            JobFilter.AddJobSort(ref jobs, sort.SortBy, sort.SortOrderAscending);

            //FIXME -> Pagination in Watch implementieren !
            //Momentan für Watch -> limit 10 Jobs !!!
//            if (config.DeviceId.DeviceName == "B")
//            {
//                if (pagination == null)
//                {
//                    pagination = new PaginationRequest();
//                }
//                pagination.PageSize = 10;
//                jobs = jobs.Where(x => x.Status != JobStatus.Done);
//            }
            //END FIXME

            List <Job> list;

            if (pagination != null && pagination.PageNumber > 0 && pagination.PageSize > 0)
            {
                list = jobs.ToPagedList(pagination.PageNumber, pagination.PageSize);
            }
            else
            {
                list = jobs.ToList();
            }

            var uiLayouts = _configHandler.GetUiLayouts();

            return(list.Select(x => new JobEntryDto()
            {
                Entry = x,
                Ui = uiLayouts.FirstOrDefault(y => y.Id == x.Name)
            }));
        }
Exemple #13
0
 public ActionResult <List <string[]> > GeneticAlgorithm(
     [FromServices] SorterService <GeneticAlgorithm <string>, string> geneticAlgorithm, SortRequest <string> sortRequest)
 {
     return(geneticAlgorithm.SortMatrix(sortRequest.Matrix.ToArray()).ToList());
 }
Exemple #14
0
 public ActionResult <List <string[]> > SimulatedAnnealing(
     [FromServices] SorterService <SimulatedAnnealing <string>, string> simulatedAnnealing, SortRequest <string> sortRequest)
 {
     return(simulatedAnnealing.SortMatrix(sortRequest.Matrix.ToArray()).ToList());
 }
Exemple #15
0
 public ActionResult <List <string[]> > NaiveSearch([FromServices] SorterService <NaiveSearch <string>, string> naiveSearch,
                                                    SortRequest <string> sortRequest)
 {
     return(naiveSearch.SortMatrix(sortRequest.Matrix.ToArray()).ToList());
 }