/// <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))); }
public IdentifiableEvaluator(IFireTimeEvaluator evaluator, Guid key) { _evaluator = evaluator; Key = key; }
/// <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; }
/// <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; }
/// <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; }