private void InitializeFixers(string filename)
{
// in case we're doing a second pass, reset various internal variables, including our own
foreach (var fixer in m_rtLevelFixers)
fixer.Reset();
m_owners.Clear();
m_guids.Clear();
m_parentToOwnedObjsur.Clear();
m_rtElementsToDelete.Clear();
using (XmlReader xrdr = XmlReader.Create(filename))
{
xrdr.MoveToContent();
if (xrdr.Name != "languageproject")
throw new Exception(String.Format("Unexpected outer element (expected <Lists>): {0}", xrdr.Name));
xrdr.Read();
xrdr.MoveToContent();
if (xrdr.Name == "AdditionalFields")
{
string customsNode = xrdr.ReadOuterXml();
XElement additionalFieldsElem = XElement.Parse(customsNode);
// Give each fixer a chance to gather data on defined custom fields.
foreach (var fixer in m_rtLevelFixers)
fixer.InspectAdditionalFieldsElement(additionalFieldsElem);
xrdr.ReadToFollowing("rt");
}
while (xrdr.Name == "rt")
{
string rtXml = xrdr.ReadOuterXml();
XElement rt = XElement.Parse(rtXml);
StoreGuidInfoAndOwnership(rt, errorLogger);
// Give each fixer a chance to gather data on the first pass,
// if it needs two passes to fix its sort of problem.
foreach (var fixer in m_rtLevelFixers)
fixer.InspectElement(rt);
xrdr.MoveToContent();
++m_crt;
if (m_progress.Position == m_progress.Maximum)
m_progress.Position = 0;
if ((m_crt % 1000) == 0)
m_progress.Step(1);
}
foreach (var fixer in m_rtLevelFixers)
fixer.FinalFixerInitialization(m_owners, m_guids, m_parentToOwnedObjsur, m_rtElementsToDelete);
xrdr.Close();
}
}