/// <summary>
 /// script_full :
 ///     (INCLUDE CHAR_STRING) *
 ///     NAME key (VERSION versionNumber=number)?
 ///     (CONCURENCY concurencyNumber=number)?
 ///     (DESCRIPTION comment)?
 ///     (MATCHING matchings)?
 ///     (define_referenciel_statement SEMICOLON)+
 ///     initializing?
 ///     (define_state_statement SEMICOLON) *
 ///     ;
 /// </summary>
 /// <param name="context"></param>
 /// <returns></returns>
 public override object VisitScript_full([NotNull] WorkflowParser.Script_fullContext context)
 {
     return(base.VisitScript_full(context));
 }
 /// <summary>
 /// Visit a parse tree produced by <see cref="WorkflowParser.script_full"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitScript_full([NotNull] WorkflowParser.Script_fullContext context)
 {
     return(VisitChildren(context));
 }
Exemple #3
0
        /// <summary>
        /// script_full :
        ///     (INCLUDE CHAR_STRING) *
        ///     NAME key (VERSION versionNumber=number)?
        ///     (CONCURENCY concurencyNumber=number)?
        ///     (DESCRIPTION comment)?
        ///     (MATCHING matchings)?
        ///     (define_referenciel_statement SEMICOLON)+
        ///     initializing?
        ///     (define_state_statement SEMICOLON) *
        ///     ;
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override object VisitScript_full([NotNull] WorkflowParser.Script_fullContext context)
        {
            this._workflow.Name = (string)VisitKey(context.key());

            if (context.VERSION() != null)
            {
                this._workflow.Version = (int)VisitNumber(context.versionNumber);
            }
            else
            {
                this._workflow.Version = 1;
            }

            var concurency = context.concurency();

            if (concurency != null)
            {
                this._workflow.Concurrency = (int)VisitConcurency(concurency);
            }
            else
            {
                this._workflow.Concurrency = 1;
            }

            if (context.DESCRIPTION() != null)
            {
                this._workflow.Label = (string)VisitComment(context.comment());
            }

            if (context.MATCHING() != null)
            {
                var filters = (List <(string, string)>)VisitMatchings(context.matchings());
                foreach (var matching in filters)
                {
                    this._workflow.AddFilter(matching.Item1, matching.Item2);
                }
            }

            var define_referenciel_statements = context.define_referenciel_statement();

            foreach (var define_referenciel_statement in define_referenciel_statements)
            {
                var declaration = VisitDefine_referenciel_statement(define_referenciel_statement);
                switch (declaration)
                {
                case ConstantExpressionModel c:
                    this._constants.Add(c.Key, c);
                    break;

                case DeclaredEventConfig e:
                    this._workflow.DeclaredEvents.Add(e.Name, e);
                    break;

                case MethodReference r:             // Do nothing
                    break;

                default:
                    throw new NotImplementedException(declaration.GetType().Name);
                }
            }

            // Add states definitions
            var define_state_statements = context.define_state_statement();

            if (define_state_statements != null)
            {
                foreach (var define_state_statement in define_state_statements)
                {
                    var declaration = VisitDefine_state_statement(define_state_statement);
                    if (declaration is StateConfig s)
                    {
                        this._workflow.AddState(s);
                    }

                    else
                    {
                        Stop();
                        throw new NotImplementedException(declaration.GetType().Name);
                    }
                }
            }

            // Add initializers
            var initializing = context.initializing();

            if (initializing != null)
            {
                var inits = (List <InitializationOnEventConfig>)VisitInitializing(initializing);
                foreach (var init in inits)
                {
                    this._workflow.AddInitializer(init);
                }
            }


            // workflow.Errors.AddRange(this._errors);

            return(null);
        }