Пример #1
0
        public void TestResolve(TestEnum expected, string key, string value)
        {
            var resolver = new EnumResolver <TestEnum>();
            var model    = new ArgumentModel(key, value);

            Assert.Equal(expected, resolver.Resolve(model));
        }
Пример #2
0
        public void VisitEmptyMethod(QNode node)
        {
            var left   = this.ContextExpression.Pop();
            var method = EnumResolver.ResolveNodeType(node.Type);

            if (method == NodeType.ToString)
            {
                var toStringMethod = typeof(object).GetMethod("ToString", new Type[] { });
                var exp            = Expression.Call(left, toStringMethod, null);
                this.ContextExpression.Push(exp);
            }
            else if (method == NodeType.ToLower)
            {
                var exp = Expression.Call(left, Methods.ToLower, null);
                this.ContextExpression.Push(exp);
            }
            else
            {
                var types = new List <Type>
                {
                    left.Type.GetTypeInfo().IsGenericType
                                        ? left.Type.GenericTypeArguments[0]
                                        : left.Type
                };
                var exp = Expression.Call(typeof(Enumerable), method.ToString(), types.ToArray(), left);
                this.ContextExpression.Push(exp);
            }
        }
        public ActionResult Months()
        {
            var months = new EMonth().ConvertToCollection();

            months.ForEach(month => month.Name = EnumResolver.Month(month.Value));
            return(new JsonFactory().Success(months));
        }
Пример #4
0
        public void VisitBinary(QNode node)
        {
            var right = this.ContextExpression.Pop();
            var left  = this.ContextExpression.Pop();
            var op    = EnumResolver.ResolveNodeType(node.Type);
            var exp   = this.BuildBinaryExpression(op, left, right);

            this.ContextExpression.Push(exp);
        }
        public JsonResult GetUnits()
        {
            var units = new UnitType().ConvertToCollection();

            foreach (var unit in units)
            {
                unit.Name = EnumResolver.Unit(unit.Value);
            }
            return(new JsonFactory().Success(units, units.Count));
        }
Пример #6
0
        protected virtual IResolver MakeResolver()
        {
            var services = this.MakeServices();
            var resolver = NoneResolver.Instance;

            resolver = new EnumResolver(resolver);
            resolver = new ArrayResolver(resolver, services);
            resolver = new ActivityResolver(resolver);
            resolver = new EventActivityValueResolver(resolver);
            resolver = new InvokeActivityValueResolver(resolver);

            return(resolver);
        }
Пример #7
0
        protected virtual IResolver MakeResolver()
        {
            var services = this.MakeServices();
            var resolver = NoneResolver.Instance;

            resolver = new EnumResolver(resolver);
            resolver = new ArrayResolver(resolver, services);
            resolver = new ActivityResolver(resolver);
            resolver = new TriggerValueResolver(resolver);
            // TODO: add InvokeValueResolver

            return(resolver);
        }
Пример #8
0
        public void VisitLambdaMethod(QNode node)
        {
            var right = this.ContextExpression.Pop();
            var left  = this.ContextExpression.Pop();

            var method = EnumResolver.ResolveNodeType(node.Type);

            var lambda = Expression.Lambda(right, this.ContextParameters.Peek());

            var exp = this.BuildMethodCallExpression(method, left, lambda);

            this.ContextExpression.Push(exp);
        }
Пример #9
0
        public void Resolver_Enum()
        {
            var resolver = new EnumResolver(NoneResolver.Instance);

            DayOfWeek actual;

            Assert.IsFalse(resolver.TryResolve(null, out actual));
            Assert.IsFalse(resolver.TryResolve(Some, out actual));

            var expected = DayOfWeek.Monday;
            {
                Assert.IsTrue(resolver.TryResolve(expected.ToString(), out actual));
                Assert.AreEqual(expected, actual);
            }
            {
                Assert.IsFalse(resolver.TryResolve(((int)expected).ToString(), out actual));
                Assert.AreEqual(DayOfWeek.Sunday, actual);
            }
        }
Пример #10
0
        public static void Accept(this QNode node, IQNodeVisitor visitor)
        {
            var group = EnumResolver.ResolveNodeGroup(node.Type);

            if (group == NodeGroup.Binary)
            {
                AcceptBinary(node, visitor);
            }

            if (group == NodeGroup.Member)
            {
                AcceptMember(node, visitor);
            }

            if (group == NodeGroup.Querable)
            {
                AcceptQuerable(node, visitor);
            }

            if (group == NodeGroup.Method)
            {
                var method = EnumResolver.ResolveNodeType(node.Type);

                if (method == NodeType.Select)
                {
                    AcceptProjection(node, visitor);
                }
                else if (node.Argument == null)
                {
                    AcceptEmptyMethod(node, visitor);
                }
                else
                {
                    AcceptMethod(node, visitor);
                }
            }

            if (group == NodeGroup.Constant)
            {
                AcceptConstant(node, visitor);
            }
        }
Пример #11
0
        public static void Accept(this QNode node, IQNodeVisitor visitor)
        {
            if (node.Type == NodeType.Binary)
            {
                AcceptBinary(node, visitor);
            }

            if (node.Type == NodeType.Member)
            {
                AcceptMember(node, visitor);
            }

            if (node.Type == NodeType.Querable)
            {
                AcceptQuerable(node, visitor);
            }

            if (node.Type == NodeType.Method)
            {
                var method = EnumResolver.ResolveMethod(node.Value);

                if (method == MethodType.Select)
                {
                    AcceptProjection(node, visitor);
                }
                else if (node.Right == null)
                {
                    AcceptEmptyMethod(node, visitor);
                }
                else
                {
                    AcceptMethod(node, visitor);
                }
            }

            if (node.Type == NodeType.Constant)
            {
                AcceptConstant(node, visitor);
            }
        }
