Files
yavsc/SalesCatalog/XmlImplementation/XmlCatalogProvider.cs
Paul Schneider 721b11eba3 Google date quey,
refactiring,
docpage

* Yavsc.sln:
* Web.csproj:
* YavscModel.csproj:
* OtherWebException.cs:
* ProjectInfo.cs:
* IValueProvider.cs:
* CalendarApi.cs:
* HomeController.cs:
* TemplateException.cs:
* WorkFlowController.cs:
* NpgsqlWorkflow.csproj:
* GoogleErrorMessage.cs:
* ITCPNpgsqlProvider.cs:
* NpgsqlContentProvider.cs:
* ITContentProvider.csproj:
* FrontOfficeApiController.cs:
* NpgsqlContentProvider.csproj: refactoring

* App.master:
* WebApiConfig.cs: New Web api configuration architecture

* SalesCatalog.csproj:
* XmlCatalogProvider.cs: using MVC to get the catalog xml filename 

* WorkFlowManager.cs:
* FrontOfficeController.cs:
* CatalogManager.cs: No more extra argument to get the catalog

* DateQuery.aspx:
* AskForADate.cs:
* GoogleController.cs: Google Date new query model

* style.css:
* BBCodeHelper.cs: Doc page responsive design

* Service.cs:
* SetPrice.cs: xml doc

* WebApiConfig.cs: refactioring
2015-03-04 14:41:35 +01:00

98 lines
2.7 KiB
C#

using System;
using System.Xml.Serialization;
using System.Configuration;
using System.IO;
using System.Xml;
using Yavsc.Model.FrontOffice;
using System.Web;
namespace SalesCatalog.XmlImplementation
{
/// <summary>
/// Xml catalog provider.
/// In charge of getting the catalog data,
/// returning a Catalog object from GetCatalog
/// </summary>
public class XmlCatalogProvider: CatalogProvider
{
#region implemented abstract members of SalesCatalog.CatalogProvider
/// <summary>
/// Gets the catalog, loading it from
/// the file system at a first call,
/// and when its last write time has changed.
/// </summary>
/// <returns>The catalog.</returns>
public override Catalog GetCatalog ()
{
// Assert fileName != null
FileInfo fi = new FileInfo (fileName);
if (!fi.Exists)
throw new ConfigurationErrorsException(
string.Format("No catalog found ({0})",fileName));
if (fi.LastWriteTime > lastModification)
LoadCatalog ();
return catInstance;
}
/// <summary>
/// The catalog instance.
/// </summary>
protected XmlCatalog catInstance = null;
/// <summary>
/// The last modification date of the file loaded.
/// </summary>
protected DateTime lastModification = new DateTime(0);
/// <summary>
/// The name of the file loaded.
/// </summary>
protected string fileName = null;
#endregion
/// <summary>
/// Initialize the catalog
/// using the specified name and config.
/// The config object contains under the key
/// <c>connection</c> the path to the Xml Catalog file
/// at server side.
/// </summary>
/// <param name="name">Name.</param>
/// <param name="config">Config.</param>
public override void Initialize (string name, System.Collections.Specialized.NameValueCollection config)
{
if (config ["connection"] == null)
throw new Exception ("the 'connection' parameter is null " +
"(it should be the absolute path to the xml catalog)");
string cnx = (string) config ["connection"];
fileName = HttpContext.Current.Server.MapPath(cnx);
LoadCatalog ();
}
private void LoadCatalog ()
{
try {
FileInfo fi = new FileInfo (fileName);
if (!fi.Exists)
throw new Exception (
string.Format ("Le fichier Xml decrivant le catalogue n'existe pas ({0})", fi.FullName));
XmlSerializer xsr = new XmlSerializer (typeof(XmlCatalog),new Type[]{
typeof(Service),
typeof(PhysicalProduct),
typeof(Euro),
typeof(Text),
typeof(TextInput),
typeof(SelectInput)});
using (FileStream fs = fi.OpenRead()) {
catInstance = (XmlCatalog) xsr.Deserialize (fs);
}
fileName = fi.FullName;
lastModification = fi.LastWriteTime;
}
catch (Exception e) {
lastModification = new DateTime (0);
throw e;
}
}
}
}