Esempio n. 1
0
        /// <summary>
        /// Create a result block query action for a Query Rule
        /// </summary>
        /// <param name="rule">The query rule object</param>
        /// <param name="blockTitle">The result block Title</param>
        /// <param name="queryTemplate">The search query template in KQL format</param>
        /// <param name="resultSourceId">The search result source Id</param>
        /// <param name="routingLabel">A routing label for a content search WebPart</param>
        /// <param name="numberOfItems">The number of result to retrieve</param>
        public void CreateResultBlockAction(QueryRule rule, string blockTitle, string queryTemplate, Guid resultSourceId, string routingLabel, string numberOfItems)
        {
            var queryAction = (CreateResultBlockAction)rule.CreateQueryAction(QueryActionType.CreateResultBlock);

            queryAction.ResultTitle.DefaultLanguageString = blockTitle;

            if (!string.IsNullOrEmpty(queryTemplate))
            {
                queryAction.QueryTransform.QueryTemplate = queryTemplate;
            }

            queryAction.QueryTransform.SourceId = resultSourceId;

            if (!string.IsNullOrEmpty(routingLabel))
            {
                queryAction.ResultTableType = routingLabel;
            }

            if (!string.IsNullOrEmpty(numberOfItems))
            {
                queryAction.QueryTransform.OverrideProperties             = new QueryTransformProperties();
                queryAction.QueryTransform.OverrideProperties["RowLimit"] = int.Parse(numberOfItems, CultureInfo.InvariantCulture);
                queryAction.QueryTransform.OverrideProperties["TotalRowsExactMinimum"] = int.Parse(numberOfItems, CultureInfo.InvariantCulture);
            }

            rule.Update();
        }
Esempio n. 2
0
        public Trade[] GetAllTrades(QueryRule query, IList<string> filterOutTrades)
        {
            var allTrades = TradeRepository.GetAllTrades(query);

            if (allTrades != null && allTrades.Length > 0 && 
                filterOutTrades != null && filterOutTrades.Count > 0)
            {                
                var tempMapper = new Dictionary<string, Trade>();
                foreach(var item in allTrades)
                {
                    tempMapper[item.Id] = item; 
                }

                foreach(var item in filterOutTrades)
                {
                    tempMapper.Remove(item);
                }

                var values = tempMapper.Values;

                allTrades = new Trade[values.Count];
                values.CopyTo(allTrades, 0);
            }

            return allTrades;
        }
Esempio n. 3
0
        /// <summary>
        /// Creates a query rule object for the search level.
        /// If the rule already exists, if may be overwritten, depending on
        /// the QueryRuleInfo upgrade behavior definition (the OverwriteIfAlreadyExists
        /// flag is false by default).
        /// </summary>
        /// <param name="site">The current site collection.</param>
        /// <param name="queryRuleMetadata">The query rule definition.</param>
        /// <param name="level">The search level object.</param>
        /// <returns>The new query rule object.</returns>
        public QueryRule EnsureQueryRule(SPSite site, QueryRuleInfo queryRuleMetadata, SearchObjectLevel level)
        {
            var searchApp        = this.searchHelper.GetDefaultSearchServiceApplication(site);
            var queryRuleManager = new QueryRuleManager(searchApp);
            var searchOwner      = new SearchObjectOwner(level, site.RootWeb);

            // Build the SearchObjectFilter
            var searchObjectFilter = new SearchObjectFilter(searchOwner);

            QueryRuleCollection rules = queryRuleManager.GetQueryRules(searchObjectFilter);

            QueryRule returnedRule = null;
            var       existingRule = rules.FirstOrDefault(r => r.DisplayName == queryRuleMetadata.DisplayName);

            if (existingRule != null)
            {
                // Deal with upgrade behavior (delete and re-create or return existing)
                if (queryRuleMetadata.OverwriteIfAlreadyExists)
                {
                    rules.RemoveQueryRule(existingRule);
                    returnedRule = rules.CreateQueryRule(queryRuleMetadata.DisplayName, queryRuleMetadata.StartDate, queryRuleMetadata.EndDate, queryRuleMetadata.IsActive);
                }
                else
                {
                    returnedRule = existingRule;
                }
            }
            else
            {
                // None exist already with that display name, create it
                returnedRule = rules.CreateQueryRule(queryRuleMetadata.DisplayName, queryRuleMetadata.StartDate, queryRuleMetadata.EndDate, queryRuleMetadata.IsActive);
            }

            return(returnedRule);
        }
