# HG changeset patch # User IBBoard # Date 1250885547 0 # Node ID 2060f23abee909abdf14f8f3f7b6bab647c9036b # Parent c4ee96a910184cdfb7d785b61bb7d22e173d27f1 Re #53: Create XML saver * Add saving of unit equipment * Add extra property to DTD to indicate whether equipment amount is fixed or a ratio diff -r c4ee96a91018 -r 2060f23abee9 api/Factories/Xml/WarFoundryXmlSaver.cs --- a/api/Factories/Xml/WarFoundryXmlSaver.cs Fri Aug 21 19:51:24 2009 +0000 +++ b/api/Factories/Xml/WarFoundryXmlSaver.cs Fri Aug 21 20:12:27 2009 +0000 @@ -43,6 +43,18 @@ private string CreateXmlString(WarFoundryObject toSave) { + string xmlString = ""; + + if (toSave is Army) + { + xmlString = CreateArmyXmlString((Army)toSave); + } + + return xmlString; + } + + private string CreateArmyXmlString(Army toSave) + { /* @@ -65,18 +77,6 @@ */ - string xmlString = ""; - - if (toSave is Army) - { - xmlString = CreateArmyXmlString((Army)toSave); - } - - return xmlString; - } - - private string CreateArmyXmlString(Army toSave) - { XmlDocument doc = new XmlDocument(); XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", null, null); doc.AppendChild(declaration); @@ -96,21 +96,62 @@ foreach (Unit unit in toSave.GetUnits()) { - XmlElement unitElem = doc.CreateElement("unit"); - unitElem.SetAttribute("id", unit.ID); - unitElem.SetAttribute("unitName", unit.Name); - unitElem.SetAttribute("unitType", unit.UnitType.ID); - unitElem.SetAttribute("size", unit.Size.ToString()); + units.AppendChild(CreateUnitElement(unit, doc)); - if (!unit.Race.Equals(toSave.Race)) - { - unitElem.SetAttribute("race", unit.Race.ID); - } - - units.AppendChild(unitElem); } return doc.OuterXml; } + + private XmlElement CreateUnitElement(Unit unit, XmlDocument doc) + { + XmlElement unitElem = doc.CreateElement("unit"); + unitElem.SetAttribute("id", unit.ID); + unitElem.SetAttribute("unitName", unit.Name); + unitElem.SetAttribute("unitType", unit.UnitType.ID); + unitElem.SetAttribute("size", unit.Size.ToString()); + + if (!unit.Race.Equals(unit.Army.Race)) + { + unitElem.SetAttribute("race", unit.Race.ID); + } + + XmlElement equipmentElem = CreateEquipmentItemsElement(unit, doc); + + if (equipmentElem != null) + { + unitElem.AppendChild(equipmentElem); + } + + return unitElem; + } + + private XmlElement CreateEquipmentItemsElement(Unit unit, XmlDocument doc) + { + UnitEquipmentItem[] equipItems = unit.GetEquipment(); + int equipItemCount = equipItems.Length; + XmlElement equipmentElem = null; + + if (equipItemCount > 0) + { + equipmentElem = doc.CreateElement("equipment"); + + for (int i = 0; i < equipItemCount; i++) + { + equipmentElem.AppendChild(CreateEquipmentElement(equipItems[i], unit, doc)); + } + } + + return equipmentElem; + } + + private XmlElement CreateEquipmentElement(UnitEquipmentItem item, Unit unit, XmlDocument doc) + { + XmlElement equipmentItemElem = doc.CreateElement("equipItem"); + equipmentItemElem.SetAttribute("id", item.EquipmentItemID); + equipmentItemElem.SetAttribute("amount", unit.GetEquipmentAmount(item).ToString()); + equipmentItemElem.SetAttribute("amountType", unit.GetEquipmentAmountIsRatio(item) ? "ratio" : "fixed"); + return equipmentItemElem; + } } } diff -r c4ee96a91018 -r 2060f23abee9 dtds/army.xsd --- a/dtds/army.xsd Fri Aug 21 19:51:24 2009 +0000 +++ b/dtds/army.xsd Fri Aug 21 20:12:27 2009 +0000 @@ -16,6 +16,7 @@ + @@ -70,4 +71,10 @@ + + + + + + \ No newline at end of file