// ======================================================================== // Copyright 2006 - Volian Enterprises, Inc. All rights reserved. // Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE // ------------------------------------------------------------------------ // $Workfile: $ $Revision: $ // $Author: $ $Date: $ // // $History: $ // ======================================================================== using System; using System.Data; using System.Data.SqlClient; using Csla; using Csla.Data; using System.Configuration; using System.IO; using System.Xml; using System.Drawing; using System.ComponentModel; using System.Collections.Generic; namespace VEPROMS.CSLA.Library { public partial interface IFormatOrFormatInfo { PlantFormat PlantFormat { get;} IFormatOrFormatInfo MyIParent { get;} string Data { get; } string ToString(); string FullName { get; } } public class FormatEventArgs { private string _Status; public string Status { get { return _Status; } set { _Status = value; } } public FormatEventArgs(string status) { _Status = status; } } public delegate void FormatEvent(object sender,FormatEventArgs args); public partial class Format:IFormatOrFormatInfo { #region PlantFormat [NonSerialized] private PlantFormat _PlantFormat; public PlantFormat PlantFormat { get { return (_PlantFormat != null ? _PlantFormat : _PlantFormat = new PlantFormat(this)); } } #endregion public static event FormatEvent FormatLoaded; private static void OnFormatLoaded(object sender, FormatEventArgs args) { if (FormatLoaded != null) FormatLoaded(sender, args); } public IFormatOrFormatInfo MyIParent { get { return MyParent; } } public override string ToString() { //return Name; //return PlantFormat.FormatData.Name; return FullName; } public string FullName { get { if (ParentID == 1) return Description + " (" + Name + ")"; return MyParent.Description + " - " + Description + " (" + Name + ")"; } } public static void UpdateFormats(string fmtPath, string genmacPath) { Format basefmt = null; Format parent = null; // Load base format. basefmt = AddFormatToDB(null, "base", false, DateTime.Now, "Migration", fmtPath, genmacPath); if (basefmt == null) return; // now loop through all files... If there is an _ in the name, it's a subformat // (for example, AEP_00.xml) skip it in main loop, it's handled for each format. DirectoryInfo di = new DirectoryInfo(fmtPath); //(@"c:\development\fmtall"); FileInfo[] fis = di.GetFiles("*.xml"); foreach (FileInfo fi in fis) { //if (fi.Name.ToUpper() == "WCN2ALL.XML"|| fi.Name.ToUpper() == "OHLPALL.XML") //{ bool issub = (fi.Name.IndexOf("_") > 0) ? true : false; if (!issub && fi.Name.ToLower() != "baseall.xml") { string fmtname = fi.Name.Substring(0, fi.Name.Length - 7); // remove the all.xml part of the filename. try { parent = AddFormatToDB(basefmt, fmtname, issub, DateTime.Now, "Migration", fmtPath, genmacPath); if (parent != null) { // now see if there are any subformats associated with this, if so // add them here... DirectoryInfo sdi = new DirectoryInfo(fmtPath); //("c:\\development\\fmtall"); FileInfo[] sfis = di.GetFiles(fmtname + "_*.xml"); foreach (FileInfo sfi in sfis) { string nm = sfi.Name.Substring(0, sfi.Name.Length - 7); Console.WriteLine("Processing {0}", sfi.Name); //frmMain.Status = string.Format("Processing Format {0}", sfi.Name); try { AddFormatToDB(parent, nm, true, DateTime.Now, "Migration",fmtPath,genmacPath); } catch (Exception ex) { //frmMain.AddError(ex, "LoadAllFormats() '{0}'", sfi.Name); Console.WriteLine("{0} - {1}", ex.GetType().Name, ex.Message); } } } } catch (Exception ex) { //frmMain.AddError(ex, "LoadAllFormats() '{0}'", fi.Name); Console.WriteLine("{0} - {1}", ex.GetType().Name, ex.Message); } } //} } OnFormatLoaded(null, new FormatEventArgs("Formats Updated")); } private static Dictionary _LookupFormats; public static Dictionary LookupFormats { get { if (_LookupFormats == null) { _LookupFormats = new Dictionary(); FormatInfoList allFormats = FormatInfoList.Get(); foreach (FormatInfo myFormat in allFormats) { _LookupFormats.Add(myFormat.Name, myFormat.FormatID); } } return _LookupFormats; } } private static Format AddFormatToDB(Format parent, string format, bool issub, DateTime Dts, string Userid, string fmtPath, string genmacPath) { string fmtdata = null; string genmacdata = null; XmlDocument xd = null; OnFormatLoaded(null, new FormatEventArgs("Loading "+format)); //string path = "c:\\development\\fmtall\\" + format + "all.xml"; string path = fmtPath + "\\" + format + "all.xml"; if (File.Exists(path)) { try { StreamReader srf = new StreamReader(path); xd = new XmlDocument(); xd.Load(srf); //xd.Load(path); fmtdata = xd.OuterXml; } catch (Exception ex) { //frmMain.AddError(ex, "AddFormatToDB('{0}','{1}')", parent.Name, path); return null; } } // Do we need genmac - only if non-subformat if (!issub) { //path = "c:\\development\\genmacall\\" + format + ".svg"; path = genmacPath + "\\" + format + ".svg"; if (File.Exists(path)) { try { StreamReader sr = new StreamReader(path); XmlDocument xdg = new XmlDocument(); xdg.Load(sr); //xdg.Load(path); genmacdata = xdg.OuterXml; } catch (Exception ex) { //frmMain.AddError(ex, "AddFormatToDB('{0}','{1}')", parent.Name, path); return null; } } } // Get the name & then create the record. if (Userid == null || Userid == "") Userid = "Migration"; string nmattr = "Default"; // use xpath to get name. if (parent != null) { XmlNode nmnode = xd.SelectSingleNode("//FormatData"); if (nmnode is XmlElement) { XmlElement xm = (XmlElement)nmnode; nmattr = xm.GetAttribute("Name"); } } // use the format name if base or non sub. If it's a sub, remove the "_". string fname = issub ? format.Replace("_", "") : format; Format rec = null; try { if (!LookupFormats.ContainsKey(fname)) { rec = Format.MakeFormat(parent, fname, nmattr, fmtdata, genmacdata, Dts, Userid); } else { rec = Format.Get(LookupFormats[fname]); rec.Data = fmtdata; rec.GenMac = genmacdata; rec = rec.Save(); } } catch (Exception ex) { //frmMain.AddError(ex, "AddFormatToDB-make format('{0}','{1}')", parent.Name, path); } return rec; } } public partial class FormatInfo : IFormatOrFormatInfo { public static bool HasLatestChanges() { if (!HasSeqTabFmtTabToken()) return false; return true; } private static bool HasSeqTabFmtTabToken() { using (FormatInfo fi = FormatInfo.Get("WCN2")) { XmlDocument xd = new XmlDocument(); xd.LoadXml(fi.Data); XmlNodeList xl = xd.SelectNodes("//FormatData/SectData/StepSectionData/SequentialTabFormat/SeqTabFmt/@TabToken");//"//DocStyle/Layout/@TopMargin"); if (xl.Count == 0) { System.Windows.Forms.MessageBox.Show("FormatData SeqTab/TabToken is missing", "Inconsistent Format Files", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); return false; } return true; } } public static FormatInfo Get(string name) { try { FormatInfo tmp = DataPortal.Fetch(new NameCriteria(name)); //AddToCache(tmp); if (tmp.ErrorMessage == "No Record Found") { tmp.Dispose(); // Clean-up FormatInfo tmp = null; } return tmp; } catch (Exception ex1) { Exception ex = ex1; while (ex.InnerException != null) ex = ex.InnerException; if (ex.Message.StartsWith("Could not find stored procedure")) { int formatID = 0; using (FormatInfoList fil = FormatInfoList.Get()) { foreach (FormatInfo fi in fil) { if (fi.Name == name) { formatID = fi.FormatID; break; } } } if (formatID != 0) return FormatInfo.Get(formatID); throw new DbCslaException("Format not found " + name, ex); } else throw new DbCslaException("Error on FormatInfo.Get By Name", ex); } } protected class NameCriteria { private string _Name; public string Name { get { return _Name; } } public NameCriteria(string name) { _Name = name; } } private void DataPortal_Fetch(NameCriteria criteria) { if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] FormatInfo.DataPortal_Fetch", GetHashCode()); try { using (SqlConnection cn = Database.VEPROMS_SqlConnection) { ApplicationContext.LocalContext["cn"] = cn; using (SqlCommand cm = cn.CreateCommand()) { cm.CommandType = CommandType.StoredProcedure; cm.CommandText = "getFormatByName"; cm.Parameters.AddWithValue("@Name", criteria.Name); using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) { if (!dr.Read()) { _ErrorMessage = "No Record Found"; return; } ReadData(dr); } } // removing of item only needed for local data portal if (ApplicationContext.ExecutionLocation == ApplicationContext.ExecutionLocations.Client) ApplicationContext.LocalContext.Remove("cn"); } } catch (Exception ex) { if (_MyLog.IsErrorEnabled) _MyLog.Error("FormatInfo.DataPortal_Fetch", ex); _ErrorMessage = ex.Message; throw new DbCslaException("FormatInfo.DataPortal_Fetch", ex); } } #region PlantFormat [NonSerialized] private PlantFormat _PlantFormat; public PlantFormat PlantFormat { get { return (_PlantFormat != null ? _PlantFormat : _PlantFormat = new PlantFormat(this)); } } #endregion public IFormatOrFormatInfo MyIParent { get { return MyParent; } } public override string ToString() { //return Name; //return PlantFormat.FormatData.Name; return FullName; } public string FullName { get { if (ParentID == 1) return Description + " (" + Name + ")"; return MyParent.Description + " - " + Description + " (" + Name + ")"; } } public StepSectionLayoutData MyStepSectionLayoutData { get { return PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData; } } public StepSectionPrintData MyStepSectionPrintData { get { return PlantFormat.FormatData.SectData.StepSectionData.StepSectionPrintData; } } } public partial class FormatInfoList { private static Csla.SortedBindingList _SortedFormatInfoList; public static Csla.SortedBindingList SortedFormatInfoList { get { if (_SortedFormatInfoList == null) { _SortedFormatInfoList = new SortedBindingList(FormatInfoList.Get()); _SortedFormatInfoList.ApplySort("FullName", ListSortDirection.Ascending); } return _SortedFormatInfoList; } } } }