Esempio n. 4
0
        /// <summary>
        /// Create a promoted link action for a a query rule
        /// </summary>
        /// <param name="rule">The query rule object</param>
        /// <param name="bestBetId">The bestBetIds</param>
        public void CreatePromotedResultAction(QueryRule rule, Guid bestBetId)
        {
            var queryAction = (AssignBestBetsAction)rule.CreateQueryAction(QueryActionType.AssignBestBet);

            queryAction.BestBetIds.Add(bestBetId);

            rule.Update();
        }
        private static MethodInfo GetQueriedMethod(QueryRule queryRule, Type propertyType)
        {
            var method = propertyType.GetMethod(
                Operations.Get(queryRule.FieldOperation),
                new[] { propertyType }
                );

            return(method);
        }
        Predicate <T> IQueryCompiler <T> .CompileRule(QueryRule queryRule)
        {
            ConditionChecker.Requires(queryRule != null, "Query Rule cannot be null.");

            // When migrating the database, some fields of the old DTO might be missing.
            if (!typeof(T).HasProperty(queryRule.Field))
            {
                return(null);
            }

            var targetedType = Expression.Parameter(typeof(T));

            var leftMember   = Expression.Property(targetedType, queryRule.Field);
            var propertyType = typeof(T).GetProperty(queryRule.Field)?.PropertyType;

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

            Expression expression;

            // The given rule is binary(aka : equal, less than , gte, etc.)
            if (Enum.TryParse(Operations.Get(queryRule.FieldOperation), out ExpressionType binaryOperator))
            {
                var queriedValue = GetQueriedValue(queryRule, propertyType);
                expression = Expression.MakeBinary(binaryOperator, leftMember, queriedValue);
            }
            else
            {
                // The given rule is a method(aka: Contains, Equals, etc.
                var queriedMethod = GetQueriedMethod(queryRule, propertyType);
                if (queriedMethod == null)
                {
                    return(null);
                }

                var rightMember = GetRightMember(queryRule, queriedMethod);

                if (propertyType == typeof(string))
                {
                    var        toLowerMethodInfo    = typeof(string).GetMethod("ToLower", new Type[] { });
                    Expression leftMemberLowerCase  = Expression.Call(leftMember, toLowerMethodInfo ?? throw new MissingMethodException());
                    Expression rightMemberLowerCase = Expression.Call(rightMember, toLowerMethodInfo ?? throw new MissingMethodException());

                    expression = Expression.Call(leftMemberLowerCase, queriedMethod, rightMemberLowerCase);
                }
                else
                {
                    expression = Expression.Call(leftMember, queriedMethod, rightMember);
                }
            }

            return(Expression.Lambda <Predicate <T> >(expression, targetedType).Compile());
        }
Esempio n. 7
0
        /// <summary>
        /// Create a change query action for a Query Rule
        /// </summary>
        /// <param name="rule">The query rule object</param>
        /// <param name="queryTemplate">The search query template in KQL format</param>
        /// <param name="resultSourceId">The search result source Id</param>
        public void CreateChangeQueryAction(QueryRule rule, string queryTemplate, Guid resultSourceId)
        {
            var queryAction = (ChangeQueryAction)rule.CreateQueryAction(QueryActionType.ChangeQuery);

            if (!string.IsNullOrEmpty(queryTemplate))
            {
                queryAction.QueryTransform.QueryTemplate = queryTemplate;
            }

            queryAction.QueryTransform.SourceId = resultSourceId;

            rule.Update();
        }
        private static ConstantExpression GetQueriedValue(QueryRule queryRule, Type propertyType)
        {
            ConstantExpression queriedValue;

            if (propertyType.IsEnum)
            {
                queriedValue = Expression.Constant(Enum.Parse(propertyType, queryRule.Value.ToString()));
            }
            else if (propertyType == typeof(TimeSpan))
            {
                queriedValue = Expression.Constant(TimeSpan.Parse(queryRule.Value.ToString()));
            }
            else if (propertyType == typeof(string))
            {
                queriedValue = Expression.Constant(Convert.ChangeType(queryRule.Value.ToString().Trim().ToLower(), propertyType));
            }
            else
            {
                queriedValue = Expression.Constant(Convert.ChangeType(queryRule.Value, propertyType));
            }

            return(queriedValue);
        }
        private void QueryAndPrint()
        {
            try
            {
                FlyingMessageContext.Current = context;

                var configRepository = IocContainer.Container.Resolve<IConfigRepository>();
                var tradeService = IocContainer.Container.Resolve<ITradeService>();
                using (var printerService = IocContainer.Container.Resolve<IPrinterService>())
                {

                    printerService.InitializePrinter(new PrinterParameter()
                    {
                        Type = PrinterType.USB,
                        EncodingName = configRepository.PrinterEncodingName
                    });

                    var queryRule = new QueryRule()
                    {
                        PayType = PayTypeLite.All,
                        Status = TradeStatusLite.ToSend,
                        EndTime = DateTime.MinValue
                    };


                    while (true)
                    {
                        queryRule.StartTime = configRepository.QueryTime;

                        var trades = tradeService.GetAllTrades(queryRule, printerService.LastPrintedTrades);

                        if (trades != null && trades.Length > 0)
                        {
                            Message = new MessageItem(MessageLevel.Info, null, "trades.count:" + trades.Length);

                            foreach (var item in trades)
                            {
                                printerService.Print(item);

                                if (item.Created > queryRule.StartTime)
                                {
                                    queryRule.StartTime = item.Created;
                                }
                            }

                            printerService.Update();

                            configRepository.QueryTime = queryRule.StartTime;
                            configRepository.Update();
                        }
                        else
                        {
                            Thread.Sleep(configRepository.QueryInterval * 1000);
                        }
                    }
                }
            }
            catch(Exception ex)
            {
                LoggerUtility.WriteMessage(Severity.Error,
                    I18NUtility.GetString("I18N_QueryAndPrintFailed"), ex);
                Message = new MessageItem(MessageLevel.Error, null, 
                    I18NUtility.GetString("I18N_QueryAndPrintFailed", ex.Message));
            }
        }
        private static ConstantExpression GetRightMember(QueryRule queryRule, MethodInfo queriedMethod)
        {
            var methodParameterType = queriedMethod.GetParameters()[0].ParameterType;

            return(Expression.Constant(Convert.ChangeType(queryRule.Value, methodParameterType)));
        }
