annotate api/Factories/Xml/WarFoundryXmlGameSystemSaver.cs @ 297:349e521785c1

Re #338: WarFoundry.API - Save System Data Created IWarFoundryGameSystemSaver Created WarFoundryXmlGameSystemSaver Updated WarFoundrySaver Created GetGameSystemSaver Created SetGameSystemSaver
author Tsudico
date Fri, 07 Jan 2011 03:35:50 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
297
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
1 // This file (WarFoundryXmlGameSystemSaver.cs) is a part of the IBBoard.WarFoundry.API project and is copyright 2008, 2009 IBBoard.
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
2 //
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
3 // 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.
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
4
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
5 using System;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
6 using System.Collections.Generic;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
7 using System.IO;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
8 using System.Xml;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
9 using System.Xml.Schema;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
10 using IBBoard.Lang;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
11 using IBBoard.Xml;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
12 using IBBoard.WarFoundry.API.Factories.Xml.Zip;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
13 using IBBoard.WarFoundry.API.Objects;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
14 using IBBoard.WarFoundry.API.Savers;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
15 using IBBoard.WarFoundry.API.Util;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
16 using ICSharpCode.SharpZipLib.Zip;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
17
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
18 namespace IBBoard.WarFoundry.API.Factories.Xml
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
19 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
20 public class WarFoundryXmlGameSystemSaver : IWarFoundryGameSystemSaver
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
21 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
22 public const string GAMESYSTEM_FILE_EXTENSION = ".system";
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
23
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
24 public bool Save(GameSystem toSave, string savePath)
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
25 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
26 bool success = false;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
27 ZipFile file = null;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
28
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
29 if (!savePath.EndsWith(GAMESYSTEM_FILE_EXTENSION))
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
30 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
31 savePath = savePath + GAMESYSTEM_FILE_EXTENSION;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
32 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
33
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
34 try
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
35 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
36 file = ZipFile.Create(savePath);
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
37 file.BeginUpdate();
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
38 file.Add(new StringZipEntrySource(CreateXmlString(toSave)), "data.systemx");
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
39 file.CommitUpdate();
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
40 success = true;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
41 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
42 finally
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
43 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
44 if (file != null)
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
45 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
46 file.Close();
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
47 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
48 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
49
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
50 return success;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
51 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
52
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
53 private string CreateXmlString(WarFoundryObject toSave)
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
54 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
55 string xmlString = "";
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
56
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
57 if (toSave is GameSystem)
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
58 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
59 xmlString = CreateGameSystemXmlString((GameSystem)toSave);
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
60 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
61
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
62 return xmlString;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
63 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
64
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
65 private string CreateGameSystemXmlString(GameSystem toSave)
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
66 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
67 XmlDocument doc = new XmlDocument();
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
68 XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", null, null);
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
69 doc.AppendChild(declaration);
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
70 XmlSchema schema = new XmlSchema();
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
71 schema.Namespaces.Add("", "http://ibboard.co.uk/warfoundry/system");
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
72 schema.Namespaces.Add("cats", "http://ibboard.co.uk/warfoundry/cats");
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
73 doc.Schemas.Add(schema);
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
74 XmlElement root = doc.CreateElement("system");
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
75 root.SetAttribute("xmlns", "http://ibboard.co.uk/warfoundry/system");
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
76 root.SetAttribute("xmlns:cats", "http://ibboard.co.uk/warfoundry/cats");
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
77 doc.AppendChild(root);
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
78 root.SetAttribute("id", XmlTools.GetAsciiXmlIdForString(toSave.ID));
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
79 root.SetAttribute("name", toSave.Name);
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
80 root.SetAttribute("defaultArmySize", toSave.SystemArmyDefaultSize.ToString());
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
81 root.SetAttribute("warn", toSave.WarnOnError.ToString().ToLowerInvariant());
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
82 root.SetAttribute("allowAllies", toSave.AllowAllies.ToString().ToLowerInvariant());
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
83 XmlElement cats = doc.CreateElement("categories");
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
84 root.AppendChild(cats);
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
85
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
86 foreach (Category cat in toSave.Categories)
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
87 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
88 cats.AppendChild(CreateCategoryElement(cat, doc));
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
89 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
90
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
91 XmlElement sysStatsList = doc.CreateElement("sysStatsList");
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
92 sysStatsList.SetAttribute("defaultStats", XmlTools.GetAsciiXmlIdForString(toSave.StandardSystemStatsID));
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
93 root.AppendChild(sysStatsList);
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
94
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
95 foreach(SystemStats stats in toSave.SystemStats)
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
96 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
97 sysStatsList.AppendChild(CreateSystemStatsElement(stats, doc));
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
98 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
99
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
100 return doc.OuterXml;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
101 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
102
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
103 private XmlElement CreateCategoryElement(Category cat, XmlDocument doc)
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
104 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
105 XmlElement catElem = doc.CreateElement("cats:cat");
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
106 catElem.SetAttribute("id", XmlTools.GetAsciiXmlIdForString(cat.ID));
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
107 catElem.SetAttribute("name", (cat.HasDefaultName() ? "" : cat.Name));
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
108 if (cat.MinimumPoints > 0)
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
109 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
110 catElem.SetAttribute("minPoints", cat.MaximumPercentage.ToString());
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
111 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
112 if (cat.MaximumPoints < 100)
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
113 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
114 catElem.SetAttribute("maxPoints", cat.MaximumPercentage.ToString());
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
115 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
116 if(cat.MinimumPercentage > 0)
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
117 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
118 catElem.SetAttribute("minPercentage", cat.MaximumPercentage.ToString());
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
119 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
120 if(cat.MaximumPercentage < 100)
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
121 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
122 catElem.SetAttribute("maxPercentage", cat.MaximumPercentage.ToString());
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
123 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
124
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
125 return catElem;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
126 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
127
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
128 private XmlElement CreateSystemStatsElement(SystemStats stats, XmlDocument doc)
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
129 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
130 XmlElement statsElem = doc.CreateElement("sysStats");
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
131 statsElem.SetAttribute("id", XmlTools.GetAsciiXmlIdForString(stats.ID));
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
132
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
133 foreach(StatSlot stat in stats.StatSlots)
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
134 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
135 statsElem.AppendChild(CreateSystemStatElement(stat, doc));
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
136 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
137
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
138 return statsElem;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
139 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
140
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
141 private XmlElement CreateSystemStatElement(StatSlot stat, XmlDocument doc)
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
142 {
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
143 XmlElement statElem = doc.CreateElement("sysStat");
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
144 statElem.SetAttribute("name", stat.Name);
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
145
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
146 return statElem;
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
147 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
148 }
349e521785c1 Re #338: WarFoundry.API - Save System Data
Tsudico
parents:
diff changeset
149 }