Mercurial > repos > IBBoard.WarFoundry.API
view API/Savers/Xml/WarFoundryXmlFileSaver.cs @ 497:cd367acd7c48 default tip
Re #419: Remove assumptions of a file-based install
* Swap XSLTs to resources
* Update XSL Exporter to use Streams, not files
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Wed, 28 Nov 2012 20:24:36 +0000 |
parents | 3c4a6403a88c |
children |
line wrap: on
line source
using System; using IBBoard.WarFoundry.API.Savers; using IBBoard.WarFoundry.API.Objects; using ICSharpCode.SharpZipLib.Zip; using System.IO; using IBBoard.IO; using IBBoard.Lang; namespace IBBoard.WarFoundry.API.Savers.Xml { public class WarFoundryXmlFileSaver : IWarFoundryFileSaver { public WarFoundryXmlFileSaver() { } public bool Save(string path, params WarFoundryLoadedObject[] objects) { ZipOutputStream zipStream = new ZipOutputStream(new FileStream(path, FileMode.Create)); AddFiles(zipStream, objects); zipStream.Close(); return true; } public void AddFiles(ZipOutputStream zipStream, WarFoundryLoadedObject[] objects) { foreach (WarFoundryLoadedObject obj in objects) { AddFile(zipStream, obj); } } public void AddFile(ZipOutputStream zipStream, WarFoundryLoadedObject obj) { ZipEntry entry = new ZipEntry(GetZipEntryName(obj)); zipStream.PutNextEntry(entry); byte[] bytes = GetObjectBytes(obj); zipStream.Write(bytes, 0, bytes.Length); } public byte[] GetObjectBytes(WarFoundryLoadedObject obj) { string xmlString = ""; if (obj is GameSystem) { xmlString = GetGameSystemString((GameSystem)obj); } else if (obj is Army) { xmlString = GetArmyString((Army)obj); } return StringManipulation.StringToBytes(xmlString); } public string GetGameSystemString(GameSystem obj) { return new WarFoundryXmlGameSystemSaver().CreateXmlString(obj); } public string GetArmyString(Army obj) { return new WarFoundryXmlArmySaver().CreateXmlString(obj); } private string GetZipEntryName(WarFoundryLoadedObject obj) { return obj.ID + GetFileExtension(obj); } public string GetFileExtension(WarFoundryLoadedObject obj) { string ext = ""; if (obj is Army) { ext = ".armyx"; } else if (obj is Race) { ext = ".racex"; } else if (obj is GameSystem) { ext = ".systemx"; } return ext; } } }