Esempio n. 11
0
        private static void Main(string[] args)
        {
            var someList = new DummyDataGenerator().GenerateDummyData();
            var engine   = QueryFactory <SimpleModel> .BuildQueryFilterEngine();

            #region Filtering

            // boolean field
            var onlyEnabledOnesRule = new QueryRule("Enabled", FieldOperation.Equal, false);
            var onlyEnabledOnes     = new QueryGroup(onlyEnabledOnesRule);

            var result = engine.FilterCollection(someList, onlyEnabledOnes);
            Console.WriteLine("----Testing against boolean fields----");
            Assert.Equal(1, result.Count());

            // number field
            var onlySomeIdsRule = new QueryRule("Id", FieldOperation.GreaterThan, 2);
            var onlySomeIds     = new QueryGroup(onlySomeIdsRule);

            result = engine.FilterCollection(someList, onlySomeIds);
            Console.WriteLine("----Testing against integer fields----");
            Assert.Equal(1, result.Count());

            // string fields
            var startsWithRule = new QueryRule("Name", FieldOperation.StartsWith, "A");
            var endsWithRule   = new QueryRule("Name", FieldOperation.EndsWith, "f");
            var startsEnds     = new QueryGroup().And(startsWithRule).Or(endsWithRule);

            result = engine.FilterCollection(someList, startsEnds);
            Console.WriteLine("----Testing against string fields----");
            Assert.Equal(2, result.Count());

            // datetime fields
            var datesGreaterThanRule = new QueryRule("Date", FieldOperation.GreaterThan, new DateTime(2017, 1, 1));
            var datesGreaterThan     = new QueryGroup().And(datesGreaterThanRule);

            result = engine.FilterCollection(someList, datesGreaterThan);
            Console.WriteLine("----Testing against datetime fields----");
            Assert.Equal(1, result.Count());

            // timespan
            var timeSpanGreaterThanRule = new QueryRule("TimeSpan", FieldOperation.GreaterThan, new DateTime(2017, 1, 1, 8, 0, 0).TimeOfDay);
            var timeSpanLessThanRule    = new QueryRule("TimeSpan", FieldOperation.LessThan, new DateTime(2018, 12, 1, 23, 0, 0).TimeOfDay);
            var timeSpanGreaterLess     = new QueryGroup().And(timeSpanGreaterThanRule).And(timeSpanLessThanRule);

            result = engine.FilterCollection(someList, timeSpanGreaterLess);
            Console.WriteLine("----Testing against timespan fields----");
            Assert.Equal(1, result.Count());

            // enums
            var enumEqualRule = new QueryRule("SimpleEnum", FieldOperation.Equal, SimpleEnum.Option0);
            var enumEqual     = new QueryGroup().And(enumEqualRule);

            result = engine.FilterCollection(someList, enumEqual);
            Console.WriteLine("----Testing against enum fields----");
            Assert.Equal(2, result.Count());

            #endregion Filtering

            #region Sorting

            // ascending
            var ascendingByDateRule = new QuerySorter("Date", SortingOperation.Ascending);
            var ascendingByDate     = new QueryGroup().AscendingBy(ascendingByDateRule);

            result = engine.SortCollection(someList, ascendingByDate);
            Console.WriteLine("----Testing against ascending sorting----");
            Assert.StrictEqual(JsonConvert.SerializeObject(someList.OrderBy(x => x.Date)), JsonConvert.SerializeObject(result));

            // desceding
            var descendingByDateRule = new QuerySorter("Date", SortingOperation.Descending);
            var descendingById       = new QuerySorter("Id", SortingOperation.Descending);
            var descendingByName     = new QuerySorter("Name", SortingOperation.Descending);

            var multipleDescending = new QueryGroup().DescendingBy(descendingByDateRule).DescendingBy(descendingById).DescendingBy(descendingByName);

            result = engine.SortCollection(someList, multipleDescending);
            Console.WriteLine("----Testing against descending sorting----");
            Assert.StrictEqual(JsonConvert.SerializeObject(someList.OrderByDescending(x => x.Date).ThenByDescending(x => x.Id).ThenByDescending(x => x.Name)), JsonConvert.SerializeObject(result));

            #endregion Sorting

            #region Filtering Fields

            var fieldsToShow   = new string[] { "Id", "Name", "SimpleEnum" };
            var filteredResult = engine.FilterFields(someList, fieldsToShow);

            Console.WriteLine("----Testing against filtering fields----");
            Assert.Equal(3, filteredResult.Count());
            Assert.Equal(2, filteredResult.Count(x => x.SimpleEnum == SimpleEnum.Option0.ToString()));

            #endregion Filtering Fields

            Console.WriteLine("---------------------------------All tests passed------------------------------------");
            Console.ReadKey();
        }
