Exemplo n.º 1
0
        public void Visit(DownloadPageExpression expression)
        {
            var type = new CodeTypeReference("RuntimeTable", new CodeTypeReference("DownloadPage"));

            GenerateDownloadDeffered(expression, type, expression.Line.Line);

            _codeStack.Peek().Scope = new ScopeData <TableDescriptor> {
                Type = DownloadPage.Columns, CodeDomReference = type
            };
        }
Exemplo n.º 2
0
        private void GenerateDownloadDeffered(DownloadPageExpression expression, CodeTypeReference returnType, int line)
        {
            var statementDomArg = VisitChild(expression.Statement);

            if (statementDomArg.Scope.CodeDomReference.BaseType == typeof(Table <>).Name)
            {
                if (statementDomArg.Tag != null)
                {
                    ((Action)statementDomArg.Tag)(); //remove call to OnSelect
                }
            }
            else if (statementDomArg.Scope.CodeDomReference.BaseType != typeof(string).FullName)
            {
                Errors.Add(new DownloadRequireString(new Semantic.LineInfo(expression.Statement.Line.Line, expression.Statement.Line.CharacterPosition)));
            }

            CodeMemberMethod method = new CodeMemberMethod();

            method.Name       = "Download_" + statementDomArg.MethodIdentifier;
            method.ReturnType = returnType;

            _mainType.Type.Members.Add(method);
            GenerateCallStatement(method.Statements, line);

            int threadCount = 1;

            if (expression.ThreadHint != null)
            {
                threadCount = expression.ThreadHint.ThreadCount;
            }

            //if in select context pick the lazy download type
            var downloadType = Scope.Current.IsSelect ? "SelectDownloadTable" : "VariableDownloadTable";

            method.Statements.Add(new CodeMethodReturnStatement(new CodeObjectCreateExpression(new CodeTypeReference(downloadType),
                                                                                               new CodeThisReferenceExpression(),
                                                                                               new CodePrimitiveExpression(line),
                                                                                               new CodePrimitiveExpression(threadCount),
                                                                                               statementDomArg.CodeExpression)));

            var methodcall = new CodeMethodInvokeExpression(
                new CodeMethodReferenceExpression(null, method.Name));

            _codeStack.Peek().CodeExpression = methodcall;
        }
Exemplo n.º 3
0
 public void Visit(DownloadPageExpression expression, CommonTree tree)
 {
     SetLine(expression, tree);
     Parent(tree).Children.Add(expression);
     VisitChildren(tree);
 }
Exemplo n.º 4
0
        private void GenerateDownloadDeffered(DownloadPageExpression expression, ref CodeTypeReference returnType, int line)
        {
            var statementDomArg = VisitChild(expression.Statement);
            //if in select context pick the lazy download type~
            var downloadType = Scope.Current.IsSelect ? "SelectDownloadTable" : "VariableDownloadTable";

            if (statementDomArg.Scope.CodeDomReference.BaseType == typeof(Table <>).Name)
            {
                if (statementDomArg.Tag != null)
                {
                    ((Action)statementDomArg.Tag)(); //remove call to OnSelect
                }
            }
            else if (statementDomArg.Scope.CodeDomReference.BaseType != typeof(string).FullName)
            {
                Errors.Add(new DownloadRequireString(new Semantic.LineInfo(expression.Statement.Line.Line, expression.Statement.Line.CharacterPosition)));
            }

            CodeMemberMethod method = new CodeMemberMethod();

            method.Name       = "Download_" + statementDomArg.MethodIdentifier;
            method.ReturnType = returnType;

            _mainType.Type.Members.Add(method);
            GenerateCallStatement(method.Statements, line);

            CodeExpression argsExpression = null;

            int threadCount = 1;

            argsExpression = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression(typeof(LazyDownloadArgs)), "CreateWebRequestArgs",
                                                            new CodeThisReferenceExpression(),
                                                            new CodePrimitiveExpression(line),
                                                            new CodePrimitiveExpression(threadCount),
                                                            statementDomArg.CodeExpression);

            if (expression.ThreadHint != null)
            {
                threadCount = expression.ThreadHint.ThreadCount;

                argsExpression = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression(typeof(LazyDownloadArgs)), "CreateWebRequestArgs",
                                                                new CodeThisReferenceExpression(),
                                                                new CodePrimitiveExpression(line),
                                                                new CodePrimitiveExpression(threadCount),
                                                                statementDomArg.CodeExpression);
            }
            string cssWaitElement = null;
            int    cssTimeout     = 5;

            if (expression.JSTableHint != null)
            {
                cssWaitElement = expression.JSTableHint.CssWaitElement;
                cssTimeout     = expression.JSTableHint.CssTimeoutSeconds;

                argsExpression = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression(typeof(LazyDownloadArgs)), "CreateSeleniumArgs",
                                                                new CodeThisReferenceExpression(),
                                                                new CodePrimitiveExpression(line),
                                                                new CodePrimitiveExpression(threadCount),
                                                                new CodePrimitiveExpression(cssWaitElement),
                                                                new CodePrimitiveExpression(cssTimeout),
                                                                statementDomArg.CodeExpression);
            }

            if (expression.JavascriptCode != null)
            {
                argsExpression = new CodeMethodInvokeExpression(new CodeTypeReferenceExpression(typeof(LazyDownloadArgs)), "CreateJavaScriptArgs",
                                                                new CodeThisReferenceExpression(),
                                                                new CodePrimitiveExpression(line),
                                                                new CodePrimitiveExpression(threadCount),
                                                                new CodePrimitiveExpression(cssWaitElement),
                                                                new CodePrimitiveExpression(cssTimeout),
                                                                statementDomArg.CodeExpression,
                                                                new CodePrimitiveExpression(expression.JavascriptCode.Code));

                downloadType      = "DynamicObjectDownloadTable";
                returnType        = new CodeTypeReference("RuntimeTable", new CodeTypeReference("DynamicObject"));
                method.ReturnType = returnType;
            }

            method.Statements.Add(new CodeMethodReturnStatement(new CodeObjectCreateExpression(new CodeTypeReference(downloadType),
                                                                                               argsExpression)));

            var methodcall = new CodeMethodInvokeExpression(
                new CodeMethodReferenceExpression(null, method.Name));

            _codeStack.Peek().CodeExpression = methodcall;
        }