Files
2026-04-17 14:55:32 -04:00

581 lines
30 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
namespace DTS.Slice.PedestrianAndHeadReports
{
/// <summary>
/// top level report class, contains multiple sub reports
/// </summary>
public class PedestrianAndHeadTest: INotifyPropertyChanged
{
/// <summary>
/// these methods make the class wpf/depedency property friendly, lets us notify listeners when data changes ...
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
protected bool SetProperty<T>(ref T storage, T value, String propertyName)
{
if (object.Equals(storage, value)) return false;
storage = value;
this.OnPropertyChanged(propertyName);
return true;
}
protected void OnPropertyChanged(string propertyName)
{
var eventHandler = this.PropertyChanged;
if (eventHandler != null)
{
eventHandler(this, new PropertyChangedEventArgs(propertyName));
}
}
/// <summary>
/// these are all fields known of in the reports. Some are shared, some are specific to a specific report
/// </summary>
public enum Fields
{
TestNumber,
TestDate,
CarName,
Model,
TestTemperature,
ClassificationAngle,
MeasurementPoint,
CollisionSpeed,
ImpactorId,
ImpactorType,
StudyPersonnel,
And1,
And2,
FrequencyClass,
AccelerationUnits,
TimeUnits,
HeadX,
HeadY,
HeadZ,
ForceUnits,
MomentUnits,
CombinedForce,
UpperForce,
LowerForce,
UpperMoment,
MidMoment,
LowerMoment,
ImpactorWeight,
BendingMomentUnits,
ShearDisplacementUnits,
AccelerationChannel,
BendingMomentChannel,
ShearDisplacementChannel,
TibiaUnits,
MCLPCLLCLUnits,
Tibia1,
Tibia2,
Tibia3,
Tibia4,
ACLChannel,
MCLChannel,
PCLChannel,
LCLChannel,
AxialUnits,
XAxial,
YAxial,
ZAxial,
Femur1,
Femur2,
Femur3,
HeadDisplacementUnits,
HeadDisplacementChannel
}
/// <summary>
/// sets a specific field for a specific report
/// also aggregates the field to other reports if it's a shared field ...
/// </summary>
/// <param name="type"></param>
/// <param name="field"></param>
/// <param name="obj"></param>
public void SetField(ReportBase.ReportTypes type, Fields field, object obj)
{
string value = obj as string;
MeasurementUnit mu = obj as MeasurementUnit;
switch (field)
{
case Fields.XAxial:
switch (type)
{
case ReportBase.ReportTypes.LWRLegARS: GetReport(ReportBase.ReportTypes.LWRLegARS).SetChannel(ReportBase.KnownGraphs.ARS_ARS, LWRLegARSReport.XAxialChannelId, obj as ReviewTestChannel); break;
default: throw new NotImplementedException();
}
break;
case Fields.YAxial:
switch (type)
{
case ReportBase.ReportTypes.LWRLegARS: GetReport(ReportBase.ReportTypes.LWRLegARS).SetChannel(ReportBase.KnownGraphs.ARS_ARS, LWRLegARSReport.YAxialChannelId, obj as ReviewTestChannel); break;
default: throw new NotImplementedException();
}
break;
case Fields.ZAxial:
switch (type)
{
case ReportBase.ReportTypes.LWRLegARS: GetReport(ReportBase.ReportTypes.LWRLegARS).SetChannel(ReportBase.KnownGraphs.ARS_ARS, LWRLegARSReport.ZAxialChannelId, obj as ReviewTestChannel); break;
default: throw new NotImplementedException();
}
break;
case Fields.AxialUnits:
switch (type)
{
case ReportBase.ReportTypes.LWRLegARS: GetReport(ReportBase.ReportTypes.LWRLegARS).SetUnits(ReportBase.KnownGraphs.ARS_ARS, mu); break;
default: throw new NotImplementedException();
}
break;
case Fields.ACLChannel:
switch (type)
{
case ReportBase.ReportTypes.LWRLegFlex: GetReport(ReportBase.ReportTypes.LWRLegFlex).SetChannel(ReportBase.KnownGraphs.FLEX_ACLPCL, LWRLegFlexReport.ACL_ID, obj as ReviewTestChannel); break;
default: throw new NotImplementedException();
}
break;
case Fields.MCLChannel:
switch (type)
{
case ReportBase.ReportTypes.LWRLegFlex: GetReport(ReportBase.ReportTypes.LWRLegFlex).SetChannel(ReportBase.KnownGraphs.FLEX_MCL, LWRLegFlexReport.MCL_ID, obj as ReviewTestChannel); break;
default: throw new NotImplementedException();
}
break;
case Fields.PCLChannel:
switch (type)
{
case ReportBase.ReportTypes.LWRLegFlex: GetReport(ReportBase.ReportTypes.LWRLegFlex).SetChannel(ReportBase.KnownGraphs.FLEX_ACLPCL, LWRLegFlexReport.PCL_ID, obj as ReviewTestChannel); break;
default: throw new NotImplementedException();
}
break;
case Fields.LCLChannel:
switch (type)
{
case ReportBase.ReportTypes.LWRLegFlex: GetReport(ReportBase.ReportTypes.LWRLegFlex).SetChannel(ReportBase.KnownGraphs.FLEX_LCL, LWRLegFlexReport.LCL_ID, obj as ReviewTestChannel); break;
default: throw new NotImplementedException();
}
break;
case Fields.Tibia1:
switch (type)
{
case ReportBase.ReportTypes.LWRLegFlex: GetReport(ReportBase.ReportTypes.LWRLegFlex).SetChannel(ReportBase.KnownGraphs.FLEX_TIBIA, LWRLegFlexReport.TIBIA1_ID, obj as ReviewTestChannel); break;
default: throw new NotImplementedException();
}
break;
case Fields.Tibia2:
switch (type)
{
case ReportBase.ReportTypes.LWRLegFlex: GetReport(ReportBase.ReportTypes.LWRLegFlex).SetChannel(ReportBase.KnownGraphs.FLEX_TIBIA, LWRLegFlexReport.TIBIA2_ID, obj as ReviewTestChannel); break;
default: throw new NotImplementedException();
}
break;
case Fields.Tibia3:
switch (type)
{
case ReportBase.ReportTypes.LWRLegFlex: GetReport(ReportBase.ReportTypes.LWRLegFlex).SetChannel(ReportBase.KnownGraphs.FLEX_TIBIA, LWRLegFlexReport.TIBIA3_ID, obj as ReviewTestChannel); break;
default: throw new NotImplementedException();
}
break;
case Fields.Tibia4:
switch (type)
{
case ReportBase.ReportTypes.LWRLegFlex: GetReport(ReportBase.ReportTypes.LWRLegFlex).SetChannel(ReportBase.KnownGraphs.FLEX_TIBIA, LWRLegFlexReport.TIBIA4_ID, obj as ReviewTestChannel); break;
default: throw new NotImplementedException();
}
break;
case Fields.MCLPCLLCLUnits:
switch (type)
{
case ReportBase.ReportTypes.LWRLegFlex:
GetReport(ReportBase.ReportTypes.LWRLegFlex).SetUnits(ReportBase.KnownGraphs.FLEX_MCL, mu);
GetReport(ReportBase.ReportTypes.LWRLegFlex).SetUnits(ReportBase.KnownGraphs.FLEX_LCL, mu);
GetReport(ReportBase.ReportTypes.LWRLegFlex).SetUnits(ReportBase.KnownGraphs.FLEX_ACLPCL, mu);
break;
default: throw new NotImplementedException();
}
break;
case Fields.TibiaUnits:
switch (type)
{
case ReportBase.ReportTypes.LWRLegFlex: GetReport(ReportBase.ReportTypes.LWRLegFlex).SetUnits(ReportBase.KnownGraphs.FLEX_TIBIA, mu); break;
default: throw new NotImplementedException();
}
break;
case Fields.ShearDisplacementChannel:
switch(type)
{
case ReportBase.ReportTypes.LWRLegTRL: (GetReport(ReportBase.ReportTypes.LWRLegTRL) as LWRLegTRLReport).SetChannel(ReportBase.KnownGraphs.LWR_LEG_TRL_ShearAngle, LWRLegTRLReport.ShearingChannelId, obj as ReviewTestChannel); break;
default: throw new NotImplementedException();
}
break;
case Fields.BendingMomentChannel:
switch( type)
{
case ReportBase.ReportTypes.LWRLegTRL: (GetReport(ReportBase.ReportTypes.LWRLegTRL) as LWRLegTRLReport).SetChannel(ReportBase.KnownGraphs.LWR_LEG_TRL_BendingAngle, LWRLegTRLReport.BendingChannelId, obj as ReviewTestChannel); break;
default: throw new NotImplementedException();
}
break;
case Fields.Femur1:
switch (type)
{
case ReportBase.ReportTypes.LWRLegFlex: (GetReport(ReportBase.ReportTypes.LWRLegFlex) as LWRLegFlexReport).SetChannel(ReportBase.KnownGraphs.FLEX_FEMUR, LWRLegFlexReport.FEMUR1_ID, obj as ReviewTestChannel); break;
default: throw new NotImplementedException();
}
break;
case Fields.Femur2:
switch (type)
{
case ReportBase.ReportTypes.LWRLegFlex: (GetReport(ReportBase.ReportTypes.LWRLegFlex) as LWRLegFlexReport).SetChannel(ReportBase.KnownGraphs.FLEX_FEMUR, LWRLegFlexReport.FEMUR2_ID, obj as ReviewTestChannel); break;
default: throw new NotImplementedException();
}
break;
case Fields.Femur3:
switch (type)
{
case ReportBase.ReportTypes.LWRLegFlex: (GetReport(ReportBase.ReportTypes.LWRLegFlex) as LWRLegFlexReport).SetChannel(ReportBase.KnownGraphs.FLEX_FEMUR, LWRLegFlexReport.FEMUR3_ID, obj as ReviewTestChannel); break;
default: throw new NotImplementedException();
}
break;
case Fields.AccelerationChannel:
switch (type)
{
case ReportBase.ReportTypes.LWRLegTRL: GetReport(ReportBase.ReportTypes.LWRLegTRL).SetChannel(ReportBase.KnownGraphs.LWR_LEG_TRL_Acceleration, LWRLegTRLReport.AccelerationChannelId, obj as ReviewTestChannel); break;
case ReportBase.ReportTypes.LWRLegARS: GetReport(ReportBase.ReportTypes.LWRLegARS).SetChannel(ReportBase.KnownGraphs.ARS_Acceleration, LWRLegARSReport.XAccelerationId, obj as ReviewTestChannel); break;
default: throw new NotImplementedException();
}
break;
case Fields.HeadDisplacementChannel:
switch (type)
{
case ReportBase.ReportTypes.Head:
(GetReport(ReportBase.ReportTypes.Head) as HeadReport).SetChannel(ReportBase.KnownGraphs.HEAD_StrokeDisplacement, HeadReport.HEAD_Displacement, obj as ReviewTestChannel); break;
default:
throw new NotImplementedException();
}
break;
case Fields.HeadDisplacementUnits:
switch (type)
{
case ReportBase.ReportTypes.Head:
(GetReport(ReportBase.ReportTypes.Head) as HeadReport).SetUnits(ReportBase.KnownGraphs.HEAD_StrokeDisplacement, mu); break;
default:
throw new NotImplementedException();
}
break;
case Fields.ShearDisplacementUnits:
switch(type)
{
case ReportBase.ReportTypes.LWRLegTRL:
(GetReport(ReportBase.ReportTypes.LWRLegTRL) as LWRLegTRLReport).SetUnits(ReportBase.KnownGraphs.LWR_LEG_TRL_ShearAngle, mu);
break;
default:
throw new NotImplementedException();
}
break;
case Fields.BendingMomentUnits:
switch( type )
{
case ReportBase.ReportTypes.LWRLegTRL:
(GetReport(ReportBase.ReportTypes.LWRLegTRL) as LWRLegTRLReport).SetUnits(ReportBase.KnownGraphs.LWR_LEG_TRL_BendingAngle, mu);
break;
default:
throw new NotImplementedException();
}
break;
case Fields.MomentUnits:
switch (type)
{
case ReportBase.ReportTypes.UPRLeg:
GetReport(ReportBase.ReportTypes.UPRLeg).SetUnits(ReportBase.KnownGraphs.UPRLeg_Moment, mu); break;
default: throw new NotImplementedException();
}
break;
case Fields.ForceUnits:
if (type != ReportBase.ReportTypes.UPRLeg) { throw new NotImplementedException(); }
GetReport(type).SetUnits(ReportBase.KnownGraphs.UPRLEG_Force, mu);
break;
case Fields.AccelerationUnits:
switch (type)
{
case ReportBase.ReportTypes.Head:
GetReport(ReportBase.ReportTypes.Head).SetUnits(ReportBase.KnownGraphs.HEAD_Acceleration, mu);
break;
case ReportBase.ReportTypes.LWRLegTRL:
GetReport(ReportBase.ReportTypes.LWRLegTRL).SetUnits(ReportBase.KnownGraphs.LWR_LEG_TRL_Acceleration, mu);
break;
case ReportBase.ReportTypes.LWRLegARS:
GetReport(ReportBase.ReportTypes.LWRLegARS).SetUnits(ReportBase.KnownGraphs.ARS_Acceleration, mu);
break;
default:
throw new NotImplementedException();
}
break;
case Fields.ClassificationAngle:
if (type != ReportBase.ReportTypes.Head) { throw new NotImplementedException(); }
(GetReport(ReportBase.ReportTypes.Head) as HeadReport).ClassificationAngle = value;
break;
case Fields.And1:
GetReport(ReportBase.ReportTypes.Head).And1 = value;
GetReport(ReportBase.ReportTypes.LWRLegARS).And1 = value;
GetReport(ReportBase.ReportTypes.LWRLegFlex).And1 = value;
GetReport(ReportBase.ReportTypes.LWRLegTRL).And1 = value;
GetReport(ReportBase.ReportTypes.UPRLeg).And1 = value;
break;
case Fields.And2:
GetReport(ReportBase.ReportTypes.Head).And2 = value;
GetReport(ReportBase.ReportTypes.LWRLegARS).And2 = value;
GetReport(ReportBase.ReportTypes.LWRLegFlex).And2 = value;
GetReport(ReportBase.ReportTypes.LWRLegTRL).And2 = value;
GetReport(ReportBase.ReportTypes.UPRLeg).And2 = value;
break;
case Fields.CarName:
GetReport(ReportBase.ReportTypes.Head).CarName = value;
GetReport(ReportBase.ReportTypes.LWRLegARS).CarName = value;
GetReport(ReportBase.ReportTypes.LWRLegFlex).CarName = value;
GetReport(ReportBase.ReportTypes.LWRLegTRL).CarName = value;
GetReport(ReportBase.ReportTypes.UPRLeg).CarName = value;
break;
case Fields.CollisionSpeed:
GetReport(ReportBase.ReportTypes.Head).CollisionSpeed = value;
GetReport(ReportBase.ReportTypes.LWRLegARS).CollisionSpeed = value;
GetReport(ReportBase.ReportTypes.LWRLegFlex).CollisionSpeed = value;
GetReport(ReportBase.ReportTypes.LWRLegTRL).CollisionSpeed = value;
GetReport(ReportBase.ReportTypes.UPRLeg).CollisionSpeed = value;
break;
case Fields.FrequencyClass:
GetReport(type).ChannelFilterClass = value;
break;
case Fields.ImpactorId:
GetReport(ReportBase.ReportTypes.Head).ImpactorID = value;
GetReport(ReportBase.ReportTypes.LWRLegARS).ImpactorID = value;
GetReport(ReportBase.ReportTypes.LWRLegFlex).ImpactorID = value;
GetReport(ReportBase.ReportTypes.LWRLegTRL).ImpactorID = value;
GetReport(ReportBase.ReportTypes.UPRLeg).ImpactorID = value;
break;
case Fields.ImpactorType:
GetReport(type).ImpactorType = value;
break;
case Fields.MeasurementPoint:
GetReport(ReportBase.ReportTypes.Head).MeasurementPoint = value;
GetReport(ReportBase.ReportTypes.LWRLegARS).MeasurementPoint = value;
GetReport(ReportBase.ReportTypes.LWRLegFlex).MeasurementPoint = value;
GetReport(ReportBase.ReportTypes.LWRLegTRL).MeasurementPoint = value;
GetReport(ReportBase.ReportTypes.UPRLeg).MeasurementPoint = value;
break;
case Fields.Model:
GetReport(ReportBase.ReportTypes.Head).Model = value;
GetReport(ReportBase.ReportTypes.LWRLegARS).Model = value;
GetReport(ReportBase.ReportTypes.LWRLegFlex).Model = value;
GetReport(ReportBase.ReportTypes.LWRLegTRL).Model = value;
GetReport(ReportBase.ReportTypes.UPRLeg).Model = value;
break;
case Fields.StudyPersonnel:
GetReport(ReportBase.ReportTypes.Head).StudyPersonnel = value;
GetReport(ReportBase.ReportTypes.LWRLegARS).StudyPersonnel = value;
GetReport(ReportBase.ReportTypes.LWRLegFlex).StudyPersonnel = value;
GetReport(ReportBase.ReportTypes.LWRLegTRL).StudyPersonnel = value;
GetReport(ReportBase.ReportTypes.UPRLeg).StudyPersonnel = value;
break;
case Fields.TestDate:
try
{
DateTime dt = (DateTime)obj;
GetReport(ReportBase.ReportTypes.Head).TestDate = dt;
GetReport(ReportBase.ReportTypes.LWRLegARS).TestDate = dt;
GetReport(ReportBase.ReportTypes.LWRLegFlex).TestDate = dt;
GetReport(ReportBase.ReportTypes.LWRLegTRL).TestDate = dt;
GetReport(ReportBase.ReportTypes.UPRLeg).TestDate = dt;
}
catch (System.Exception) { }
break;
case Fields.TestNumber:
GetReport(ReportBase.ReportTypes.Head).TestNumber = value;
GetReport(ReportBase.ReportTypes.LWRLegARS).TestNumber = value;
GetReport(ReportBase.ReportTypes.LWRLegFlex).TestNumber = value;
GetReport(ReportBase.ReportTypes.LWRLegTRL).TestNumber = value;
GetReport(ReportBase.ReportTypes.UPRLeg).TestNumber = value;
break;
case Fields.TestTemperature:
GetReport(ReportBase.ReportTypes.Head).TestTemperature = value;
GetReport(ReportBase.ReportTypes.LWRLegARS).TestTemperature = value;
GetReport(ReportBase.ReportTypes.LWRLegFlex).TestTemperature = value;
GetReport(ReportBase.ReportTypes.LWRLegTRL).TestTemperature = value;
GetReport(ReportBase.ReportTypes.UPRLeg).TestTemperature = value;
break;
case Fields.TimeUnits:
GetReport(ReportBase.ReportTypes.Head).TimeUnits = value;
GetReport(ReportBase.ReportTypes.LWRLegARS).TimeUnits = value;
GetReport(ReportBase.ReportTypes.LWRLegFlex).TimeUnits = value;
GetReport(ReportBase.ReportTypes.LWRLegTRL).TimeUnits = value;
GetReport(ReportBase.ReportTypes.UPRLeg).TimeUnits = value;
break;
case Fields.HeadX:
if (type != ReportBase.ReportTypes.Head) { throw new NotSupportedException(); }
GetReport(ReportBase.ReportTypes.Head).SetChannel(ReportBase.KnownGraphs.HEAD_Acceleration, HeadReport.HEAD_X_ChannelID, obj as ReviewTestChannel);
break;
case Fields.HeadY:
if (type != ReportBase.ReportTypes.Head) { throw new NotSupportedException(); }
GetReport(ReportBase.ReportTypes.Head).SetChannel(ReportBase.KnownGraphs.HEAD_Acceleration, HeadReport.HEAD_Y_ChannelID, obj as ReviewTestChannel);
break;
case Fields.HeadZ:
if (type != ReportBase.ReportTypes.Head) { throw new NotSupportedException(); }
GetReport(ReportBase.ReportTypes.Head).SetChannel(ReportBase.KnownGraphs.HEAD_Acceleration, HeadReport.HEAD_Z_ChannelID, obj as ReviewTestChannel);
break;
case Fields.CombinedForce:
if( type != ReportBase.ReportTypes.UPRLeg) { throw new NotImplementedException();}
GetReport(type).SetChannel(ReportBase.KnownGraphs.UPRLEG_Force, UprLegReport.UPR_TOTALFORCE_ID, obj as ReviewTestChannel);
break;
case Fields.UpperForce:
if( type != ReportBase.ReportTypes.UPRLeg){ throw new NotImplementedException();}
GetReport(type).SetChannel(ReportBase.KnownGraphs.UPRLEG_Force, UprLegReport.UPR_FORCE_ID, obj as ReviewTestChannel);
break;
case Fields.LowerForce:
if( type != ReportBase.ReportTypes.UPRLeg){ throw new NotImplementedException();}
GetReport(type).SetChannel(ReportBase.KnownGraphs.UPRLEG_Force, UprLegReport.LWR_FORCE_ID, obj as ReviewTestChannel);
break;
case Fields.UpperMoment:
if( type != ReportBase.ReportTypes.UPRLeg ){ throw new NotImplementedException();}
GetReport(ReportBase.ReportTypes.UPRLeg).SetChannel(ReportBase.KnownGraphs.UPRLeg_Moment, UprLegReport.UPR_MOMENT_ID, obj as ReviewTestChannel);
break;
case Fields.MidMoment:
if( type != ReportBase.ReportTypes.UPRLeg){ throw new NotImplementedException();}
GetReport(type).SetChannel(ReportBase.KnownGraphs.UPRLeg_Moment, UprLegReport.MID_MOMENT_ID, obj as ReviewTestChannel);
break;
case Fields.LowerMoment:
if( type != ReportBase.ReportTypes.UPRLeg) { throw new NotImplementedException();}
GetReport(type).SetChannel(ReportBase.KnownGraphs.UPRLeg_Moment, UprLegReport.LWR_MOMENT_ID, obj as ReviewTestChannel);
break;
case Fields.ImpactorWeight:
/*if( type != ReportBase.ReportTypes.LWRLegTRL){ throw new NotImplementedException();}
(GetReport(ReportBase.ReportTypes.LWRLegTRL) as LWRLegTRLReport).ImpactorWeight = value;*/
GetReport(type).SetValue(Fields.ImpactorWeight.ToString(), value);
break;
default:
System.Diagnostics.Trace.WriteLine("unknown field " + field.ToString());
break;
}
}
/// <summary>
/// contains the test data to operate on ...
/// </summary>
private ReviewTest _test;
public ReviewTest Test
{
get { return _test; }
set
{
if (null != _test) { _test.Cleanup(); _test = null; }
SetProperty(ref _test, value, "Test");
}
}
/// <summary>
/// list of reports the pedestrian test is aware of.
/// </summary>
private Dictionary<ReportBase.ReportTypes, ReportBase> _reports = new Dictionary<ReportBase.ReportTypes, ReportBase>();
public ReportBase GetReport(ReportBase.ReportTypes type)
{
return _reports[type];
}
/// <summary>
/// constructs a report aware of head,ars, flex, trl, uprleg reports
/// </summary>
public PedestrianAndHeadTest()
{
_reports.Add(ReportBase.ReportTypes.Head, new HeadReport(this));
_reports.Add(ReportBase.ReportTypes.LWRLegARS, new LWRLegARSReport(this));
_reports.Add(ReportBase.ReportTypes.LWRLegFlex, new LWRLegFlexReport(this));
_reports.Add(ReportBase.ReportTypes.LWRLegTRL, new LWRLegTRLReport(this));
_reports.Add(ReportBase.ReportTypes.UPRLeg, new UprLegReport(this));
}
public void ToStringOutput(string filename)
{
System.Xml.XmlWriterSettings settings = new System.Xml.XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = " ";
settings.NewLineChars = "\r\n";
settings.NewLineHandling = System.Xml.NewLineHandling.Replace;
System.Xml.XmlWriter xt = System.Xml.XmlTextWriter.Create(filename, settings);
xt.WriteStartDocument(true);
xt.WriteStartElement("PedestrianAndHeadSafetyReport");
var e = _reports.GetEnumerator();
while (e.MoveNext())
{
e.Current.Value.ToStringOutput(ref xt);
}
xt.WriteEndElement();
xt.WriteEndDocument();
xt.Flush();
xt.Close();
}
public void SaveTo(string filename)
{
ToStringOutput(filename);
}
public void SetField(ReportBase.ReportTypes type, ReportBase.KnownGraphs graph, ReportGraph.Fields field, string value)
{
_reports[type].SetField(graph, field, value);
}
public void LoadFrom(string filename)
{
using (System.IO.MemoryStream ms = new System.IO.MemoryStream(System.IO.File.ReadAllBytes(filename)))
{
System.Xml.XmlReader tr = System.Xml.XmlTextReader.Create(ms, null);
ReportBase.ReportTypes _currentReport = ReportBase.ReportTypes.Head;
while (tr.Read())
{
if (tr.IsStartElement())
{
if (tr.Name == "Report")
{
}
else if (tr.Name == "ReportType")
{
_currentReport = (ReportBase.ReportTypes)Enum.Parse(typeof(ReportBase.ReportTypes), tr.ReadString());
}
else if (tr.Name == "PedestrianAndHeadSafetyReport")
{
}
else if (tr.Name == "InUse")
{
bool bInUse = Boolean.Parse(tr.ReadString());
_reports[_currentReport].InUse = bInUse;
}
else
{
try
{
Fields field = (Fields)Enum.Parse(typeof(Fields),tr.Name);
if (field == Fields.TestDate)
{
SetField(_currentReport, field, new DateTime(Convert.ToInt64(tr.ReadString())));
}
else
{
SetField(_currentReport, field, tr.ReadString());
}
}
catch (System.Exception) { }
}
}
}
}
}
}
}