Пример #12
0
        private void Visit(QNode node)
        {
            var nodeType = EnumResolver.ResolveNodeType(node.Type);
            var group    = EnumResolver.ResolveNodeGroup(nodeType);

            if (group == NodeGroup.Method)
            {
                if (nodeType == NodeType.QueryString)
                {
                    this.QueryStringNode       = node;
                    this.QueryStringParentNode = this.CurrentParentNode;
                }
            }
            this.CurrentParentNode = node;
            if (node.Operand != null)
            {
                this.Visit(node.Operand);
            }
            if (node.Argument != null)
            {
                this.Visit(node.Argument);
            }
        }
Пример #13
0
        public void SetBinaryConstantConverter(QNode node)
        {
            var caller     = this.ContextExpression.Peek();
            var binaryType = EnumResolver.ResolveNodeType(node.Type);

            switch (binaryType)
            {
            case NodeType.And:
            case NodeType.Or:
                break;

            case NodeType.Equal:
            case NodeType.GreaterThan:
            case NodeType.GreaterThanOrEqual:
            case NodeType.LessThan:
            case NodeType.LessThanOrEqual:
            case NodeType.NotEqual:
                this.ConstantConverter = new DefaultConverter(caller.Type);
                break;

            default:
                throw new NotImplementedException(binaryType.ToString());
            }
        }
Пример #14
0
        /// <summary>
        ///     The visit method call.
        /// </summary>
        /// <param name="m">
        ///     The memberAccess.
        /// </param>
        /// <returns>
        ///     The <see cref="Expression" />.
        /// </returns>
        protected override Expression VisitMethodCall(MethodCallExpression m)
        {
            QNode    node;
            NodeType method;

            if (NodeType.TryParse(m.Method.Name, out method))
            {
                node = new QNode()
                {
                    Type = method
                };
            }
            else
            {
                throw new Exception(m.Method.Name);
            }

            if (m.Object != null)
            {
                if (m.Arguments.Count > 0 && m.Arguments[0].NodeType == ExpressionType.MemberAccess)
                {
                    if (typeof(IConstantPlaceHolder).IsAssignableFrom(
                            ((MemberExpression)m.Arguments[0]).Expression.Type))
                    {
                        this.Visit(m.Object);
                        node.Operand = this.Context.Pop();
                        this.Visit(m.Arguments[0]);
                        node.Argument = this.Context.Pop();
                    }
                    else if (EnumResolver.ResolveNodeType(node.Type) == NodeType.Contains)
                    {
                        if (this.IsNot.Count > 0 && this.IsNot.Peek() == ExpressionType.Not)
                        {
                            node.Type = NodeType.NotIn;
                            this.IsNot.Pop();
                        }
                        else
                        {
                            node.Type = NodeType.In;
                        }

                        this.Visit(m.Arguments[0]);
                        node.Operand = this.Context.Pop();
                        this.Visit(m.Object);
                        node.Argument = this.Context.Pop();
                    }
                }
                else
                {
                    this.Visit(m.Object);
                    node.Operand = this.Context.Pop();
                    if (m.Arguments.Count > 0)
                    {
                        this.Visit(m.Arguments[0]);
                        node.Argument = this.Context.Pop();
                    }
                }
            }
            else
            {
                this.Visit(m.Arguments[0]);
                node.Operand = this.Context.Pop();
                if (m.Arguments.Count == 2)
                {
                    this.Visit(m.Arguments[1]);
                    node.Argument = this.Context.Pop();
                }
                // QueryString
                else if (m.Arguments.Count == 3)
                {
                    this.Visit(m.Arguments[1]);
                    var queryString = this.Context.Pop();
                    this.Visit(m.Arguments[2]);
                    var fields = this.Context.Pop();
                    queryString.Argument = fields;
                    node.Argument        = queryString;
                }
            }

            this.Context.Push(node);
            return(m);
        }
