Esempio n. 1
0
        /// <summary>
        ///     Convert Abstract Syntax Tree to Virtual Machine object with associated virtual code for such machine
        /// </summary>
        /// <param name="ast">Abstract Syntax Tree.</param>
        /// <param name="request">Request used by user to perform convertion.</param>
        /// <returns>Object that allows evaluate next occurences</returns>
        private ConvertionResponse <IFireTimeEvaluator> Convert(RootScriptNode ast,
                                                                ConvertionRequest <TMethodsAggregator> request)
        {
            var coretnessChecker        = new RdlQueryValidator(Metdatas);
            var queryValidatorTraverser = new Traverser(coretnessChecker);

            ast.Accept(queryValidatorTraverser);

            if (!coretnessChecker.IsValid)
            {
                return(new ConvertionResponse <IFireTimeEvaluator>(null, coretnessChecker.Errors.ToArray()));
            }

            var contextChangeTracker = new Stack <bool>();
            var scopeGenerator       = new ContextGenerator(contextChangeTracker);
            var scopeTraverser       = new ContextGeneratorTraverser(scopeGenerator, contextChangeTracker);

            ast.Accept(scopeTraverser);

            var codeGenerator = request.Debuggable
                ? new DebuggerSymbolGenerator(Metdatas, request.MethodsAggregator, MethodOccurences)
                : new CodeGenerator(Metdatas, request.MethodsAggregator, MethodOccurences);

            var codeGenerationTraverseVisitor = new ExtendedTraverser(codeGenerator, scopeGenerator.Scope.GetRootOfAllScopes());

            ast.Accept(codeGenerationTraverseVisitor);
            IFireTimeEvaluator evaluator = codeGenerator.CreateVirtualMachine(request.CancellationToken);

            if (evaluator == null)
            {
                return(new ConvertionResponse <IFireTimeEvaluator>(null, coretnessChecker.Errors.ToArray()));
            }

            evaluator = new TimeZoneAdjuster(request.Source, evaluator);
            evaluator = new DaylightSavingTimeTracker(request.Source, evaluator);

            return(request.Source == request.Target
                ? new ConvertionResponse <IFireTimeEvaluator>(evaluator)
                : new ConvertionResponse <IFireTimeEvaluator>(new TimeZoneChangerDecorator(request.Source, request.Target, evaluator)));
        }
Esempio n. 2
0
 public IdentifiableEvaluator(IFireTimeEvaluator evaluator, Guid key)
 {
     _evaluator = evaluator;
     Key        = key;
 }
Esempio n. 3
0
 /// <summary>
 /// Instantiate and configure this instance.
 /// </summary>
 /// <param name="timeZone">The source timezone.</param>
 /// <param name="evaluator">The evaluator.</param>
 public DaylightSavingTimeTracker(TimeZoneInfo timeZone, IFireTimeEvaluator evaluator)
 {
     _timeZone  = timeZone;
     _evaluator = evaluator;
 }
Esempio n. 4
0
 /// <summary>
 /// Initialize instance.
 /// </summary>
 /// <param name="source">Evaluator working timezone</param>
 /// <param name="destinationZoneInfo">Destination timezone.</param>
 /// <param name="evaluator">The evaluator.</param>
 public TimeZoneChangerDecorator(TimeZoneInfo source, TimeZoneInfo destinationZoneInfo, IFireTimeEvaluator evaluator)
 {
     _destinationZoneInfo = destinationZoneInfo;
     _evaluator           = evaluator;
     _sourceZoneInfo      = source;
 }
Esempio n. 5
0
 /// <summary>
 /// Instantiate and configure this instance.
 /// </summary>
 /// <param name="timeZone">The source timezone.</param>
 /// <param name="evaluator">The evaluator.</param>
 public TimeZoneAdjuster(TimeZoneInfo timeZone, IFireTimeEvaluator evaluator)
 {
     _timeZone  = timeZone;
     _evaluator = evaluator;
 }