comparison api/Factories/Xml/WarFoundryXmlFactory.cs @ 49:9d31d063b194

Re #10 - Refactor source code for readability * Add SelectSingleElement method that checks type and casts return as XmlElement Also: * Delete code to staged load Army and add TODO
author IBBoard <dev@ibboard.co.uk>
date Sat, 28 Mar 2009 16:45:24 +0000
parents b49372dd8afa
children bb6b993b98bf
comparison
equal deleted inserted replaced
48:b49372dd8afa 49:9d31d063b194
91 GameSystem system = WarFoundryLoader.GetDefault().GetGameSystem(systemID); 91 GameSystem system = WarFoundryLoader.GetDefault().GetGameSystem(systemID);
92 string raceID = elem.GetAttribute("race"); 92 string raceID = elem.GetAttribute("race");
93 Race race = WarFoundryLoader.GetDefault().GetRace(system, raceID); 93 Race race = WarFoundryLoader.GetDefault().GetRace(system, raceID);
94 int points = GetIntValueFromAttribute(elem, "maxPoints"); 94 int points = GetIntValueFromAttribute(elem, "maxPoints");
95 Army army = new Army(race, name, points, file); 95 Army army = new Army(race, name, points, file);
96 StoreExtraData(army, elem); 96 //TODO: Complete loading of army
97 return army; 97 return army;
98 } 98 }
99 99
100 private void StoreExtraData(WarFoundryStagedLoadingObject wfObject, XmlElement elem) 100 private void StoreExtraData(WarFoundryStagedLoadingObject wfObject, XmlElement elem)
101 { 101 {
247 247
248 private XmlNode SelectSingleNode(XmlNode element, string xpathQuery) 248 private XmlNode SelectSingleNode(XmlNode element, string xpathQuery)
249 { 249 {
250 return element.SelectSingleNode(xpathQuery, GetNamespaceManager()); 250 return element.SelectSingleNode(xpathQuery, GetNamespaceManager());
251 } 251 }
252
253 private XmlElement SelectSingleElement(XmlNode element, string xpathQuery)
254 {
255 XmlNode node = SelectSingleNode(element, xpathQuery);
256 return (node is XmlElement) ? (XmlElement) node : null;
257 }
252 258
253 private int GetIntValueFromAttribute(XmlElement elem, string attributeName) 259 private int GetIntValueFromAttribute(XmlElement elem, string attributeName)
254 { 260 {
255 try 261 try
256 { 262 {
296 } 302 }
297 else if (obj is Race) 303 else if (obj is Race)
298 { 304 {
299 CompleteLoading((Race)obj); 305 CompleteLoading((Race)obj);
300 } 306 }
301 else if (obj is Army)
302 {
303 CompleteLoading((Army) obj);
304 }
305 } 307 }
306 308
307 public void CompleteLoading(GameSystem system) 309 public void CompleteLoading(GameSystem system)
308 { 310 {
309 if (system.IsFullyLoaded) 311 if (system.IsFullyLoaded)
320 322
321 system.SetAsLoading(); 323 system.SetAsLoading();
322 324
323 XmlDocument extraData = GetExtraData(system); 325 XmlDocument extraData = GetExtraData(system);
324 LoadCategoriesForSystem(system, extraData); 326 LoadCategoriesForSystem(system, extraData);
325 XmlElement statsElem = SelectSingleNode(extraData, "/system:system/system:sysStatsList"); 327 XmlElement statsElem = SelectSingleElement(extraData, "/system:system/system:sysStatsList");
326 string defaultStatsID = statsElem.GetAttribute("defaultStats"); 328 string defaultStatsID = statsElem.GetAttribute("defaultStats");
327 LoadSystemStatsForSystem(system, extraData); 329 LoadSystemStatsForSystem(system, extraData);
328 system.StandardSystemStatsID = defaultStatsID; 330 system.StandardSystemStatsID = defaultStatsID;
329 LogNotifier.DebugFormat(GetType(), "Completed loading of GameSystem with ID {0}", system.ID); 331 LogNotifier.DebugFormat(GetType(), "Completed loading of GameSystem with ID {0}", system.ID);
330 LogNotifier.DebugFormat(GetType(), "GameSystem with ID {0} default stats: {1}", system.ID, system.StandardSystemStatsID); 332 LogNotifier.DebugFormat(GetType(), "GameSystem with ID {0} default stats: {1}", system.ID, system.StandardSystemStatsID);
444 { 446 {
445 throw new InvalidDataException(String.Format("Attribute 'cat' of UnitType {0} (value: {1}) did not reference a valid category", id, mainCatID)); 447 throw new InvalidDataException(String.Format("Attribute 'cat' of UnitType {0} (value: {1}) did not reference a valid category", id, mainCatID));
446 } 448 }
447 449
448 type.MainCategory = cat; 450 type.MainCategory = cat;
449 XmlElement statsElement = SelectSingleNodes(elem, "/race:race/race:units/race:unit/race:stats"); 451 XmlElement statsElement = SelectSingleElement(elem, "/race:race/race:units/race:unit/race:stats");
450 type.UnitStats = ParseUnitStats(statsElement, system); 452 type.UnitStats = ParseUnitStats(statsElement, system);
451 //TODO: Add unit requirements 453 //TODO: Add unit requirements
452 LogNotifier.Debug(GetType(), "Loaded "+type.Name); 454 LogNotifier.Debug(GetType(), "Loaded "+type.Name);
453 return type; 455 return type;
454 } 456 }