Пример #15
0
        protected override void Load(ContainerBuilder builder)
        {
            base.Load(builder);

            builder.RegisterModule(new FiberModule <DialogTask>());

            // singleton components

            builder
            .Register(c => new ResourceManager("Microsoft.Bot.Builder.Resource.Resources", typeof(Resource.Resources).Assembly))
            .As <ResourceManager>()
            .SingleInstance();

            // every lifetime scope is driven by a message

            builder
            .Register((c, p) => p.TypedAs <IMessageActivity>())
            .AsSelf()
            .AsImplementedInterfaces()
            .InstancePerMatchingLifetimeScope(LifetimeScopeTag);

            // make the address and cookie available for the lifetime scope

            builder
            .Register(c => Address.FromActivity(c.Resolve <IActivity>()))
            .AsImplementedInterfaces()
            .InstancePerMatchingLifetimeScope(LifetimeScopeTag);

            builder
            .RegisterType <ResumptionCookie>()
            .AsSelf()
            .InstancePerMatchingLifetimeScope(LifetimeScopeTag);

            // components not marked as [Serializable]
            builder
            .RegisterType <MicrosoftAppCredentials>()
            .AsSelf()
            .SingleInstance();

            builder
            // not resolving IEqualityComparer<IAddress> from container because it's a very local policy
            // and yet too broad of an interface.  could explore using tags for registration overrides.
            .Register(c => new LocalMutualExclusion <IAddress>(new ConversationAddressComparer()))
            .As <IScope <IAddress> >()
            .SingleInstance();

            builder
            .Register(c => new ConnectorClientFactory(c.Resolve <IAddress>(), c.Resolve <MicrosoftAppCredentials>()))
            .As <IConnectorClientFactory>()
            .InstancePerLifetimeScope();

            builder
            .Register(c => c.Resolve <IConnectorClientFactory>().MakeConnectorClient())
            .As <IConnectorClient>()
            .InstancePerLifetimeScope();

            builder
            .Register(c => c.Resolve <IConnectorClientFactory>().MakeStateClient())
            .As <IStateClient>()
            .InstancePerLifetimeScope();

            builder
            .Register(c => new DetectChannelCapability(c.Resolve <IAddress>()))
            .As <IDetectChannelCapability>()
            .InstancePerLifetimeScope();

            builder
            .Register(c => c.Resolve <IDetectChannelCapability>().Detect())
            .As <IChannelCapability>()
            .InstancePerLifetimeScope();

            builder.RegisterType <ConnectorStore>()
            .AsSelf()
            .InstancePerLifetimeScope();

            // If bot wants to use InMemoryDataStore instead of
            // ConnectorStore, the below registration should be used
            // as the inner IBotDataStore for CachingBotDataStore

            /*builder.RegisterType<InMemoryDataStore>()
             *  .AsSelf()
             *  .SingleInstance(); */

            builder.Register(c => new CachingBotDataStore(c.Resolve <ConnectorStore>(),
                                                          CachingBotDataStoreConsistencyPolicy.ETagBasedConsistency))
            .As <IBotDataStore <BotData> >()
            .AsSelf()
            .InstancePerLifetimeScope();

            builder
            .RegisterType <JObjectBotData>()
            .AsSelf()
            .InstancePerLifetimeScope();

            builder
            .Register(c => new DialogTaskManagerBotDataLoader(c.Resolve <JObjectBotData>(),
                                                              c.Resolve <IDialogTaskManager>()))
            .As <IBotData>()
            .InstancePerLifetimeScope();

            builder
            .Register((c, p) => new BotDataBagStream(p.TypedAs <IBotDataBag>(), p.TypedAs <string>()))
            .As <Stream>()
            .InstancePerDependency();

            builder
            .Register(c => new DialogTaskManager(DialogModule.BlobKey,
                                                 c.Resolve <JObjectBotData>(),
                                                 c.Resolve <IStackStoreFactory <DialogTask> >(),
                                                 c.Resolve <Func <IDialogStack, CancellationToken, IDialogContext> >()))
            .AsSelf()
            .As <IDialogTaskManager>()
            .InstancePerLifetimeScope();

            builder
            .RegisterType <DialogContext>()
            .As <IDialogContext>()
            .InstancePerDependency();


            builder
            .Register(c =>
            {
                var cc = c.Resolve <IComponentContext>();

                Func <string, IBotDataBag, IStore <IFiberLoop <DialogTask> > > make = (taskId, botDataBag) =>
                {
                    var stream = cc.Resolve <Stream>(TypedParameter.From(botDataBag), TypedParameter.From(taskId));
                    return(cc.Resolve <IStore <IFiberLoop <DialogTask> > >(TypedParameter.From(stream)));
                };

                return(make);
            })
            .As <Func <string, IBotDataBag, IStore <IFiberLoop <DialogTask> > > >()
            .InstancePerDependency();


            builder.Register(c => c.Resolve <IDialogTaskManager>().DialogTasks[0])
            .As <IDialogStack>()
            .As <IDialogTask>()
            .InstancePerLifetimeScope();


            // Scorable implementing "/deleteprofile"
            builder
            .Register(c => new Regex("^(\\s)*/deleteprofile", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace))
            .Keyed <Regex>(Key_DeleteProfile_Regex)
            .SingleInstance();

            builder
            .Register(c => new DeleteProfileScorable(c.Resolve <IDialogStack>(), c.Resolve <IBotData>(), c.Resolve <IBotToUser>(), c.ResolveKeyed <Regex>(Key_DeleteProfile_Regex)))
            .As <IScorable <IActivity, double> >()
            .InstancePerLifetimeScope();

            builder
            .Register(c =>
            {
                var cc = c.Resolve <IComponentContext>();
                Func <IActivity, IResolver> make = activity =>
                {
                    var resolver = NoneResolver.Instance;
                    resolver     = new EnumResolver(resolver);
                    resolver     = new AutofacResolver(cc, resolver);
                    resolver     = new ArrayResolver(resolver,
                                                     activity,
                                                     cc.Resolve <IDialogStack>(),
                                                     cc.Resolve <IBotToUser>(),
                                                     cc.Resolve <IBotData>(),
                                                     cc.Resolve <IDialogTaskManager>());
                    resolver = new ActivityResolver(resolver);
                    return(resolver);
                };
                return(make);
            })
            .AsSelf()
            .InstancePerLifetimeScope();

            builder
            .RegisterType <DialogRouter>()
            .Keyed <IScorable <IActivity, double> >(Key_Dialog_Router)
            .InstancePerLifetimeScope();

            builder
            .Register(c =>
            {
                var cc = c.Resolve <IComponentContext>();
                Func <IPostToBot> makeInner = () =>
                {
                    IPostToBot post = new ReactiveDialogTask(cc.Resolve <IDialogTask>(), cc.Resolve <Func <IDialog <object> > >());
                    post            = new ScoringDialogTask <double>(post, cc.ResolveKeyed <IScorable <IActivity, double> >(Key_Dialog_Router));
                    return(post);
                };

                IPostToBot outer = new PersistentDialogTask(makeInner, cc.Resolve <IBotData>());
                outer            = new SerializingDialogTask(outer, cc.Resolve <IAddress>(), c.Resolve <IScope <IAddress> >());
                outer            = new ExceptionTranslationDialogTask(outer);
                outer            = new LocalizedDialogTask(outer);
                outer            = new PostUnhandledExceptionToUserTask(outer, cc.Resolve <IBotToUser>(), cc.Resolve <ResourceManager>(), cc.Resolve <TraceListener>());
                outer            = new LogPostToBot(outer, cc.Resolve <IActivityLogger>());
                return(outer);
            })
            .As <IPostToBot>()
            .InstancePerLifetimeScope();

            builder
            .RegisterType <NullActivityLogger>()
            .AsImplementedInterfaces()
            .SingleInstance();

            builder
            .RegisterType <AlwaysSendDirect_BotToUser>()
            .AsSelf()
            .InstancePerLifetimeScope();

            builder
            .Register(c => new LogBotToUser(
                          new MapToChannelData_BotToUser(c.Resolve <AlwaysSendDirect_BotToUser>(), new [] { new KeyboardCardMapper() }),
                          c.Resolve <IActivityLogger>()))
            .As <IBotToUser>()
            .InstancePerLifetimeScope();
        }
        public FileResult Export(WorkerFilter filter)
        {
            var response = _workerService.Filter(filter);
            var branches = _branchService.Filter(new BranchFilter()).Branches;

            var csv = new CsvExport();

            if (filter.IsReport)
            {
                csv.ConcatRow(0, "COMPAÑÍA,ID SUCURSAL,SUCURSAL,DEPARTAMENTO,PUESTO,CÓDIGO,NOMBRE,GÉNERO,NSS,FECHA CONSUMO,CONSUMIDO,RECOMENDADO");
                foreach (var worker in response.Workers)
                {
                    var today            = DateTimeExtensions.Today();
                    var startDate        = filter.Month.IsGreaterThanZero() ? new DateTime(today.Year, today.Month, 1).ConvertToString() : "";
                    var endDate          = filter.Month.IsGreaterThanZero() ? new DateTime(today.Year, today.Month, DateTime.DaysInMonth(today.Year, today.Month)).ConvertToString() : "";;
                    var responseCalories = _reservationService.Report(new ReservationReport {
                        WorkerId = worker.Id, StartDate = startDate, EndDate = endDate
                    });
                    var currentCompany = branches.First(branch => branch.Id.IsEqualTo(worker.BranchId)).Company.Name;
                    //var responseCalories = new ReservationReportResponse
                    //{
                    //    Calories = new List<ReservationCalorieReportResponse>
                    //{
                    //    new ReservationCalorieReportResponse{Date = DateTimeExtensions.Today().AddDays(-7).ConvertToString(),Dinner = 200, Lunch = 1000, BreakFast = 150},
                    //    new ReservationCalorieReportResponse{Date = DateTimeExtensions.Today().AddDays(-6).ConvertToString(),Dinner = 164, Lunch = 1000, BreakFast = 150},
                    //    new ReservationCalorieReportResponse{Date = DateTimeExtensions.Today().AddDays(-5).ConvertToString(),Dinner = 195, Lunch = 1000, BreakFast = 150},
                    //    new ReservationCalorieReportResponse{Date = DateTimeExtensions.Today().AddDays(-4).ConvertToString(),Dinner = 109, Lunch = 1000, BreakFast = 203},
                    //    new ReservationCalorieReportResponse{Date = DateTimeExtensions.Today().AddDays(-3).ConvertToString(),Dinner = 287, Lunch = 1000, BreakFast = 343},
                    //    new ReservationCalorieReportResponse{Date = DateTimeExtensions.Today().AddDays(-2).ConvertToString(),Dinner = 207, Lunch = 1000, BreakFast = 150},
                    //    new ReservationCalorieReportResponse{Date = DateTimeExtensions.Today().AddDays(-1).ConvertToString(),Dinner = 218, Lunch = 1000, BreakFast = 145}
                    //}
                    //};
                    foreach (var calorie in responseCalories.Calories)
                    {
                        var sumCalories = calorie.BreakFast + calorie.Dinner + calorie.Lunch;
                        var row         = string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11}", currentCompany, worker.BranchId, worker.Branch.Name, worker.Department.Name, worker.Job.Name, worker.Code, worker.FullName, EnumResolver.Gender(worker.Gender.GetValue()), worker.Imss, calorie.Date, sumCalories.RoundDecimal(), worker.LimitEnergy);
                        csv.ConcatRow(0, row);
                    }
                }
            }
            else
            {
                csv.ConcatRow(0, "CÓDIGO,NOMBRE,APELLIDO,EMAIL,IMSS,GÉNERO,GAFFETE,INGESTA CALÓRICA,SUCURSAL,DEPARTAMENTO,PUESTO,ROL,ESTADO");
                csv.ConcatRows(0, "Code,FirstName,LastName,Email,Imss,GenderLabel,Badge,LimitEnergy,Branch,Department,Job,Role,Status", response.Workers);
            }

            var stream = csv.RetrieveFile();

            return(new StreamFactory().Csv(stream, "Ingesta calórica por colaborador"));
        }
