using System;
using System.Collections.Generic;
using
System.Linq;
using System.Text;
using System.Xml;
using
System.Xml.Linq;
using
DFS.Kiosk.Provider.Simulator.Common.Utilities;
using
DFS.Kiosk.Provider.Simulators.Utilities;
namespace DFS.Kiosk.Provider.Simulator.Common.Data
{
public static
class DataAccessor
{
private static object _readWriteLock=new
object();
private static string _xmlFileName = "Data/ValidTickets.xml";
public static string ReadTicket(string ticketNumber,TicketStatus
ticketstatus)
{
try
{
lock (_readWriteLock)
{
var doc =
XDocument.Load(_xmlFileName);
var element = (from elem in
doc.Elements().Descendants() where elem.Value == ticketNumber &&
elem.Attribute("status").Value == ticketstatus.ToString() select
elem).FirstOrDefault();
return element != null ?
element.Attribute("amount").Value : null;
}
}
catch (Exception ex)
{
Logger.WriteLogger(ex,ConstValues.MainLogFileName);
}
return null;
}
public static string ReadTicket(string ticketNumber, string
attribute)
{
try
{
lock (_readWriteLock)
{
var doc =
XDocument.Load(_xmlFileName);
var element = (from elem in
doc.Elements().Descendants() where elem.Value == ticketNumber select
elem).FirstOrDefault();
if (attribute=="status")
{
return element != null ?
element.Attribute("status").Value : null;
}
else if(attribute=="amount")
{
return element != null ? element.Attribute("amount").Value : null;
}
}
}
catch
(Exception ex)
{
Logger.WriteLogger(ex,
ConstValues.MainLogFileName);
}
return null;
}
public static bool WriteTicket(string ticketNumber, TicketStatus
oldStatus, TicketStatus newStatus)
{
try
{
lock (_readWriteLock)
{
var doc = XDocument.Load(_xmlFileName);
var
element = (from elem in doc.Elements().Descendants() where elem.Value ==
ticketNumber && elem.Attribute("status").Value == oldStatus.ToString()
select elem).FirstOrDefault();
if(element!=null)
{
element.Attribute("status").Value =
newStatus.ToString();
doc.Save(_xmlFileName);
return true;
}
return false;
}
}
catch
(Exception ex)
{
Logger.WriteLogger(ex,
ConstValues.MainLogFileName);
return false;
}
}
/// <summary>
/// Creates ticket, add xml node
into ValidTickets.xml file
/// </summary>
///
<param name="amount">The amount.</param>
///
<returns></returns>
public static string
CreateTicket(string amount)
{
try
{
lock (_readWriteLock)
{
var xDoc = XDocument.Load(_xmlFileName);
var lastTiket =
xDoc.Elements().Descendants().Last();
var number =
(long.Parse(lastTiket.Value) + 1).ToString();
//if number.lenght<18 fill with "0" at start
while (number.Length < 18)
{
number = "0" + number;
}
//get 18 character in case number.lengh>18
var
ticketNumber = number.Substring(number.Length - 18, 18);
//add new ticket to xdocoment
var
newNode = new XElement("ValidVoucher",
new XAttribute("status", TicketStatus.pending),
new XAttribute("amount", amount));
newNode.SetValue(ticketNumber);
xDoc.Root.Add(newNode);
xDoc.Save(_xmlFileName);
return ticketNumber;
}
}
catch (Exception ex)
{
Logger.WriteLogger(ex, ConstValues.MainLogFileName);
return
"000000000000000000";
}
}
}
}
原文:http://www.cnblogs.com/cw_volcano/p/3557014.html