private void SetValueForExamWorkSheet(byte[] value, IExamInfo examInfo)
        {
            CpuClock c = new CpuClock();

            try
            {
                using (_workSheetsOnExam.LockOnCollectionChanged())
                {
                    using (_fetalBPSInfoNodes.LockOnCollectionChanged())
                    {
                        _fetalBPSInfoNodes.Clear();
                        _workSheetsOnExam.Clear();
                        try
                        {
                            if (value != null && value.Length > 0)
                            {
                                ScanNodeContext context = new ScanNodeContext((ExamInfo)examInfo);

                                var extensibleData = ExtensibleData.DeSerialize(value, context);
                                if (extensibleData != null)
                                {
                                    _fetalBPSInfoNodes.AddRange(extensibleData.BpsNodes);
                                    _workSheetsOnExam.AddRange(extensibleData.ScanNodes);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            _workSheetsOnExam.Clear();
                            _fetalBPSInfoNodes.Clear();
                            Logger.WriteLineError("Failed to parse ExtensibleData value, details:{0}.", ex);
                        }
                    }
                }
            }
            finally
            {
                if (c.TotalMilliSeconds >= 500)
                {
                    Logger.WriteLineError("ExamInfo.SetWorkSheetsXml spent {0:F2} ms", c.TotalMilliSeconds);
                }
            }
        }
        private IScanInfo CreateScanInfo(DataRow scanInfoRow, IExamInfo examInfo)
        {
            var time      = (DateTime)scanInfoRow["ScanDate"];
            var id        = scanInfoRow["ScanId"].ToString();
            var probeName = scanInfoRow["ProbeName"].ToString();
            var app       = ApplicationInfo.Unknown;
            var appXml    = scanInfoRow["ApplicationInfoXml"].ToString();

            if (!string.IsNullOrEmpty(appXml))
            {
                XmlDocument xDoc = new XmlDocument();
                xDoc.LoadXml(appXml);
                XmlElement element = xDoc.DocumentElement;
                app.ReloadFrom(element);
            }

            ScanInfo scanInfo = new ScanInfo((ExamInfo)examInfo, id, time, probeName, app);

            return(scanInfo);
        }
        private void SaveWorksheet(IExamInfo examInfo)
        {
            var exam      = examInfo as ExamInfo;
            var scanNodes = exam?.ScanNodes as NamedList <IScanNode>;

            //Do clear in both worksheet & fetalBPS info nodes.
            scanNodes?.Clear();
            exam?.FetalBPSInfoNodes.Clear();

            if (_workSheetsOnExam.Count != 0)
            {
                foreach (var workSheet in _workSheetsOnExam)
                {
                    exam?.AddScanNode(workSheet);
                }
            }

            exam?.FetalBPSInfoNodes.AddRange(_fetalBPSInfoNodes);
            exam?.SaveWorksheet();
        }
 public CExamLevelsMgrImpl(IExamInfo examData)
 {
     this.examData = examData;
 }
 public CExamLevelsMgrImpl(IExamInfo examData)
 {
     this.examData = examData;
 }