Пример #17
0
        public void SetMethodConstantConverter(QNode node)
        {
            var caller     = this.ContextExpression.Peek();
            var methodType = EnumResolver.ResolveNodeType(node.Type);

            switch (methodType)
            {
            case NodeType.Contains:
                var containsMethod = caller.Type.GetMethod("Contains", new[] { typeof(string) });
                if (containsMethod == null)
                {
                    var toStringMethod = typeof(object).GetMethod("ToString", new Type[] {});
                    var exp1           = Expression.Call(caller, toStringMethod, null);
                    this.ContextExpression.Pop();
                    this.ContextExpression.Push(exp1);

                    if (this.Provider == ProviderEnum.EnumerableQueryProvider)
                    {
                        var exp2 = Expression.Call(exp1, Methods.ToLower, null);
                        this.ContextExpression.Pop();
                        this.ContextExpression.Push(exp2);
                        this.ConstantConverter = new ToLowerConverter(exp1.Type);
                    }
                    else
                    {
                        this.ConstantConverter = new DefaultConverter(exp1.Type);
                    }
                }
                else
                {
                    if (this.Provider == ProviderEnum.EnumerableQueryProvider)
                    {
                        var exp1 = Expression.Call(caller, Methods.ToLower, null);
                        this.ContextExpression.Pop();
                        this.ContextExpression.Push(exp1);
                        this.ConstantConverter = new ToLowerConverter(caller.Type);
                    }
                    else
                    {
                        this.ConstantConverter = new DefaultConverter(caller.Type);
                    }
                }
                break;

            case NodeType.StartsWith:
                var startsWithMethod = caller.Type.GetMethod("StartsWith", new[] { typeof(string) });
                if (startsWithMethod == null)
                {
                    var toStringMethod = typeof(object).GetMethod("ToString", new Type[] { });
                    var exp1           = Expression.Call(caller, toStringMethod, null);
                    this.ContextExpression.Pop();
                    this.ContextExpression.Push(exp1);
                    this.ConstantConverter = new DefaultConverter(exp1.Type);
                }
                else
                {
                    this.ConstantConverter = new DefaultConverter(caller.Type);
                }
                break;

            case NodeType.EndsWith:
                var endsWithMethod = caller.Type.GetMethod("EndsWith", new[] { typeof(string) });
                if (endsWithMethod == null)
                {
                    var toStringMethod = typeof(object).GetMethod("ToString", new Type[] { });
                    var exp1           = Expression.Call(caller, toStringMethod, null);
                    this.ContextExpression.Pop();
                    this.ContextExpression.Push(exp1);
                    this.ConstantConverter = new DefaultConverter(exp1.Type);
                }
                else
                {
                    this.ConstantConverter = new DefaultConverter(caller.Type);
                }

                break;

            case NodeType.In:
            case NodeType.NotIn:
                this.ConstantConverter = new ArrayConverter(caller.Type);
                break;

            case NodeType.Take:
            case NodeType.Skip:
                this.ConstantConverter = new IntegerConverter(caller.Type);
                break;

            default:
                throw new NotImplementedException(methodType.ToString());
            }
        }
