From bfd97a31bf6b7dcc237bd27266dd8e0c982000d1 Mon Sep 17 00:00:00 2001 From: John Date: Wed, 16 Nov 2011 16:35:17 +0000 Subject: [PATCH] allow update of formats from PROMS interface --- .../Extension/FormatExt.cs | 187 ++++++++++++++++++ 1 file changed, 187 insertions(+) diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs index 76dd2631..3ca9c8c6 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/FormatExt.cs @@ -18,6 +18,7 @@ using System.IO; using System.Xml; using System.Drawing; using System.ComponentModel; +using System.Collections.Generic; namespace VEPROMS.CSLA.Library { @@ -29,6 +30,21 @@ namespace VEPROMS.CSLA.Library 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 @@ -37,6 +53,12 @@ namespace VEPROMS.CSLA.Library 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() { @@ -52,6 +74,171 @@ namespace VEPROMS.CSLA.Library 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 {