using System; using System.Xml.Serialization; using System.Configuration; using System.IO; using System.Xml; using System.Web; using Yavsc.Model.FrontOffice.Catalog; namespace SalesCatalog.XmlImplementation { /// /// Xml catalog provider. /// In charge of getting the catalog data, /// returning a Catalog object from GetCatalog /// public class XmlCatalogProvider: CatalogProvider { #region implemented abstract members of CatalogProvider /// /// Gets the activity. /// /// The activity. /// MAE code. public override Yavsc.Model.FrontOffice.Activity GetActivity (string MEACode) { throw new NotImplementedException (); } /// /// Registers the activity. /// /// Activity name. /// Meacode. /// Comment. public override void RegisterActivity (string activityName, string meacode, string comment) { throw new NotImplementedException (); } /// /// Finds the activity. /// /// The activity. /// Pattern. /// If set to true exerted. public override Yavsc.Model.FrontOffice.Activity[] FindActivity (string pattern, bool exerted) { throw new NotImplementedException (); } /// /// Finds the performer. /// /// The performer. /// MEA code. public override Yavsc.Model.FrontOffice.PerformerProfile[] FindPerformer (string MEACode) { throw new NotImplementedException (); } /// /// Gets the catalog, loading it from /// the file system at a first call, /// and when its last write time has changed. /// /// The catalog. 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; } /// /// The catalog instance. /// protected XmlCatalog catInstance = null; /// /// The last modification date of the file loaded. /// protected DateTime lastModification = new DateTime(0); /// /// The name of the file loaded. /// protected string fileName = null; #endregion /// /// Initialize the catalog /// using the specified name and config. /// The config object contains under the key /// connection the path to the Xml Catalog file /// at server side. /// /// Name. /// Config. 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; } } } }