Пример #18
0
        public void VisitMethod(QNode node)
        {
            Expression resultExpression;
            var        right = this.ContextExpression.Pop();
            var        left  = this.ContextExpression.Pop();

            var method = EnumResolver.ResolveNodeType(node.Type);

            switch (method)
            {
            case NodeType.Contains:
                if (left.Type != typeof(string))
                {
                    left = Expression.Call(left, "ToString", null);
                }

                resultExpression = Expression.Call(left, Methods.Contains, (ConstantExpression)right);
                break;

            case NodeType.StartsWith:
                if (left.Type != typeof(string))
                {
                    left = Expression.Call(left, "ToString", null);
                }

                resultExpression = Expression.Call(left, Methods.StartsWith, (ConstantExpression)right);
                break;

            case NodeType.EndsWith:
                if (left.Type != typeof(string))
                {
                    left = Expression.Call(left, "ToString", null);
                }

                resultExpression = Expression.Call(left, Methods.EndsWith, (ConstantExpression)right);
                break;

            case NodeType.In:
                var containsMethod = right.Type.GetTypeInfo().GetMethod("Contains");
                resultExpression = Expression.Call(right, containsMethod, left);
                break;

            case NodeType.NotIn:
                var containsMethod1 = right.Type.GetTypeInfo().GetMethod("Contains");
                var call            = Expression.Call(right, containsMethod1, left);
                resultExpression = Expression.Not(call);
                break;

            case NodeType.Take:
                var types = new List <Type>
                {
                    left.Type.GetTypeInfo().IsGenericType
                            ? left.Type.GenericTypeArguments[0]
                            : left.Type
                };
                resultExpression = Expression.Call(typeof(Queryable), "Take", types.ToArray(), left, right);
                break;

            case NodeType.Skip:
                var types1 = new List <Type>
                {
                    left.Type.GetTypeInfo().IsGenericType
                            ? left.Type.GenericTypeArguments[0]
                            : left.Type
                };
                resultExpression = Expression.Call(typeof(Queryable), "Skip", types1.ToArray(), left, right);
                break;

            default:
                throw new NotImplementedException(method.ToString());
            }


            this.ContextExpression.Push(resultExpression);
        }
Пример #19
0
        public void VisitBinary(QNode node)
        {
            var binary = EnumResolver.ResolveNodeType(node.Type);

            switch (binary)
            {
            case NodeType.And:
            {
                var left  = this.ContextQuery.Pop();
                var right = this.ContextQuery.Pop();
                this.ContextQuery.Push(left && right);
            }
            break;

            case NodeType.Or:
            {
                var left  = this.ContextQuery.Pop();
                var right = this.ContextQuery.Pop();
                this.ContextQuery.Push(left || right);
            }
            break;

            case NodeType.Equal:
            {
                var field = this.ContextField.Pop();
                var value = this.ContextValue.Pop();
                var query = new MatchQuery {
                    Field = field, Query = value.ToString()
                };
                this.ContextQuery.Push(query);
            }
            break;

            case NodeType.NotEqual:
            {
                var field = this.ContextField.Pop();
                var value = this.ContextValue.Pop();
                var query = new MatchQuery {
                    Field = field, Query = value.ToString()
                };
                this.ContextQuery.Push(!query);
            }
            break;

            case NodeType.GreaterThan:
            {
                var field = this.ContextField.Pop();
                var value = this.ContextValue.Pop();
                var query = new TermRangeQuery {
                    Field = field, GreaterThan = value.ToString()
                };
                this.ContextQuery.Push(query);
            }
            break;

            case NodeType.GreaterThanOrEqual:
            {
                var field = this.ContextField.Pop();
                var value = this.ContextValue.Pop();
                var query = new TermRangeQuery {
                    Field = field, GreaterThanOrEqualTo = value.ToString()
                };
                this.ContextQuery.Push(query);
            }
            break;

            case NodeType.LessThan:
            {
                var field = this.ContextField.Pop();
                var value = this.ContextValue.Pop();
                var query = new TermRangeQuery {
                    Field = field, LessThan = value.ToString()
                };
                this.ContextQuery.Push(query);
            }
            break;

            case NodeType.LessThanOrEqual:
            {
                var field = this.ContextField.Pop();
                var value = this.ContextValue.Pop();
                var query = new TermRangeQuery {
                    Field = field, LessThanOrEqualTo = value.ToString()
                };
                this.ContextQuery.Push(query);
            }
            break;

            default:
                throw new NotImplementedException(binary.ToString());
            }
        }
