|
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< |