From: <br...@us...> - 2008-06-20 14:08:32
|
Revision: 269 http://acmcontester.svn.sourceforge.net/acmcontester/?rev=269&view=rev Author: brus07 Date: 2008-06-20 07:07:46 -0700 (Fri, 20 Jun 2008) Log Message: ----------- Added Xml functionality to Data module. Can load/save data through Xml. Modified Paths: -------------- ACMServer/trunk/ACMServer/Library/Data/Properties/AssemblyInfo.cs ACMServer/trunk/ACMServer/Library/Data/Result.cs ACMServer/trunk/ACMServer/Library/Data/Submit.cs ACMServer/trunk/ACMServer/Library/Data/SubmitList.cs ACMServer/trunk/ACMServer/Library/LibraryExtention/LibraryExtention.csproj ACMServer/trunk/ACMServer/Library/testData/Program.cs ACMServer/trunk/ACMServer/Library/testData/Properties/AssemblyInfo.cs ACMServer/trunk/ACMServer/Library/testData/submitList.xml ACMServer/trunk/ACMServer/Library/testData/testData.csproj Added Paths: ----------- ACMServer/trunk/ACMServer/Library/LibraryExtention/Reader.cs ACMServer/trunk/ACMServer/Library/LibraryExtention/XML/XmlSerializer.cs ACMServer/trunk/ACMServer/Library/testData/data.xsd ACMServer/trunk/ACMServer/Library/testData/data.xsx ACMServer/trunk/ACMServer/Library/testData/result.xml Removed Paths: ------------- ACMServer/trunk/ACMServer/Library/testData/submitList.xsd Modified: ACMServer/trunk/ACMServer/Library/Data/Properties/AssemblyInfo.cs =================================================================== --- ACMServer/trunk/ACMServer/Library/Data/Properties/AssemblyInfo.cs 2008-06-19 23:03:23 UTC (rev 268) +++ ACMServer/trunk/ACMServer/Library/Data/Properties/AssemblyInfo.cs 2008-06-20 14:07:46 UTC (rev 269) @@ -31,5 +31,5 @@ // // You can specify all the values or you can default the Revision and Build Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyFileVersion("1.0.0.0")] Modified: ACMServer/trunk/ACMServer/Library/Data/Result.cs =================================================================== --- ACMServer/trunk/ACMServer/Library/Data/Result.cs 2008-06-19 23:03:23 UTC (rev 268) +++ ACMServer/trunk/ACMServer/Library/Data/Result.cs 2008-06-20 14:07:46 UTC (rev 269) @@ -1,20 +1,27 @@ using System; +using System.Xml.Serialization; using AcmContester.AcmLibraryExtention.XML; namespace AcmContester.Library.LibraryExtention.Data { + [XmlRoot("result")] public class Result { - Submit submit; + [XmlElement("submit", typeof(Submit))] + public Submit submit; + [XmlElement("res", typeof(string))] + public string res; + [XmlElement("result", typeof(int))] + public int result; + [XmlElement("usedTime", typeof(double))] + public double usedTime; + [XmlElement("usedMemory", typeof(int))] + public int usedMemory; string temp; - public Result(string message) + private Result() { - //TODO - temp = message.Substring(0, message.IndexOf('$')); - string s = message.Substring(message.IndexOf('$') + 1); - submit = new Submit(s); } public Submit Submit @@ -25,10 +32,35 @@ } } + public Result(string message) + { + //TODO + temp = message.Substring(0, message.IndexOf('$')); + string s = message.Substring(message.IndexOf('$') + 1); + submit = new Submit(s); + } + + public static Result CreateFromXml(string message) + { + message = Xml.GetOuterXmlOfSingleNodeFromXpath(message, "result"); + if (message == null || message == "") + return null; + string schema = Reader.ReadString("data.xsd"); + if (Xml.ValidateXmlWithSchema(message, schema) == false) + return null; + + Result result = XmlSerializer<Result>.Load(message); + return result; + } + public override string ToString() { - //HACK: \xE4\xEB\xFF \xF2\xE5\xF1\xF2\xF3 \xF5\xE0\xE9 \xE1\xF3\xE4\xE5 \xF2\xE0\xEA, \xE0\xEB\xE5 \xEC\xE0\xBA \xE1\xF3\xF2\xE8 \xF7\xE5\xF0\xE5\xE7 XML return temp; } + public string ToStringX() + { + string result = XmlSerializer<Result>.Serialization(this); + return result; + } } } Modified: ACMServer/trunk/ACMServer/Library/Data/Submit.cs =================================================================== --- ACMServer/trunk/ACMServer/Library/Data/Submit.cs 2008-06-19 23:03:23 UTC (rev 268) +++ ACMServer/trunk/ACMServer/Library/Data/Submit.cs 2008-06-20 14:07:46 UTC (rev 269) @@ -1,33 +1,38 @@ using System; using AcmContester.AcmLibraryExtention.XML; using System.IO; +using System.Xml; +using System.Xml.Serialization; namespace AcmContester.Library.LibraryExtention.Data { + [XmlRoot("submit")] public class Submit { - int id; - string sourceCode; - int language; + [XmlElement("id", typeof(int))] + public int id; + [XmlElement("sourceCode", typeof(string))] + public string sourceCode; + [XmlElement("language", typeof(int))] + public int language; string temp; + public Submit() + { + } + public Submit(string message) { - //TODO - TextReader reader = new StreamReader("submitList.xsd"); - string schema = reader.ReadToEnd(); - bool good = Xml.ValidateXmlWithSchema(message, schema); - if (good == false) - throw new Exception("Submit: ValidateXmlWithSchema - error"); - //id = Convert.ToInt32(message.Substring(0,message.IndexOf('$'))); - //temp = message.Substring(message.IndexOf('$')+1); + //TODO: + id = Convert.ToInt32(message.Substring(0,message.IndexOf('$'))); + sourceCode = message.Substring(message.IndexOf('$')+1); } //HACK: \xE4\xEB\xFF \xF2\xE5\xF1\xF2\xF3 \xF5\xE0\xE9 \xE1\xF3\xE4\xE5 \xF2\xE0\xEA, \xE0\xEB\xE5 \xEC\xE0\xBA \xE1\xF3\xF2\xE8 \xF7\xE5\xF0\xE5\xE7 XML public override string ToString() { - return temp; + return sourceCode; } public override int GetHashCode() Modified: ACMServer/trunk/ACMServer/Library/Data/SubmitList.cs =================================================================== --- ACMServer/trunk/ACMServer/Library/Data/SubmitList.cs 2008-06-19 23:03:23 UTC (rev 268) +++ ACMServer/trunk/ACMServer/Library/Data/SubmitList.cs 2008-06-20 14:07:46 UTC (rev 269) @@ -1,8 +1,55 @@ using System; +using System.Xml.Serialization; +using System.Collections; +using AcmContester.AcmLibraryExtention.XML; -namespace Data +namespace AcmContester.Library.LibraryExtention.Data { - class SubmitList + [XmlRoot("submitList")] + public class SubmitList { + ArrayList listSubmits; + + private SubmitList() + { + listSubmits = new ArrayList(); + } + + public static SubmitList CreateFromXml(string message) + { + message = Xml.GetOuterXmlOfSingleNodeFromXpath(message, "submitList"); + if (message == null || message == "") + return null; + string schema = Reader.ReadString("data.xsd"); + if (Xml.ValidateXmlWithSchema(message, schema) == false) + return null; + + SubmitList newList = XmlSerializer<SubmitList>.Load(message); + return newList; + } + public override string ToString() + { + string result = XmlSerializer<SubmitList>.Serialization(this); + return result; + } + + [XmlElement("submit", typeof(Submit))] + public Submit[] Items + { + get + { + Submit[] submits = new Submit[listSubmits.Count]; + listSubmits.CopyTo(submits); + return submits; + } + set + { + if (value == null) return; + Submit[] submits = (Submit[])value; + listSubmits.Clear(); + foreach (Submit item in submits) + listSubmits.Add(item); + } + } } } Modified: ACMServer/trunk/ACMServer/Library/LibraryExtention/LibraryExtention.csproj =================================================================== --- ACMServer/trunk/ACMServer/Library/LibraryExtention/LibraryExtention.csproj 2008-06-19 23:03:23 UTC (rev 268) +++ ACMServer/trunk/ACMServer/Library/LibraryExtention/LibraryExtention.csproj 2008-06-20 14:07:46 UTC (rev 269) @@ -35,7 +35,9 @@ <ItemGroup> <Compile Include="Log.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="Reader.cs" /> <Compile Include="XML\Xml.cs" /> + <Compile Include="XML\XmlSerializer.cs" /> <Compile Include="XML\XmlValidator.cs" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> Added: ACMServer/trunk/ACMServer/Library/LibraryExtention/Reader.cs =================================================================== --- ACMServer/trunk/ACMServer/Library/LibraryExtention/Reader.cs (rev 0) +++ ACMServer/trunk/ACMServer/Library/LibraryExtention/Reader.cs 2008-06-20 14:07:46 UTC (rev 269) @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.IO; + +namespace AcmContester.Library.LibraryExtention +{ + public class Reader + { + static Dictionary<string, string> strings = new Dictionary<string, string>(); + public static string ReadString(string fileName, bool cash) + { + string text = null; + if (cash == false || strings.ContainsKey(fileName) == false) + { + text = ReadString(fileName); + if (cash == true) + strings[fileName] = text; + } + if (cash == true) + { + text = strings[fileName]; + } + return text; + } + + public static string ReadString(string fileName) + { + TextReader reader = new StreamReader(fileName); + return reader.ReadToEnd(); + } + } +} Added: ACMServer/trunk/ACMServer/Library/LibraryExtention/XML/XmlSerializer.cs =================================================================== --- ACMServer/trunk/ACMServer/Library/LibraryExtention/XML/XmlSerializer.cs (rev 0) +++ ACMServer/trunk/ACMServer/Library/LibraryExtention/XML/XmlSerializer.cs 2008-06-20 14:07:46 UTC (rev 269) @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; + +namespace AcmContester.AcmLibraryExtention.XML +{ + public class XmlSerializer<T> where T : class + { + public static string Serialization(Object ob) + { + // Serialization + System.Xml.Serialization.XmlSerializer s = new System.Xml.Serialization.XmlSerializer(typeof(T)); + StringBuilder sb = new StringBuilder(); + TextWriter w = new StringWriter(sb); + s.Serialize(w, ob); + w.Close(); + return sb.ToString(); + } + + public static T Load(string message) + { + // Deserialization + T result; + TextReader r = new StringReader(message); + System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(T)); + result = (T)serializer.Deserialize(r); + r.Close(); + return result; + } + } +} Modified: ACMServer/trunk/ACMServer/Library/testData/Program.cs =================================================================== --- ACMServer/trunk/ACMServer/Library/testData/Program.cs 2008-06-19 23:03:23 UTC (rev 268) +++ ACMServer/trunk/ACMServer/Library/testData/Program.cs 2008-06-20 14:07:46 UTC (rev 269) @@ -1,7 +1,6 @@ using System; +using AcmContester.Library.LibraryExtention; using AcmContester.Library.LibraryExtention.Data; -using System.IO; -using AcmContester.AcmLibraryExtention.XML; namespace testData { @@ -9,12 +8,25 @@ { static void Main(string[] args) { - string message = (new StreamReader("submitList.xml")).ReadToEnd(); - message = Xml.GetOuterXmlOfSingleNodeFromXpath(message, "submitList"); - if (message != null && message != "") + DateTime start = DateTime.Now; + for (int i = 0; i < 1; i++) { - Submit submit = new Submit(message); + string submitListMessage = Reader.ReadString("submitList.xml"); + SubmitList submitList = SubmitList.CreateFromXml(submitListMessage); + string s1 = submitList.ToString(); + if (submitListMessage != s1) + throw new Exception(); + + string resultMessage = Reader.ReadString("result.xml"); + Result result = Result.CreateFromXml(resultMessage); + string s2 = result.ToStringX(); + if (resultMessage != s2) + throw new Exception(); + if (i % 100 == 0) + Console.WriteLine(i); } + TimeSpan dur = DateTime.Now - start; + Console.WriteLine(dur.ToString()); } } } Modified: ACMServer/trunk/ACMServer/Library/testData/Properties/AssemblyInfo.cs =================================================================== --- ACMServer/trunk/ACMServer/Library/testData/Properties/AssemblyInfo.cs 2008-06-19 23:03:23 UTC (rev 268) +++ ACMServer/trunk/ACMServer/Library/testData/Properties/AssemblyInfo.cs 2008-06-20 14:07:46 UTC (rev 269) @@ -29,5 +29,5 @@ // Build Number // Revision // -[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyFileVersion("1.0.0.0")] Copied: ACMServer/trunk/ACMServer/Library/testData/data.xsd (from rev 268, ACMServer/trunk/ACMServer/Library/testData/submitList.xsd) =================================================================== --- ACMServer/trunk/ACMServer/Library/testData/data.xsd (rev 0) +++ ACMServer/trunk/ACMServer/Library/testData/data.xsd 2008-06-20 14:07:46 UTC (rev 269) @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?> +<xs:schema id="XMLSchema1" elementFormDefault="qualified" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"> + <xs:complexType name="submitType"> + <xs:sequence maxOccurs="1"> + <!-- потрібно щоб ці записи могли слідувати у довільному порядку --> + <xs:element name="id" type="xs:positiveInteger" /> + <xs:element name="sourceCode" type="xs:string" /> + <xs:element name="language"> + <!-- обмеження для ID мови програмування --> + <xs:simpleType> + <xs:restriction base="xs:positiveInteger"> + <xs:maxInclusive value="100" /> + </xs:restriction> + </xs:simpleType> + </xs:element> + </xs:sequence> + </xs:complexType> + <xs:element name="submitList"> + <xs:complexType> + <xs:sequence> + <xs:sequence> + <xs:element name="submit" type="submitType" maxOccurs="unbounded" minOccurs="0" /> + </xs:sequence> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:complexType name="resultType"> + <xs:sequence> + <xs:element name="submit" type="submitType" /> + <xs:element name="res" type="xs:string" /> + <xs:element name="result" type="xs:int" /> + <xs:element name="usedTime" type="xs:double" /> + <xs:element name="usedMemory" type="xs:double" /> + </xs:sequence> + </xs:complexType> + <xs:element name="result" type="resultType"> + </xs:element> +</xs:schema> \ No newline at end of file Added: ACMServer/trunk/ACMServer/Library/testData/data.xsx =================================================================== --- ACMServer/trunk/ACMServer/Library/testData/data.xsx (rev 0) +++ ACMServer/trunk/ACMServer/Library/testData/data.xsx 2008-06-20 14:07:46 UTC (rev 269) @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--This file is auto-generated by the XML Schema Designer. It holds layout information for components on the designer surface.--> +<XSDDesignerLayout Style="LeftRight" layoutVersion="2" viewPortLeft="0" viewPortTop="0" zoom="100"> + <submitType_XmlComplexType left="1317" top="1254" width="5292" height="2831" selected="0" zOrder="0" index="0" expanded="1"> + <language_XmlElement left="7243" top="2312" width="5292" height="714" selected="0" zOrder="1" index="2" expanded="1"> + <_x0028_language_x0029__XmlSimpleType left="13169" top="1254" width="5292" height="2831" selected="0" zOrder="4" index="0" expanded="1" /> + </language_XmlElement> + </submitType_XmlComplexType> + <submitList_XmlElement left="1317" top="4593" width="5292" height="2831" selected="0" zOrder="7" index="1" expanded="1"> + <_x0028_group1_x0029__XmlSequence left="7243" top="4593" width="5292" height="2831" selected="0" zOrder="9" index="0" expanded="1"> + <submit_XmlElement left="13169" top="4593" width="5292" height="2831" selected="0" zOrder="12" index="0" expanded="1"> + <language_XmlElement left="19095" top="5585" width="5292" height="714" selected="0" zOrder="32" index="2" expanded="0" /> + </submit_XmlElement> + </_x0028_group1_x0029__XmlSequence> + </submitList_XmlElement> + <resultType_XmlComplexType left="1317" top="7932" width="5292" height="2831" selected="0" zOrder="14" index="2" expanded="1"> + <submit_XmlElement left="7243" top="7932" width="5292" height="2831" selected="0" zOrder="16" index="0" expanded="1"> + <language_XmlElement left="13169" top="8924" width="5292" height="714" selected="0" zOrder="28" index="2" expanded="0" /> + </submit_XmlElement> + </resultType_XmlComplexType> + <result_XmlElement left="1317" top="11271" width="5292" height="2831" selected="0" zOrder="18" index="3" expanded="1"> + <submit_XmlElement left="7243" top="11271" width="5292" height="2831" selected="0" zOrder="21" index="0" expanded="1"> + <language_XmlElement left="13169" top="12263" width="5292" height="714" selected="0" zOrder="24" index="2" expanded="0" /> + </submit_XmlElement> + </result_XmlElement> +</XSDDesignerLayout> \ No newline at end of file Added: ACMServer/trunk/ACMServer/Library/testData/result.xml =================================================================== --- ACMServer/trunk/ACMServer/Library/testData/result.xml (rev 0) +++ ACMServer/trunk/ACMServer/Library/testData/result.xml 2008-06-20 14:07:46 UTC (rev 269) @@ -0,0 +1,23 @@ +\xFF\xFE< |