Пример #20
0
        public static void Accept(this QNode node, QNodeConverter visitor)
        {
            var group = EnumResolver.ResolveNodeGroup(node.Type);

            if (group == NodeGroup.Binary)
            {
                AcceptBinary(node, visitor);
            }

            if (group == NodeGroup.Member)
            {
                AcceptMember(node, visitor);
            }

            if (group == NodeGroup.Querable)
            {
                AcceptQuerable(node, visitor);
            }

            if (group == NodeGroup.Method)
            {
                var method = EnumResolver.ResolveNodeType(node.Type);
                switch (method)
                {
                case NodeType.Select:
                    AcceptProjection(node, visitor);
                    break;

                case NodeType.Where:
                case NodeType.Any:
                case NodeType.OrderBy:
                case NodeType.OrderByDescending:
                    AcceptLambdaArgumentMethod(node, visitor);
                    break;

                case NodeType.Contains:
                case NodeType.In:
                case NodeType.NotIn:
                case NodeType.StartsWith:
                case NodeType.EndsWith:
                case NodeType.Take:
                case NodeType.Skip:
                    AcceptValueArgumentMethod(node, visitor);
                    break;

                case NodeType.ToString:
                case NodeType.ToLower:
                    AcceptEmptyMethod(node, visitor);
                    break;

                case NodeType.Count:
                    if (node.Argument == null)
                    {
                        AcceptEmptyMethod(node, visitor);
                    }
                    else
                    {
                        AcceptLambdaArgumentMethod(node, visitor);
                    }
                    break;

                default:
                    throw new NotImplementedException(method.ToString());
                }
            }

            if (group == NodeGroup.Constant)
            {
                AcceptConstant(node, visitor);
            }
        }
        protected override void Load(ContainerBuilder builder)
        {
            base.Load(builder);

            builder.RegisterModule(new FiberModule <DialogTask>());

            // singleton components

            builder
            .Register(c => new ResourceManager("Microsoft.Bot.Builder.Resource.Resources", typeof(Resource.Resources).Assembly))
            .As <ResourceManager>()
            .SingleInstance();

            // every lifetime scope is driven by a message

            builder
            .Register((c, p) => p.TypedAs <IMessageActivity>())
            .AsSelf()
            .AsImplementedInterfaces()
            .InstancePerMatchingLifetimeScope(LifetimeScopeTag);

            // make the address and cookie available for the lifetime scope

            builder
            .Register(c => Address.FromActivity(c.Resolve <IActivity>()))
            .AsImplementedInterfaces()
            .InstancePerMatchingLifetimeScope(LifetimeScopeTag);

#pragma warning disable CS0618
            builder
            .RegisterType <ResumptionCookie>()
            .AsSelf()
            .InstancePerMatchingLifetimeScope(LifetimeScopeTag);
#pragma warning restore CS0618

            builder
            .Register(c => c.Resolve <IActivity>().ToConversationReference())
            .AsSelf()
            .InstancePerMatchingLifetimeScope(LifetimeScopeTag);

            // components not marked as [Serializable]
            builder
            .RegisterType <MicrosoftAppCredentials>()
            .AsSelf()
            .SingleInstance();

            builder
            // not resolving IEqualityComparer<IAddress> from container because it's a very local policy
            // and yet too broad of an interface.  could explore using tags for registration overrides.
            .Register(c => new LocalMutualExclusion <IAddress>(new ConversationAddressComparer()))
            .As <IScope <IAddress> >()
            .SingleInstance();

            builder
            .Register(c => new ConnectorClientFactory(c.Resolve <IAddress>(), c.Resolve <MicrosoftAppCredentials>()))
            .As <IConnectorClientFactory>()
            .ExternallyOwned();

            builder
            .Register(c => c.Resolve <IConnectorClientFactory>().MakeConnectorClient())
            .As <IConnectorClient>()
            .ExternallyOwned();

            builder
            .Register(c => c.Resolve <IConnectorClientFactory>().MakeStateClient())
            .As <IStateClient>()
            .ExternallyOwned();

            builder
            .RegisterType <ChannelCapability>()
            .AsImplementedInterfaces()
            .InstancePerLifetimeScope();

            builder
            .RegisterKeyedType <ConnectorStore, IBotDataStore <BotData> >()
            .InstancePerLifetimeScope();

            builder
            .RegisterKeyedType <InMemoryDataStore, IBotDataStore <BotData> >()
            .SingleInstance();

            builder
            .RegisterKeyedType <CachingBotDataStore, IBotDataStore <BotData> >()
            .WithParameter((pi, c) => pi.ParameterType == typeof(CachingBotDataStoreConsistencyPolicy),
                           (pi, c) => CachingBotDataStoreConsistencyPolicy.ETagBasedConsistency)
            .InstancePerLifetimeScope();

            builder
            .RegisterAdapterChain <IBotDataStore <BotData> >
            (
                typeof(ConnectorStore),
                typeof(CachingBotDataStore)
            )
            .InstancePerLifetimeScope();

            builder
            .RegisterKeyedType <JObjectBotData, IBotData>()
            .AsSelf()
            .InstancePerLifetimeScope();

            builder
            .RegisterKeyedType <DialogTaskManagerBotDataLoader, IBotData>()
            .InstancePerLifetimeScope();

            builder
            .RegisterAdapterChain <IBotData>
            (
                typeof(JObjectBotData),
                typeof(DialogTaskManagerBotDataLoader)
            )
            .InstancePerLifetimeScope();

            builder
            .Register((c, p) => new BotDataBagStream(p.TypedAs <IBotDataBag>(), p.TypedAs <string>()))
            .As <Stream>()
            .InstancePerDependency();

            builder
            .Register(c => new DialogTaskManager(DialogModule.BlobKey,
                                                 c.Resolve <JObjectBotData>(),
                                                 c.Resolve <IStackStoreFactory <DialogTask> >(),
                                                 c.Resolve <Func <IDialogStack, CancellationToken, IDialogContext> >(),
                                                 c.Resolve <IEventProducer <IActivity> >()))
            .AsSelf()
            .As <IDialogTaskManager>()
            .As <IDialogTasks>()
            .InstancePerLifetimeScope();

            builder
            .RegisterType <DialogSystem>()
            .As <IDialogSystem>();

            builder
            .RegisterType <DialogContext>()
            .As <IDialogContext>()
            .InstancePerDependency();

            builder
            .Register(c =>
            {
                var cc = c.Resolve <IComponentContext>();

                Func <string, IBotDataBag, IStore <IFiberLoop <DialogTask> > > make = (taskId, botDataBag) =>
                {
                    var stream = cc.Resolve <Stream>(TypedParameter.From(botDataBag), TypedParameter.From(taskId));
                    return(cc.Resolve <IStore <IFiberLoop <DialogTask> > >(TypedParameter.From(stream)));
                };

                return(make);
            })
            .As <Func <string, IBotDataBag, IStore <IFiberLoop <DialogTask> > > >()
            .InstancePerDependency();


            builder.Register(c => c.Resolve <IDialogTaskManager>().DialogTasks[0])
            .As <IDialogStack>()
            .As <IDialogTask>()
            .InstancePerLifetimeScope();

            // Scorable implementing "/deleteprofile"
            builder
            .Register(c => new Regex("^(\\s)*/deleteprofile", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace))
            .Keyed <Regex>(Key_DeleteProfile_Regex)
            .SingleInstance();

            builder
            .Register(c => new DeleteProfileScorable(c.Resolve <IDialogStack>(), c.Resolve <IBotData>(), c.Resolve <IBotToUser>(), c.ResolveKeyed <Regex>(Key_DeleteProfile_Regex)))
            .As <IScorable <IActivity, double> >()
            .InstancePerLifetimeScope();

            // scorable implementing "end conversation"
            builder
            .RegisterInstance(EndConversationEvent.MakeScorable())
            .As <IScorable <IResolver, double> >()
            .SingleInstance();

            builder
            .Register(c =>
            {
                var cc = c.Resolve <IComponentContext>();
                Func <IActivity, IResolver> make = activity =>
                {
                    var resolver = NoneResolver.Instance;
                    resolver     = new EnumResolver(resolver);
                    resolver     = new AutofacResolver(cc, resolver);
                    resolver     = new ArrayResolver(resolver,
                                                     activity,
                                                     cc.Resolve <IBotToUser>(),
                                                     cc.Resolve <IBotData>(),
                                                     cc.Resolve <IDialogSystem>());
                    resolver = new ActivityResolver(resolver);
                    resolver = new EventActivityValueResolver(resolver);
                    resolver = new InvokeActivityValueResolver(resolver);
                    return(resolver);
                };
                return(make);
            })
            .AsSelf()
            .InstancePerLifetimeScope();

            builder
            .RegisterType <DialogRouter>()
            .Keyed <IScorable <IActivity, double> >(Key_Dialog_Router)
            .InstancePerLifetimeScope();

            builder
            .RegisterType <EventQueue <IActivity> >()
            .AsImplementedInterfaces()
            .InstancePerLifetimeScope();

            builder
            .RegisterType <ReactiveDialogTask>()
            .AsSelf()
            .InstancePerLifetimeScope();

            builder
            .Register(c => new ScoringEventLoop <double>(c.Resolve <ReactiveDialogTask>(), c.Resolve <ReactiveDialogTask>(), c.Resolve <IEventConsumer <IActivity> >(), c.ResolveKeyed <IScorable <IActivity, double> >(Key_Dialog_Router)))
            .As <IEventLoop>()
            .InstancePerLifetimeScope();

            // register IDataBag that is used for to load/save ResumptionData
            builder
            .Register(c =>
            {
                var cc = c.Resolve <IComponentContext>();
                Func <IBotDataBag> make = () =>
                {
                    return(cc.Resolve <IBotData>().PrivateConversationData);
                };
                return(make);
            })
            .As <Func <IBotDataBag> >()
            .InstancePerLifetimeScope();

            builder
            .RegisterType <ResumptionContext>()
            .AsSelf()
            .InstancePerLifetimeScope();

            builder
            .RegisterType <LocaleFinder>()
            .AsSelf()
            .AsImplementedInterfaces()
            .InstancePerLifetimeScope();

            // IPostToBot services

            builder
            .RegisterKeyedType <NullPostToBot, IPostToBot>()
            .SingleInstance();

            builder
            .RegisterKeyedType <PassPostToBot, IPostToBot>()
            .InstancePerDependency();

            builder
            .RegisterKeyedType <EventLoopDialogTask, IPostToBot>()
            .InstancePerLifetimeScope();

            builder
            .RegisterKeyedType <PersistentDialogTask, IPostToBot>()
            .InstancePerLifetimeScope();

            builder
            .RegisterKeyedType <ExceptionTranslationDialogTask, IPostToBot>()
            .InstancePerLifetimeScope();

            builder
            .RegisterKeyedType <SerializeByConversation, IPostToBot>()
            .InstancePerLifetimeScope();

            builder
            .RegisterKeyedType <SetAmbientThreadCulture, IPostToBot>()
            .InstancePerLifetimeScope();

            builder
            .RegisterKeyedType <PostUnhandledExceptionToUser, IPostToBot>()
            .InstancePerLifetimeScope();

            builder
            .RegisterKeyedType <LogPostToBot, IPostToBot>()
            .InstancePerLifetimeScope();

            builder
            .RegisterKeyedType <QueueDrainingDialogTask, IPostToBot>()
            .InstancePerLifetimeScope();

            builder
            .RegisterAdapterChain <IPostToBot>
            (
                typeof(EventLoopDialogTask),
                typeof(SetAmbientThreadCulture),
                typeof(QueueDrainingDialogTask),
                typeof(PersistentDialogTask),
                typeof(ExceptionTranslationDialogTask),
                typeof(SerializeByConversation),
                typeof(PostUnhandledExceptionToUser),
                typeof(LogPostToBot)
            )
            .InstancePerLifetimeScope();

            // other

            builder
            .RegisterType <NullActivityLogger>()
            .AsImplementedInterfaces()
            .SingleInstance();

            builder
            .RegisterType <KeyboardCardMapper>()
            .AsImplementedInterfaces()
            .SingleInstance();

            builder
            .RegisterType <SetLocalTimestampMapper>()
            .AsImplementedInterfaces()
            .SingleInstance();

            // IBotToUser services
            builder
            .RegisterType <InputHintQueue>()
            .AsImplementedInterfaces()
            .InstancePerLifetimeScope();

            builder
            .RegisterKeyedType <NullBotToUser, IBotToUser>()
            .SingleInstance();

            builder
            .RegisterKeyedType <PassBotToUser, IBotToUser>()
            .InstancePerDependency();

            builder
            .RegisterKeyedType <AlwaysSendDirect_BotToUser, IBotToUser>()
            .AsSelf()
            .InstancePerLifetimeScope();

            builder
            .RegisterKeyedType <AutoInputHint_BotToUser, IBotToUser>()
            .InstancePerLifetimeScope();

            builder
            .RegisterKeyedType <MapToChannelData_BotToUser, IBotToUser>()
            .InstancePerLifetimeScope();

            builder
            .RegisterKeyedType <LogBotToUser, IBotToUser>()
            .InstancePerLifetimeScope();

#pragma warning disable CS1587
            /// <see cref="LogBotToUser"/> is composed around <see cref="MapToChannelData_BotToUser"/> is composed around
            /// <see cref="AlwaysSendDirect_BotToUser"/>.  The complexity of registering each component is pushed to a separate
            /// registration method, and each of these components are replaceable without re-registering
            /// the entire adapter chain by registering a new component with the same component key.
#pragma warning restore CS1587
            builder
            .RegisterAdapterChain <IBotToUser>
            (
                typeof(AlwaysSendDirect_BotToUser),
                typeof(AutoInputHint_BotToUser),
                typeof(MapToChannelData_BotToUser),
                typeof(LogBotToUser)
            )
            .InstancePerLifetimeScope();
        }
