public OthersStepSecondsHandler(int startSecond, int endSecond, bool putIntoServer,
      AircraftDataAnalysisWinRT.DataModel.RawDataPointViewModel previewModel,
      AircraftDataAnalysisWinRT.Services.IDataReading dataReading)
     : base(startSecond, endSecond,
         putIntoServer, previewModel, dataReading)
 {
 }
 public FastDataReadingStepHandler(int startSecond, int endSecond, bool putIntoServer,
     AircraftDataAnalysisWinRT.DataModel.RawDataPointViewModel previewModel,
     AircraftDataAnalysisWinRT.Services.IDataReading dataReading)
 {
     this.m_startSecond = startSecond;
     this.m_endSecond = endSecond;
     this.m_putIntoServer = putIntoServer;
     this.m_previewModel = previewModel;
     this.m_dataReading = dataReading;
 }
        internal static FlightAnalysisSubViewModel Create(
            AircraftDataAnalysisWinRT.Domain.FlightAnalysisViewModel HostViewModel,
            FlightDataEntitiesRT.Flight flight, string hostParameterID)
        {
            FlightAnalysisSubViewModel viewModel = new FlightAnalysisSubViewModel() { ViewModel = HostViewModel };
            viewModel.HostParameterID = hostParameterID;
            viewModel.CurrentStartSecond = flight.StartSecond;
            viewModel.CurrentEndSecond = flight.EndSecond;

            var dataEntities = AircraftDataAnalysisWinRT.Services.ServerHelper.GetData(flight, new string[] { hostParameterID },
                flight.StartSecond, flight.EndSecond);

            return viewModel;
        }
 public void SetCurrentViewModel(string flightID,
     AircraftDataAnalysisWinRT.Domain.FlightAnalysisViewModelOld viewModel)
 {
     string key = this.GetFlightViewModelKey(flightID);
     if (this.m_objectMap.ContainsKey(key))
     {
         this.m_objectMap[key] = viewModel;
     }
     else
     {
         this.m_objectMap.Add(key, viewModel);
     }
 }
        public void SetCurrentViewModel(FlightDataEntitiesRT.Flight flight,
            AircraftDataAnalysisWinRT.Domain.FlightAnalysisViewModelOld viewModel)
        {
            if (flight == null || string.IsNullOrEmpty(flight.FlightID))
            {
                return;
            }

            SetCurrentViewModel(flight.FlightID, viewModel);
        }
            public InitResourceObjectHandler(int startSecond, int endSecond, bool putIntoServer,
               AircraftDataAnalysisWinRT.DataModel.RawDataPointViewModel previewModel,
               AircraftDataAnalysisWinRT.Services.IDataReading dataReading,
                FastDataReadingResourceObject resourceObject)
                : base(startSecond, endSecond, putIntoServer,
                    previewModel, dataReading)
            {

            }
 private void GenerateStepHandlers(int startSecond, int endSecond, bool putIntoServer, AircraftDataAnalysisWinRT.DataModel.RawDataPointViewModel previewModel, List<StepSecondsFastDataReadingStepHandler> stepHandlers)
 {
     StepSecondsFastDataReadingStepHandler basicStepHandler = new BasicStepSecondsHandler(startSecond, endSecond,
         putIntoServer, previewModel, this)
     {
         CurrentFlight = this.Flight,
         Parameters = this.Parameters,
         ResourceObject = this.m_resourceObject
     };
     stepHandlers.Add(basicStepHandler);
     StepSecondsFastDataReadingStepHandler decisionStepHandler = new DecisionStepSecondsHandler(startSecond, endSecond,
         putIntoServer, previewModel, this)
     {
         CurrentFlight = this.Flight,
         Parameters = this.Parameters,
         ResourceObject = this.m_resourceObject
     };
     stepHandlers.Add(decisionStepHandler);
     StepSecondsFastDataReadingStepHandler levelRecordsStepHandler = new LevelRecordsStepSecondsHandler(startSecond, endSecond,
         putIntoServer, previewModel, this)
     {
         CurrentFlight = this.Flight,
         Parameters = this.Parameters,
         ResourceObject = this.m_resourceObject
     };
     stepHandlers.Add(levelRecordsStepHandler);
     StepSecondsFastDataReadingStepHandler othersStepHandler = new OthersStepSecondsHandler(startSecond, endSecond,
         putIntoServer, previewModel, this)
     {
         CurrentFlight = this.Flight,
         Parameters = this.Parameters,
         ResourceObject = this.m_resourceObject
     };
     stepHandlers.Add(othersStepHandler);
 }
        /// <summary>
        /// 读取数据并入库
        /// </summary>
        /// <param name="startSecond"></param>
        /// <param name="endSecond"></param>
        /// <param name="putIntoServer">是否入库</param>
        /// <param name="previewModel">如果需要返回预览模型则传入空Model,数据会直接写入此对象。传空则表示不需预览</param>
        public void ReadData(int startSecond, int endSecond, bool putIntoServer,
            AircraftDataAnalysisWinRT.DataModel.RawDataPointViewModel previewModel)
        {
            m_handlers.Clear();
            FastDataReadingStepHandler deleteHandler = new DeleteExistsHandler(startSecond, endSecond,
                putIntoServer, previewModel, this) { CurrentFlight = this.Flight, Parameters = this.Parameters };
            m_handlers.Add(deleteHandler);
            deleteHandler.DoWorkAsync();//1.

            m_resourceObject = new FastDataReadingResourceObject();
            FastDataReadingStepHandler initHandler = new InitResourceObjectHandler(startSecond, endSecond,
                putIntoServer, previewModel, this, m_resourceObject) { CurrentFlight = this.Flight, Parameters = this.Parameters };
            m_handlers.Add(initHandler);
            initHandler.DoWorkAsync();//1.

            ReadSecondsHandler readSecondsHandler = new ReadSecondsHandler(startSecond, endSecond,
                putIntoServer, previewModel, this) { CurrentFlight = this.Flight, Parameters = this.Parameters };
            m_handlers.Add(readSecondsHandler);

            readSecondsHandler.StepHandlers = new List<StepSecondsFastDataReadingStepHandler>();
            //把所有单步Handler返回来
            GenerateStepHandlers(startSecond, endSecond, putIntoServer, previewModel, readSecondsHandler.StepHandlers);
            //加入总的Handler列表
            m_handlers.AddRange(readSecondsHandler.StepHandlers);


            //最终执行顺序:
            //1.先执行Delete、Init,完成后可以开始所有StepHandler
            //2.启动StepHandlers全部,开始监听所有动作
            //3.启动ReadSecondsHandler,里面对每一步的操作,都要激发StepHandlers的操作
            //4.调用GetResult,等待所有操作完成,每个类的GetResult自行负责Finalize

            //2. 启动StepHandlers全部,开始监听所有动作
            Parallel.ForEach(readSecondsHandler.StepHandlers,
                new Action<StepSecondsFastDataReadingStepHandler>(
                    delegate(StepSecondsFastDataReadingStepHandler stepHandler)
                    {
                        try
                        {
                            stepHandler.DoWorkAsync();
                        }
                        catch (Exception e)
                        {
                            LogHelper.Error(e);
                        }
                    }));

            //3. 启动ReadSecondsHandler,里面对每一步的操作,都要激发StepHandlers的操作
            readSecondsHandler.DoWorkAsync();

            //4.调用GetResult,等待所有操作完成,每个类的GetResult自行负责Finalize
            Parallel.ForEach(m_handlers,
                new Action<FastDataReadingStepHandler>(delegate(FastDataReadingStepHandler handler)
            {
                string result = string.Empty;
                try
                {
                    result = handler.GetResult();
                }
                catch (Exception ee)
                {
                    result = ee.Message + "\r\n" + ee.StackTrace;
                }

                if (!string.IsNullOrEmpty(result))
                {
                    LogHelper.Error(new Exception(result));
                }
            }));

            //所有操作完成
            return;
        }
        private async void LoadDatas(AircraftDataAnalysisWinRT.MyControl.SubEditChartNavigationParameter parameter)
        {
            List<string> pids = new List<string>();

            if (this.SerieGroup == null)
                this.SerieGroup = new FlightAnalysisChartGroupSubExtendedViewModel();

            await this.UserThreadInvoker.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
                new Windows.UI.Core.DispatchedHandler(() =>
                {
                    this.SerieGroup.Serie1Definition = new SerieDefinitionViewModel()
                    {
                        ParameterID = parameter.HostParameterID,
                        //ParameterCaption = ApplicationContext.Instance.GetFlightParameterCaption(parameter.HostParameterID),
                        //ForegroundBrush = AircraftDataAnalysisGlobalPallete.Brushes[0]
                    };
                }));
            pids.Add(parameter.HostParameterID);

            if (parameter.RelatedParameterIDs != null && parameter.RelatedParameterIDs.Length > 0)
            {
                if (parameter.RelatedParameterIDs.Length > 0)
                {
                    await this.UserThreadInvoker.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
                        new Windows.UI.Core.DispatchedHandler(() =>
                        {
                            this.SerieGroup.Serie2Definition = new SerieDefinitionViewModel()
                            {
                                ParameterID = parameter.RelatedParameterIDs[0].RelatedParameterID
                            };
                        }));
                    pids.Add(parameter.RelatedParameterIDs[0].RelatedParameterID);
                }
                if (parameter.RelatedParameterIDs.Length > 1)
                {
                    await this.UserThreadInvoker.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
                        new Windows.UI.Core.DispatchedHandler(() =>
                        {
                            this.SerieGroup.Serie3Definition = new SerieDefinitionViewModel()
                            {
                                ParameterID = parameter.RelatedParameterIDs[1].RelatedParameterID
                            };
                        }));
                    pids.Add(parameter.RelatedParameterIDs[1].RelatedParameterID);
                }
            }

            Task<string> resultTask = this.DataLoader.LoadRawDataAsync(pids);
            await this.UserThreadInvoker.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
                new Windows.UI.Core.DispatchedHandler(() =>
                {
                    this.SerieGroup.DataSerie = new FlightAnalysisChartSerieViewModel();

                    this.LoadSimpleDataPoints(this.SerieGroup.DataSerie, pids[0],
                        this.DataLoader, 0);
                    if (pids.Count > 1)
                    {
                        this.LoadSimpleDataPoints(this.SerieGroup.DataSerie, pids[1],
                            this.DataLoader, 1);
                    }
                    if (pids.Count > 2)
                    {
                        this.LoadSimpleDataPoints(this.SerieGroup.DataSerie, pids[2],
                            this.DataLoader, 2);
                    }
                    //var raws1 = this.DataLoader.GetRawData(pids[0]);
                }));

        }
 private async Task DebugSetZoomMode(AircraftDataAnalysisWinRT.MyControl.SubEditChartNavigationParameter parameter)
 {
     await this.UserThreadInvoker.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
         new Windows.UI.Core.DispatchedHandler(
             () =>
             {
                 this.SerieGroup.IsZoomMode = true;
             }));
 }
        private async void InitializeCore(
            AircraftDataAnalysisWinRT.MyControl.SubEditChartNavigationParameter parameter)
        {
            //await this.DebugSetZoomMode(parameter);

            this.LoadDatas(parameter);
            ////GetChartPanels
            //await InitPanelViewModel();
            //await this.DebugSetZoomMode(parameter);
            ////2. currentPanel
            //await SetCurrentPanelCore();

            ////3. serie definitions
            //await FinishBySetSerieDefs();

            //finish
            await Finish();
            System.Diagnostics.Debug.WriteLine(string.Format("End analysis sub ViewModel :{0} ", DateTime.Now));
        }
        public Task<string> InitializeAsync(AircraftDataAnalysisWinRT.MyControl.SubEditChartNavigationParameter parameter)
        {
            if (m_task == null)
            {
                Task<string> task = Task.Run<string>(
                    new Func<string>(() =>
                    {
                        try
                        {
                            this.InitializeCore(parameter);
                        }
                        catch (Exception e)
                        {
                            LogHelper.Error(e);
                            return e.Message;
                        }
                        return string.Empty;
                    }));
                m_task = task;
            }

            return m_task;
        }