public PropertyIterator(
     IExpressionEvaluatorProvider exparessionEvaluatorProvider,
     IPropertyVisitor propertyVisitor,
     ISearchStatus searchStatus) : this(exparessionEvaluatorProvider, propertyVisitor, 50, searchStatus)
 {
     this._exparessionEvaluatorProvider = exparessionEvaluatorProvider;
 }
 public PropertyIterator(
     IExpressionEvaluatorProvider exparessionEvaluatorProvider,
     IPropertyVisitor propertyVisitor,
     int maxDepth,
     ISearchStatus searchStatus)
 {
     _exparessionEvaluatorProvider = exparessionEvaluatorProvider;
     _propertyVisitor = propertyVisitor;
     _searchStatus    = searchStatus;
     MaxDepth         = maxDepth;
 }
        public ExpressionEvaluatorViewModel(IVsEnvironmentEvents vsEvents,
                                            ISearchStatus searchStatus,
                                            IExpressionEvaluatorProvider expressionEvaluatorProvider,
                                            ITaskSchedulerProvider taskSchedulerProvider)
        {
            _visibleProperties.CollectionChanged += visibleProperties_CollectionChanged;
            System.Windows.Data.BindingOperations.EnableCollectionSynchronization(_visibleProperties, _visiblePropertiesLock);
            _searchStatus = searchStatus;
            _searchStatus.StatusUpdated  = (s) => SearchingReportText = s;
            _expressionEvaluatorProvider = expressionEvaluatorProvider;
            _taskSchedulerProvider       = taskSchedulerProvider;

            vsEvents.EvaluatorBecomeAvailable   += (a, b) => { IsEnabled = true; };
            vsEvents.EvaluatorBecomeUnAvailable += VsEvents_EvaluatorBecomeUnAvailable;
        }
        private void IterateThrueProperty(IExpressionEvaluatorProvider expressionEvaluatorProvider)
        {
            ErrorMessage = null;
            _visibleProperties.Clear();

            StatusBarText = "Searching...";

            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();

            if (_property != null)
            {
                IPropertyVisitor propertyVisitor = new ActionBasedPropertyVisitor(
                    expandableProperty =>
                {
                    Application.Current.Dispatcher.Invoke(() =>
                    {
                        _visibleProperties.AddRange(expandableProperty.Select(item => DebugPropertyViewModel.From(item)));
                    });
                    _logger.Info(String.Join("\n", expandableProperty));
                },
                    valueProperty =>
                {
                    Application.Current.Dispatcher.Invoke(() =>
                    {
                        _visibleProperties.AddRange(valueProperty.Select(item => DebugPropertyViewModel.From(item)));
                    });
                    _logger.Info(String.Join("\n", valueProperty));
                });

                PropertyIterator propertyIterator = new PropertyIterator(
                    expressionEvaluatorProvider,
                    propertyVisitor,
                    _searchStatus);

                _cancelSearch.Action = propertyIterator.Cancel;

                var searchTask = Task.Run(
                    () =>
                {
                    IsSearchInProgress = true;
                    propertyIterator.TraversPropertyTree(_property, _searchText);
                })
                                 .ContinueWith(t =>
                {
                    IsSearchInProgress = false;
                    stopwatch.Stop();
                    if (t.Exception != null)
                    {
                        if (t.Exception.InnerExceptions.First() is TaskCanceledException)
                        {
                            _logger.Info("Search canceled");
                            PostSearchCompleteMessage(stopwatch.Elapsed, true);
                        }
                        else     // Error
                        {
                            _logger.Error(t.Exception.ToString());
                            StatusBarText = "Error during evaluation. " + t.Exception.ToString();
                            throw t.Exception;
                        }
                    }
                    else
                    {
                        _logger.Info("Search finished");
                        PostSearchCompleteMessage(stopwatch.Elapsed, false);
                    }

                    _cancelSearch.Action = null;
                },
                                               _taskSchedulerProvider.GetCurrentScheduler());
            }
            else
            {
                _logger.Info("ExpressionEvaluator is not initialized");
                ErrorMessage = "ExpressionEvaluator is not initialized";
            }
        }
 /// <inheritdoc/>
 public V1CreateWorkflowInstanceCommandHandler(ILoggerFactory loggerFactory, IMediator mediator, IMapper mapper, IHttpClientFactory httpClientFactory,
                                               IRepository <V1Workflow> workflows, IRepository <V1WorkflowInstance> workflowInstances, IExpressionEvaluatorProvider expressionEvaluatorProvider)
     : base(loggerFactory, mediator, mapper)
 {
     this.HttpClientFactory           = httpClientFactory;
     this.Workflows                   = workflows;
     this.WorkflowInstances           = workflowInstances;
     this.ExpressionEvaluatorProvider = expressionEvaluatorProvider;
 }
 /// <summary>
 /// Initializes a new <see cref="WorkflowRuntimeContext"/>
 /// </summary>
 /// <param name="serviceProvider">The current <see cref="IServiceProvider"/></param>
 /// <param name="logger">The service used to perform logging</param>
 /// <param name="expressionEvaluatorProvider">The service used to create provide <see cref="IExpressionEvaluator"/>s</param>
 /// <param name="secretManager">The service used to manage secrets</param>
 /// <param name="managementApi">The service used to interact with the Synapse Public API</param>
 /// <param name="runtimeApi">The service used to interact with the Synapse Runtime API</param>
 public WorkflowRuntimeContext(IServiceProvider serviceProvider, ILogger <WorkflowRuntimeContext> logger, IExpressionEvaluatorProvider expressionEvaluatorProvider,
                               ISecretManager secretManager, ISynapseManagementApi managementApi, ISynapseRuntimeApi runtimeApi)
 {
     this.ServiceProvider             = serviceProvider;
     this.Logger                      = logger;
     this.ExpressionEvaluatorProvider = expressionEvaluatorProvider;
     this.SecretManager               = secretManager;
     this.ManagementApi               = managementApi;
     this.RuntimeApi                  = runtimeApi;
 }