Пример #22
0
        private static string ExtractValue <T>(string property, T objectRetrieved)
        {
            property = property.Trim();
            var valueRetrieved = objectRetrieved.ExtractProperty(property);
            var valueString    = String.Empty;

            if (valueRetrieved.IsNotNull())
            {
                switch (property)
                {
                case "Region":
                case "Company":
                case "Branch":
                case "Disease":
                case "IngredientGroup":
                case "Dealer":
                case "Department":
                case "Job":
                case "Saucer":
                case "Role":
                    valueString = valueRetrieved.ExtractName();
                    break;

                case "Protein":
                case "Carbohydrate":
                case "Sugar":
                case "Lipid":
                case "Sodium":
                case "NetWeight":
                    valueString = String.Format("{0}{1}", valueRetrieved, DisplayConstants.Gram);
                    break;

                case "Badge":
                case "Code":
                case "Imss":
                    valueString = String.Format(" [{0}] ", valueRetrieved);
                    break;

                case "Saucers":
                case "Dealers":
                    valueString = valueRetrieved.ExtractNames();
                    break;

                case "Energy":
                case "LimitEnergy":
                    valueString = String.Format("{0} {1}", valueRetrieved, DisplayConstants.KiloCalorie);
                    break;

                case "Status":
                    valueString = EnumResolver.Status(Convert.ToBoolean(valueRetrieved));
                    break;

                case "Gender":
                    valueString = EnumResolver.Gender(GenderType.Male.GetValue());
                    break;

                case "SaucerConfigurations":
                    valueString = valueRetrieved.ExtractTotalAmounts();
                    break;

                case "SaucerMultimedias":
                    valueString = valueRetrieved.ExtractPaths();
                    break;

                default:
                    valueString = valueRetrieved.ToString();
                    break;
                }
            }

            return(valueString.Replace(",", " "));
        }