Esempio n. 12
0
        /// <summary>
        /// Create a promoted link action for a a query rule
        /// </summary>
        /// <param name="rule">The query rule object</param>
        /// <param name="bestBetId">The bestBetIds</param>
        public void CreatePromotedResultAction(QueryRule rule, Guid bestBetId)
        {
            var queryAction = (AssignBestBetsAction)rule.CreateQueryAction(QueryActionType.AssignBestBet);

            queryAction.BestBetIds.Add(bestBetId);

            rule.Update();
        }
Esempio n. 13
0
        /// <summary>
        /// Create a result block query action for a Query Rule
        /// </summary>
        /// <param name="rule">The query rule object</param>
        /// <param name="blockTitle">The result block Title</param>
        /// <param name="queryTemplate">The search query template in KQL format</param>
        /// <param name="resultSourceId">The search result source Id</param>
        /// <param name="routingLabel">A routing label for a content search WebPart</param>
        /// <param name="numberOfItems">The number of result to retrieve</param>
        public void CreateResultBlockAction(QueryRule rule, string blockTitle, string queryTemplate, Guid resultSourceId, string routingLabel, string numberOfItems)
        {
            var queryAction = (CreateResultBlockAction)rule.CreateQueryAction(QueryActionType.CreateResultBlock);

            queryAction.ResultTitle.DefaultLanguageString = blockTitle;

            if (!string.IsNullOrEmpty(queryTemplate))
            {
                queryAction.QueryTransform.QueryTemplate = queryTemplate;
            }

            queryAction.QueryTransform.SourceId = resultSourceId;

            if (!string.IsNullOrEmpty(routingLabel))
            {
                queryAction.ResultTableType = routingLabel;
            }

            if (!string.IsNullOrEmpty(numberOfItems))
            {
                queryAction.QueryTransform.OverrideProperties = new QueryTransformProperties();
                queryAction.QueryTransform.OverrideProperties["RowLimit"] = int.Parse(numberOfItems, CultureInfo.InvariantCulture);
                queryAction.QueryTransform.OverrideProperties["TotalRowsExactMinimum"] = int.Parse(numberOfItems, CultureInfo.InvariantCulture);
            }

            rule.Update();
        }
Esempio n. 14
0
        /// <summary>
        /// Create a change query action for a Query Rule
        /// </summary>
        /// <param name="rule">The query rule object</param>
        /// <param name="queryTemplate">The search query template in KQL format</param>
        /// <param name="resultSourceId">The search result source Id</param>
        public void CreateChangeQueryAction(QueryRule rule, string queryTemplate, Guid resultSourceId)
        {
            var queryAction = (ChangeQueryAction)rule.CreateQueryAction(QueryActionType.ChangeQuery);

            if (!string.IsNullOrEmpty(queryTemplate))
            {
                queryAction.QueryTransform.QueryTemplate = queryTemplate;
            }

            queryAction.QueryTransform.SourceId = resultSourceId;

            rule.Update();
        }