Quickstarts.HistoricalAccessServer.DataFileReader.LoadData C# (CSharp) Method

LoadData() private method

Loads the history data from a stream.
private LoadData ( ISystemContext context, System.DateTime baseline, StreamReader reader ) : DataSet
context ISystemContext
baseline System.DateTime
reader System.IO.StreamReader
return System.Data.DataSet
        private DataSet LoadData(ISystemContext context, DateTime baseline, StreamReader reader)
        {
            DataSet dataset = CreateDataSet();
         
            ServiceMessageContext messageContext = new ServiceMessageContext();

            if (context != null)
            {
                messageContext.NamespaceUris = context.NamespaceUris;
                messageContext.ServerUris = context.ServerUris;
                messageContext.Factory = context.EncodeableFactory;
            }
            else
            {
                messageContext.NamespaceUris = ServiceMessageContext.GlobalContext.NamespaceUris;
                messageContext.ServerUris = ServiceMessageContext.GlobalContext.ServerUris;
                messageContext.Factory = ServiceMessageContext.GlobalContext.Factory;
            }

            int sourceTimeOffset = 0;
            int serverTimeOffset = 0;
            StatusCode status = StatusCodes.Good;
            int recordType = 0;
            int modificationTimeOffet = 0;
            string modificationUser = String.Empty;
            BuiltInType valueType = BuiltInType.String;
            Variant value = Variant.Null;
            int annotationTimeOffet = 0;
            string annotationUser = String.Empty;
            string annotationMessage = String.Empty;
            int lineCount = 0;

            while (!reader.EndOfStream)
            {
                string line = reader.ReadLine();

                // check for end or error.
                if (line == null)
                {
                    break;
                }

                // ignore blank lines.
                line = line.Trim();
                lineCount++;
                
                if (String.IsNullOrEmpty(line))
                {
                    continue;
                }

                // ignore commented out lines.
                if (line.StartsWith("//"))
                {
                    continue;
                }

                // get source time.
                if (!ExtractField(lineCount, ref line, out sourceTimeOffset))
                {
                    continue;
                }

                // get server time.
                if (!ExtractField(lineCount, ref line, out serverTimeOffset))
                {
                    continue;
                }

                // get status code.
                if (!ExtractField(lineCount, ref line, out status))
                {
                    continue;
                }
                
                // get modification type.
                if (!ExtractField(lineCount, ref line, out recordType))
                {
                    continue;
                }

                // get modification time.
                if (!ExtractField(lineCount, ref line, out modificationTimeOffet))
                {
                    continue;
                }

                // get modification user.
                if (!ExtractField(lineCount, ref line, out modificationUser))
                {
                    continue;
                }

                if (recordType >= 0)
                {
                    // get value type.
                    if (!ExtractField(lineCount, ref line, out valueType))
                    {
                        continue;
                    }

                    // get value.
                    if (!ExtractField(lineCount, ref line, messageContext, valueType, out value))
                    {
                        continue;
                    }
                }
                else
                {
                    // get annotation time.
                    if (!ExtractField(lineCount, ref line, out annotationTimeOffet))
                    {
                        continue;
                    }

                    // get annotation user.
                    if (!ExtractField(lineCount, ref line, out annotationUser))
                    {
                        continue;
                    }

                    // get annotation message.
                    if (!ExtractField(lineCount, ref line, out annotationMessage))
                    {
                        continue;
                    }
                }

                // add values to data table.
                DataValue dataValue = new DataValue();
                dataValue.WrappedValue = value;
                dataValue.SourceTimestamp = baseline.AddMilliseconds(sourceTimeOffset);
                dataValue.ServerTimestamp = baseline.AddMilliseconds(serverTimeOffset);
                dataValue.StatusCode = status;

                DataRow row = null;

                if (recordType == 0)
                {
                    row = dataset.Tables[0].NewRow();

                    row[0] = dataValue.SourceTimestamp;
                    row[1] = dataValue.ServerTimestamp;
                    row[2] = dataValue;
                    row[3] = valueType;
                    row[4] = (value.TypeInfo != null) ? value.TypeInfo.ValueRank : ValueRanks.Any;

                    dataset.Tables[0].Rows.Add(row);
                }

                else if (recordType > 0)
                {
                    row = dataset.Tables[1].NewRow();

                    row[0] = dataValue.SourceTimestamp;
                    row[1] = dataValue.ServerTimestamp;
                    row[2] = dataValue;
                    row[3] = valueType;
                    row[4] = (value.TypeInfo != null) ? value.TypeInfo.ValueRank : ValueRanks.Any;
                    row[5] = recordType;

                    ModificationInfo info = new ModificationInfo();
                    info.UpdateType = (HistoryUpdateType)recordType;
                    info.ModificationTime = baseline.AddMilliseconds(modificationTimeOffet);
                    info.UserName = modificationUser;
                    row[6] = info;

                    dataset.Tables[1].Rows.Add(row);
                }

                else if (recordType < 0)
                {
                    row = dataset.Tables[2].NewRow();

                    Annotation annotation = new Annotation();
                    annotation.AnnotationTime = baseline.AddMilliseconds(annotationTimeOffet);
                    annotation.UserName = annotationUser;
                    annotation.Message = annotationMessage;
                    dataValue.WrappedValue = new ExtensionObject(annotation);

                    row[0] = dataValue.SourceTimestamp;
                    row[1] = dataValue.ServerTimestamp;
                    row[2] = dataValue;
                    row[3] = valueType;
                    row[4] = (value.TypeInfo != null) ? value.TypeInfo.ValueRank : ValueRanks.Any;
                    row[5] = annotation;

                    dataset.Tables[2].Rows.Add(row);
                }

                dataset.AcceptChanges();
            }

            return dataset;
        }