Пример #23
0
 private BindingHelper()
 {
     RegisterDefaultConverters();
     Enums           = new EnumResolver(() => OnPropertyChanged(nameof(Enums)));
     DynamicBindings = new DPResolver(() => OnPropertyChanged(nameof(DynamicBindings)));
 }
Пример #24
0
        public void VisitMethod(QNode node)
        {
            var method = EnumResolver.ResolveNodeType(node.Type);

            switch (method)
            {
            case NodeType.OrderBy:
            case NodeType.OrderByDescending:
                var member = this.ContextField.Pop();
                var query  = this.ContextQuery.Pop();
                this.SortingRequest.Add(new KeyValuePair <Field, NodeType>(member, method));
                break;

            case NodeType.Where:
                break;

            case NodeType.Contains:
            {
                var value = string.Format("*{0}*", this.ContextValue.Pop());
                var term  = new QueryStringQuery {
                    DefaultField = this.ContextField.Pop(), Query = value
                };
                this.ContextQuery.Push(term);
            }
            break;

            case NodeType.StartsWith:
            {
                var term = new PrefixQuery {
                    Field = this.ContextField.Pop(), Value = this.ContextValue.Pop()
                };
                this.ContextQuery.Push(term);
            }
            break;

            case NodeType.EndsWith:
            {
                var value = string.Format("*{0}", this.ContextValue.Pop());
                var term  = new WildcardQuery {
                    Field = this.ContextField.Pop(), Value = value
                };
                this.ContextQuery.Push(term);
            }
            break;

            case NodeType.In:
            {
                var value = this.ContextValue.Pop() as List <string>;
                var terms = new TermsQuery {
                    Field = this.ContextField.Pop(), Terms = value
                };
                this.ContextQuery.Push(terms);
            }
            break;

            case NodeType.NotIn:
            {
                var value = this.ContextValue.Pop() as List <string>;
                var terms = !new TermsQuery {
                    Field = this.ContextField.Pop(), Terms = value
                };
                this.ContextQuery.Push(terms);
            }
            break;

            default:
                throw new NotImplementedException(method.ToString());
            }
        }