changeset 116:2010a7e8bf9a

Re #54: Add Army support to WarFoundryFactory * Separate out army parsing to a separate class to make unit loading easier
author IBBoard <dev@ibboard.co.uk>
date Sat, 22 Aug 2009 19:42:04 +0000
parents d0c60b3204c1
children 093ee2da0f6e
files IBBoard.WarFoundry.API.csproj api/Factories/Xml/WarFoundryXmlArmyFactory.cs api/Factories/Xml/WarFoundryXmlArmyParser.cs
diffstat 3 files changed, 61 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/IBBoard.WarFoundry.API.csproj	Sat Aug 22 19:41:15 2009 +0000
+++ b/IBBoard.WarFoundry.API.csproj	Sat Aug 22 19:42:04 2009 +0000
@@ -134,6 +134,7 @@
     <Compile Include="api\Commands\ReplaceUnitEquipmentWithRatioAmountItemCommand.cs" />
     <Compile Include="api\Factories\Xml\Zip\StringZipEntrySource.cs" />
     <Compile Include="api\Factories\RequiredDataMissingException.cs" />
+    <Compile Include="api\Factories\Xml\WarFoundryXmlArmyParser.cs" />
   </ItemGroup>
   <ItemGroup>
     <Content Include="libs\ICSharpCode.SharpZipLib.dll" />
--- a/api/Factories/Xml/WarFoundryXmlArmyFactory.cs	Sat Aug 22 19:41:15 2009 +0000
+++ b/api/Factories/Xml/WarFoundryXmlArmyFactory.cs	Sat Aug 22 19:42:04 2009 +0000
@@ -17,27 +17,7 @@
 	{			
 		public Army CreateArmyFromElement(ZipFile file, XmlElement elem)
 		{
-			string name = elem.GetAttribute("name");
-			string systemID = elem.GetAttribute("system");
-			GameSystem system = WarFoundryLoader.GetDefault().GetGameSystem(systemID);
-			
-			if (system == null)
-			{
-				throw new RequiredDataMissingException(file.Name, "gameSystem", systemID);
-			}
-			
-			string raceID = elem.GetAttribute("race");
-			Race race = WarFoundryLoader.GetDefault().GetRace(system, raceID);
-			
-			if (race == null)
-			{
-				throw new RequiredDataMissingException(file.Name, "race", raceID);
-			}
-			
-			int points = XmlTools.GetIntValueFromAttribute(elem, "maxPoints");			
-			Army army = new Army(race, name, points, file);
-			//TODO: Complete loading of army
-			return army;
+			return new WarFoundryXmlArmyParser(file, elem).GetArmy();
 		}
 	}
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/api/Factories/Xml/WarFoundryXmlArmyParser.cs	Sat Aug 22 19:42:04 2009 +0000
@@ -0,0 +1,59 @@
+//  This file (WarFoundryXmlArmyParser.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2009 IBBoard
+// 
+// The file and the library/program it is in are licensed and distributed, without warranty, under the GNU Affero GPL license, either version 3 of the License or (at your option) any later version. Please see COPYING for more information and the full license.
+
+using System;
+using System.Xml;
+using IBBoard.Xml;
+using ICSharpCode.SharpZipLib.Zip;
+using IBBoard.WarFoundry.API.Objects;
+
+namespace IBBoard.WarFoundry.API.Factories.Xml
+{
+	public class WarFoundryXmlArmyParser
+	{
+		private ZipFile file;
+		private XmlElement elem;
+		private Army army;
+		
+		public WarFoundryXmlArmyParser(ZipFile file, XmlElement elem)
+		{
+			this.file = file;
+			this.elem = elem;
+		}
+
+		public Army GetArmy()
+		{
+			if (army == null)
+			{
+				ParseArmy();
+			}
+
+			return army;
+		}
+
+		private void ParseArmy()
+		{
+			string name = elem.GetAttribute("name");
+			string systemID = elem.GetAttribute("system");
+			GameSystem system = WarFoundryLoader.GetDefault().GetGameSystem(systemID);
+			
+			if (system == null)
+			{
+				throw new RequiredDataMissingException(file.Name, "gameSystem", systemID);
+			}
+			
+			string raceID = elem.GetAttribute("race");
+			Race race = WarFoundryLoader.GetDefault().GetRace(system, raceID);
+			
+			if (race == null)
+			{
+				throw new RequiredDataMissingException(file.Name, "race", raceID);
+			}
+			
+			int points = XmlTools.GetIntValueFromAttribute(elem, "maxPoints");			
+			army = new Army(race, name, points, file);
+			//TODO: Complete loading of army
+		}
+	}
+}