diff --git a/PROMS/DataLoader/ConfigInfo.cs b/PROMS/DataLoader/ConfigInfo.cs index 054d3986..c296f8c7 100644 --- a/PROMS/DataLoader/ConfigInfo.cs +++ b/PROMS/DataLoader/ConfigInfo.cs @@ -21,7 +21,7 @@ namespace DataLoader { xmldoc = new XmlDocument(); if (xml == null) - xmldoc.LoadXml(""); + xmldoc.LoadXml(""); else xmldoc.LoadXml(xml); } @@ -30,7 +30,7 @@ namespace DataLoader { xmldoc = new XmlDocument(); if (xml == null) - xmldoc.LoadXml(""); + xmldoc.LoadXml(""); else xmldoc.LoadXml(xml); AddItem(ename, aname.Replace(' ','_'), avalue); diff --git a/PROMS/DataLoader/CurSet.cs b/PROMS/DataLoader/CurSet.cs index c458037b..79529e92 100644 --- a/PROMS/DataLoader/CurSet.cs +++ b/PROMS/DataLoader/CurSet.cs @@ -15,7 +15,7 @@ using System.Text; using System.Windows.Forms; using System.Xml; using System.Xml.Serialization; -using Volian.CSLA.Library; +using VEPROMS.CSLA.Library; namespace Utils { @@ -26,10 +26,12 @@ namespace Utils { private int NUMCBTEXTYPE = 5; // number of changebar text types. public string PathName; + private string DefaultPlantFmt; public CurSet(string pname) { PathName = pname; + DefaultPlantFmt = null; } private string ReadTheString(BinaryReader bw, int maxlen) @@ -62,7 +64,7 @@ namespace Utils } catch (Exception e) { - DataLoader.frmLoader.log.ErrorFormat("Error migrating Curset.dat, error = {0}", e.Message); + DataLoader.frmLoader.log.ErrorFormat("Error migrating {0} Curset.dat, error = {1}", PathName, e.Message); return cfg; } @@ -83,6 +85,7 @@ namespace Utils cfg.Print_Pagination=(FolderConfig.PrintPagination) br.ReadSByte(); tmpstring = ReadTheString(br,4); // DefaultPrinter not used cfg.Format_Plant = ReadTheString(br,10); + DefaultPlantFmt = cfg.Format_Plant; tmpstring = ReadTheString(br, 128); // DefaultDestFName not used tmpsbyte = br.ReadSByte(); // DefaultPlotterType not used tmpsbyte = br.ReadSByte(); // DefaultPlotterPort not used @@ -95,16 +98,20 @@ namespace Utils tmpsbyte = br.ReadSByte(); // DontPrintStatusTree not used cfg.Print_UserFormat = ReadTheString(br, 10); tmpsbyte = br.ReadSByte(); - cfg.Print_DisableDuplex = tmpsbyte == 0 ? false : true; + //cfg.Print_Duplex = tmpsbyte == 0 ? true : false; br.Close(); } catch(Exception e) { if(br!=null) br.Close(); - DataLoader.frmLoader.log.ErrorFormat("Error migrating Curset.dat, error = {0}", e.Message); + DataLoader.frmLoader.log.ErrorFormat("Error migrating {0} Curset.dat, error = {1}", PathName, e.Message); } fs.Close(); return cfg; } + public string GetDefFmt() + { + return DefaultPlantFmt; + } } } diff --git a/PROMS/DataLoader/DocVersions.cs b/PROMS/DataLoader/DocVersions.cs index a2f7df0a..bffdd875 100644 --- a/PROMS/DataLoader/DocVersions.cs +++ b/PROMS/DataLoader/DocVersions.cs @@ -19,43 +19,57 @@ using System.Collections.Generic; using System.Xml; using System.IO; using System.Text; -using Volian.CSLA.Library; +using VEPROMS.CSLA.Library; namespace DataLoader { - public partial class frmLoader : Form + public partial class Loader { - private Int32 MigrateDocVersion(string pth) + public Item MigrateDocVersion(DocVersion docver) { - - Int32 iStructureID = 0; + string pth = docver.Title; // Open connection OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pth + ";Extended Properties=dBase III;Persist Security Info=False"); // load rofst (use it later).... + Database.LogInfoFormat("Before ROFST"); rofst = new ROFST(pth + "\\ro.fst"); // Migrate library documents + Database.LogInfoFormat("Before MigrateLibDocs"); MigrateLibDocs(cn, pth); // Initialize Dictionaries - dicTrans_StrDone = new Dictionary(); - dicTrans_StrIds = new Dictionary(); + dicTrans_ItemDone = new Dictionary(); + dicTrans_ItemIds = new Dictionary(); + + // Create a 'dummy' content record. This will be used for any transitions 'to' + // that don't exist when dbf is processed. At end, use this to see if there + // are missing transitions. + TransDummyCont = Content.MakeContent(null, "DUMMY CONTENT FOR TRANSITION MIGRATION", null, null, null); + // Process Procedures - iStructureID = MigrateProcedures(cn,pth); + Item itm = MigrateProcedures(cn,pth,docver); // Show any Missing Transtitons (i.e. Transitions which have not been processed) ShowMissingTransitions(); - log.InfoFormat("Completed Migration of {0}",pth); - MessageBox.Show("Completed Migration of " + pth); + log.InfoFormat("Completed Migration of {0}", pth); + MessageBox.Show("Completed Migration of " + pth); rofst.Close(); cn.Close(); - dicTrans_StrDone.Clear(); - dicTrans_StrDone = null; - return iStructureID; + dicTrans_ItemDone.Clear(); + dicTrans_ItemDone = null; + if (itm != null) + { + docver.MyItem = itm; + docver.Title = ""; + if (!docver.IsSavable) ErrorRpt.ErrorReport(docver); + docver.Save(); + } + return itm; } - private Volian.CSLA.Library.VersionTypeEnum DocVersionType(string s) + private VEPROMS.CSLA.Library.VersionTypeEnum DocVersionType(string s) { - if (s.EndsWith("approved")) return Volian.CSLA.Library.VersionTypeEnum.Approved; - if (s.EndsWith("chgsht")) return Volian.CSLA.Library.VersionTypeEnum.Revision; - if (s.EndsWith("tmpchg")) return Volian.CSLA.Library.VersionTypeEnum.Temporary; - return Volian.CSLA.Library.VersionTypeEnum.WorkingDraft; + if (s.EndsWith("approved")) return VEPROMS.CSLA.Library.VersionTypeEnum.Approved; + if (s.EndsWith("chgsht")) return VEPROMS.CSLA.Library.VersionTypeEnum.Revision; + if (s.EndsWith("tmpchg")) return VEPROMS.CSLA.Library.VersionTypeEnum.Temporary; + return VEPROMS.CSLA.Library.VersionTypeEnum.WorkingDraft; } } } \ No newline at end of file diff --git a/PROMS/DataLoader/Documents.cs b/PROMS/DataLoader/Documents.cs index cea9db33..3baa20e7 100644 --- a/PROMS/DataLoader/Documents.cs +++ b/PROMS/DataLoader/Documents.cs @@ -20,13 +20,13 @@ using System.Xml; using System.IO; using System.Text; using Volian.MSWord; -using Volian.CSLA.Library; +using VEPROMS.CSLA.Library; namespace DataLoader { - public partial class frmLoader : Form + public partial class Loader { - private void SaveSectionDocument(string fname, string stpseq, ref byte ctype, ref int cid) + private void SaveSectionDocument(string fname, string stpseq, ref int cid) { int docid = SaveWordDoc(fname); switch (docid) @@ -40,7 +40,6 @@ namespace DataLoader log.ErrorFormat("Could not complete save of word document, oldstepsequence = {0}", stpseq); break; default: - ctype = 2; cid = docid; break; } @@ -50,7 +49,7 @@ namespace DataLoader int docid = 0; if (System.IO.File.Exists(fname)) { - if (cbSaveDoc.Checked) + if (frmMain.cbSaveDocChecked) { WordDoc d = new WordDoc(fname); string temppath = Path.GetTempFileName(); @@ -62,10 +61,12 @@ namespace DataLoader } else { - if (cbSaveRTF.Checked) + if (frmMain.cbSaveRTFChecked) docid = SaveDoc(fname, title, ci); } } + else + log.ErrorFormat("Missing rtf file: {0}", fname); return docid; } private int SaveWordDoc(string temppath) @@ -81,8 +82,8 @@ namespace DataLoader byte[] ByteArray = new byte[len]; int nBytesRead = fs.Read(ByteArray, 0, (int)len); fs.Close(); - string t1 = (title == null || title == "") ? "notitle" : title; - Document doc = Document.MakeDocument(t1, ByteArray, null, ci == null ? null : ci.ToString()); + string t1 = (title == null || title == "") ? null : title; + Document doc = Document.MakeDocument(t1, ByteArray, null, ci == null ? null : ci.ToString(), DateTime.Now, "Migration"); return doc.DocID; } // for an io exception, keep trying @@ -110,5 +111,5 @@ namespace DataLoader } return done; } - } + } } \ No newline at end of file diff --git a/PROMS/DataLoader/ErrorReport.cs b/PROMS/DataLoader/ErrorReport.cs new file mode 100644 index 00000000..1f273629 --- /dev/null +++ b/PROMS/DataLoader/ErrorReport.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Windows.Forms; +using VEPROMS.CSLA.Library; +using Csla.Validation; + +namespace DataLoader +{ + public static class ErrorRpt + { + public static void ErrorReport(IVEHasBrokenRules mybr) + { + string smess = mybr.GetType().Name; + IVEHasBrokenRules hbr = mybr.HasBrokenRules; + if (hbr == null) smess += "\n Unknown Error"; + else + { + smess += "\n In object" + hbr.GetType().Name; + foreach (BrokenRule br in hbr.BrokenRules) + { + smess += "\n" + br.Property + " - " + br.Description; + } + } + MessageBox.Show(smess); + } + } +} diff --git a/PROMS/DataLoader/FolderTreeNode.cs b/PROMS/DataLoader/FolderTreeNode.cs index f65671e9..92775a14 100644 --- a/PROMS/DataLoader/FolderTreeNode.cs +++ b/PROMS/DataLoader/FolderTreeNode.cs @@ -10,7 +10,7 @@ using System; using System.Collections.Generic; using System.Text; -using Volian.CSLA.Library; +using VEPROMS.CSLA.Library; using Csla; using System.Windows.Forms; @@ -69,7 +69,7 @@ namespace DataLoader ftp = new FolderTreeNode(fi.ParentID.ToString()); dicMissing.Add(fi.ParentID, ftp); dicExists.Add(fi.ParentID, ftp); - if (fi.DocVersionCount > 0) + if (fi.FolderDocVersionCount > 0) { TreeNode tn = new TreeNode("dummy"); tn.Tag = "dummy"; @@ -87,7 +87,7 @@ namespace DataLoader else { ft = new FolderTreeNode(fi); - if (fi.DocVersionCount > 0) + if (fi.FolderDocVersionCount > 0) { TreeNode tn = new TreeNode("dummy"); tn.Tag = "dummy"; diff --git a/PROMS/DataLoader/Formats.cs b/PROMS/DataLoader/Formats.cs new file mode 100644 index 00000000..15f42fde --- /dev/null +++ b/PROMS/DataLoader/Formats.cs @@ -0,0 +1,145 @@ +// ======================================================================== +// 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.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.Data; +using System.Data.OleDb; +using System.Collections.Specialized; +using System.Collections.Generic; +using System.Xml; +using System.Xml.XPath; +using System.IO; +using System.Text; +using VEPROMS.CSLA.Library; + +namespace DataLoader +{ + public partial class Loader + { + + private Format AddFormatToDB(Format parent, string format, bool issub, DateTime Dts, string Userid) + { + string fmtdata = null; + string genmacdata = null; + XmlDocument xd = null; + + string path = "e:\\fmtall\\" + format + "all.xml"; + if (File.Exists(path)) + { + xd = new XmlDocument(); + xd.Load(path); + fmtdata = xd.OuterXml; + } + + // Do we need genmac - only if non-subformat + if (!issub) + { + path = "e:\\genmacall\\" + format + ".svg"; + if (File.Exists(path)) + { + XmlDocument xdg = new XmlDocument(); + xdg.Load(path); + genmacdata = xdg.OuterXml; + } + } + // 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 = Format.MakeFormat(parent, fname, nmattr, fmtdata, genmacdata, Dts, Userid); + return rec; + } + public void LoadAllFormats() + { + Format basefmt = null; + Format parent = null; + + // Load base format. + basefmt = AddFormatToDB(null, "base", false, DateTime.Now, "Migration"); + + // 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("e:\\fmtall"); + FileInfo[] fis = di.GetFiles("*.xml"); + + foreach (FileInfo fi in fis) + { + 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. + parent = AddFormatToDB(basefmt, fmtname, issub, DateTime.Now, "Migration"); + + // now see if there are any subformats associated with this, if so + // add them here... + DirectoryInfo sdi = new DirectoryInfo("e:\\fmtall"); + FileInfo[] sfis = di.GetFiles(fmtname+"_*.xml"); + foreach (FileInfo sfi in sfis) + { + string nm = sfi.Name.Substring(0, sfi.Name.Length-7); + Format subfmt = AddFormatToDB(parent, nm, true, DateTime.Now, "Migration"); + } + } + } + } + public Format GetFormat(string format) + { + Format parent = null; + Format rec = null; + + // get base + Format baseparent = Format.Get(1); + + // if there is no format - what should be done? maybe nothing. + if (format == null || format == "") return null; + + try + { + if (format.IndexOf(' ') > -1) // will have spaces if it's a user format + { + string part1 = format.Substring(0, format.IndexOf(' ')); + string part2 = format.Substring(format.LastIndexOf(' ') + 1, 2); + format = part1 + part2; + + // get the parent format's id (for example, AEP for AEP00). + parent = Format.GetExistingByParentID_Name(baseparent.FormatID, part1); + } + else + parent = baseparent; + + // see if the format has been added, if not go get it. + rec = Format.GetExistingByParentID_Name(parent.FormatID, format); + } + catch (Exception ex) + { + log.ErrorFormat("Error getting xml version of format {0}", ex.Message); + } + return rec; + } + + } +} \ No newline at end of file diff --git a/PROMS/DataLoader/GroupProp.cs b/PROMS/DataLoader/GroupProp.cs index 5e21bea1..3b467dc3 100644 --- a/PROMS/DataLoader/GroupProp.cs +++ b/PROMS/DataLoader/GroupProp.cs @@ -6,7 +6,7 @@ using System.Drawing; using System.Text; using System.Windows.Forms; using Csla; -using Volian.CSLA.Library; +using VEPROMS.CSLA.Library; namespace DataLoader { @@ -39,6 +39,7 @@ namespace DataLoader } private void btnSave_Click(object sender, EventArgs e) { + if (!grp.IsSavable) ErrorRpt.ErrorReport(grp); grp.Save(); } } diff --git a/PROMS/DataLoader/LibDoc.cs b/PROMS/DataLoader/LibDoc.cs index 770f7040..e770186b 100644 --- a/PROMS/DataLoader/LibDoc.cs +++ b/PROMS/DataLoader/LibDoc.cs @@ -26,28 +26,9 @@ using Org.Mentalis.Files; namespace DataLoader { - public partial class frmLoader : Form + public partial class Loader { - private void UpdateLabelsLibDocs(int incLib, int incUsages) - { - if (incLib == 0 && incUsages == 0)//Reset - { - lblTime.Tag = DateTime.Now; - pbProc.Value = 0; - pbSect.Value = 0; - } - else - { - pbProc.Value += incLib; - pbSect.Value += incUsages; - } - lblProc.Text = string.Format("{0} Lib Docs", pbProc.Value); - lblSection.Text = string.Format("{0} Usages", pbSect.Value); - lblStep.Text = ""; - TimeSpan ts = new TimeSpan(DateTime.Now.Ticks - ((DateTime)lblTime.Tag).Ticks); - lblTime.Text = string.Format("{0:D2}:{1:D2}:{2:D2} Elapsed", ts.Hours, ts.Minutes, ts.Seconds); - Application.DoEvents(); - } + private void MigrateLibDocs(OleDbConnection cn, string pth) { // Get all of the library documents - the first list has the entire list of files @@ -56,15 +37,15 @@ namespace DataLoader // will be migrated. After that, any remaining library documents will be added to // the section table without a reference from the structuretbl. Dictionary dicLibDocSect = new Dictionary(); - UpdateLabelsLibDocs(0, 0); + frmMain.UpdateLabelsLibDocs(0, 0); if (Directory.Exists(pth + "\\rtffiles")) { DirectoryInfo di = new DirectoryInfo(pth + "\\RTFFILES"); FileInfo[] fis = di.GetFiles("DOC_*.LIB"); - pbProc.Maximum = fis.Length; + frmMain.UpdateLabelsSetProc(fis.Length); foreach (FileInfo fi in fis) { - UpdateLabelsLibDocs(1, 0); + frmMain.UpdateLabelsLibDocs(1, 0); dicLibDocSect[fi.Name.Substring(0, 8).ToUpper()] = MigrateLibDoc(fi); } } @@ -72,10 +53,10 @@ namespace DataLoader OleDbDataAdapter da_doc = new OleDbDataAdapter("select [FROMNUMBER], [FROMSEQUEN], [TONUMBER] from [tran] where [TONUMBER] LIKE 'doc_%' or [TONUMBER] like 'DOC_%'", cn); DataSet ds_doc = new DataSet(); da_doc.Fill(ds_doc); - pbSect.Maximum = ds_doc.Tables[0].Rows.Count; + frmMain.UpdateLabelsSetSect(ds_doc.Tables[0].Rows.Count); foreach (DataRow dr_doc in ds_doc.Tables[0].Rows) { - UpdateLabelsLibDocs(0, 1); + frmMain.UpdateLabelsLibDocs(0, 1); string key = dr_doc["FROMNUMBER"].ToString().PadRight(20) + dr_doc["FROMSEQUEN"].ToString().PadRight(10); if (!dicLibDocSect.ContainsKey(dr_doc["TONUMBER"].ToString().ToUpper())) log.ErrorFormat("Error setting library document references: {0}", dr_doc["TONUMBER"].ToString().ToUpper()); @@ -150,4 +131,5 @@ namespace DataLoader return tmpRtfFileName; } } + } \ No newline at end of file diff --git a/PROMS/DataLoader/LoadConfig.cs b/PROMS/DataLoader/LoadConfig.cs index 627b8f07..2d3f7e2f 100644 --- a/PROMS/DataLoader/LoadConfig.cs +++ b/PROMS/DataLoader/LoadConfig.cs @@ -19,7 +19,7 @@ using System.Collections.Generic; using System.Xml; using System.IO; using System.Text; -using Volian.CSLA.Library; +using VEPROMS.CSLA.Library; namespace Config { @@ -177,6 +177,22 @@ namespace Config return null; } XmlDocument d = IniToXml(inipath); + // see if default image file extension was set, if not make it TIF + XmlNode gr = d.SelectSingleNode("//Graphics"); + XmlNode ext = null; + if (gr != null) ext = gr.SelectSingleNode("@defaultext"); + if (ext == null) + { + // if the graphics node doesn't exist, make it. + if (gr == null) + { + gr = d.CreateElement("Graphics"); + d.DocumentElement.AppendChild(gr); + } + XmlAttribute xa = d.CreateAttribute("defaultext"); + xa.Value = "TIF"; + gr.Attributes.Append(xa); + } return d; } diff --git a/PROMS/DataLoader/LoadTreeDB.cs b/PROMS/DataLoader/LoadTreeDB.cs index b1cefd92..712d8160 100644 --- a/PROMS/DataLoader/LoadTreeDB.cs +++ b/PROMS/DataLoader/LoadTreeDB.cs @@ -19,7 +19,7 @@ using System.Collections.Generic; using System.Xml; using System.IO; using System.Text; -using Volian.CSLA.Library; +using VEPROMS.CSLA.Library; using vlnObjectLibrary; using vlnServerLibrary; using Org.Mentalis.Files; @@ -28,7 +28,7 @@ using Utils; namespace DataLoader { - public partial class frmLoader : Form + public partial class Loader { private List vlnDataPathFolders() // was vlnDataPath { @@ -44,34 +44,44 @@ namespace DataLoader if (s1.Length > 0) { string[] s2 = s1.Split(",".ToCharArray()); - Folder fld = Folder.MakeFolder(sysFolder.FolderID, dbConn.DBID, s2[1], s2[0], null); + Folder fld = Folder.MakeFolder(sysFolder, dbConn, s2[1], s2[0], FolderName(s2[0]), null, null, DateTime.Now, "Migration"); dpf.Add(fld); } } return dpf; } - private int cslaObject(vlnObject vb, int dbid, int parentid, TreeNode tn) + private string FolderName(string Path) + { + int ind = Path.LastIndexOf("\\"); + if (ind == Path.Length-1 || ind < 0) return Path; + return Path.Substring(ind + 1); + } + private object cslaObject(vlnObject vb, Connection dbConn, Object parfld, TreeNode tn) { switch (vb.Type) { case "plant": case "set": - Folder fld = Folder.MakeFolder(parentid, dbid, vb.Title, vb.Path, string.Empty); + Folder fld = Folder.MakeFolder((Folder)parfld, dbConn, vb.Title, vb.Path, FolderName(vb.Path), null, null, DateTime.Now, "Migration"); tn.Tag = fld; - return fld.FolderID; + return (object) fld; case "version": ConfigFile cfg = new ConfigFile(); XmlDocument d = cfg.IniToXml(vb.Path + "\\proc.ini"); - FolderConfig fld_cfg = new FolderConfig(d==null?"":d.InnerXml); + //DocVersionConfig fld_cfg = new DocVersionConfig(d == null ? "" : d.InnerXml); + FolderConfig fld_cfg = (d==null)?null:new FolderConfig(d.InnerXml); // translate curset.dat into xml & add to d (somehow). string csfile = string.Format("{0}\\curset.dat",vb.Path); + string defPlantFmt = null; if (File.Exists(csfile)) { CurSet cs = new CurSet(csfile); try { + if (fld_cfg == null) fld_cfg = new FolderConfig(); fld_cfg = cs.Convert(fld_cfg); + defPlantFmt = cs.GetDefFmt(); } catch (Exception ex) { @@ -87,13 +97,21 @@ namespace DataLoader thetitle = myReader.ReadLine(); myReader.Close(); } - DocVersion v = DocVersion.MakeDocVersion(parentid, (int)DocVersionType(vb.Path.ToLower()), thetitle, vb.Path, 0, fld_cfg == null ? null : fld_cfg.ToString()); + Folder tmpfld = (Folder)parfld; + Format format = null; + if (defPlantFmt != null && defPlantFmt != "") + { + format = GetFormat(defPlantFmt); + } + else + format = Format.Get(1); + DocVersion v = DocVersion.MakeDocVersion(tmpfld, (int)DocVersionType(vb.Path.ToLower()), thetitle, vb.Path.ToLower(), null, format, fld_cfg == null ? null : fld_cfg.ToString(), DateTime.Now, "Migration"); tn.Tag = v; - return v.VersionID; + return (object) v; } return 0; } - private void MigrateChildren(vlnObject vb, vlnServer vs, int dbid, int parentid, TreeNode tn) + private void MigrateChildren(vlnObject vb, vlnServer vs, Connection dbConn, Object parent, TreeNode tn) { if (vb.Type != "version") { @@ -102,10 +120,12 @@ namespace DataLoader foreach (vlnObject vbc in lv) { TreeNode tnc = tn.Nodes.Add(vbc.Title); - int idc = cslaObject(vbc, dbid, parentid, tnc); - MigrateChildren(vbc, vs, dbid, idc, tnc); + object idc = cslaObject(vbc, dbConn, parent, tnc); + frmMain.Status = "Loading " + vbc.Title; + MigrateChildren(vbc, vs, dbConn, idc, tnc); } } + frmMain.Status = " "; } } } \ No newline at end of file diff --git a/PROMS/DataLoader/LoadTreeNh.cs b/PROMS/DataLoader/LoadTreeNh.cs index 83e44b49..b76e5b01 100644 --- a/PROMS/DataLoader/LoadTreeNh.cs +++ b/PROMS/DataLoader/LoadTreeNh.cs @@ -20,21 +20,21 @@ using System.Collections.Generic; using System.Xml; using System.IO; using System.Text; -using Volian.CSLA.Library; +using VEPROMS.CSLA.Library; namespace DataLoader { - public partial class frmLoader : Form + public partial class Loader { - private bool LoadChildren(FolderInfo fld, TreeNode tn) + public bool LoadChildren(FolderInfo fld, TreeNode tn) { tn.Nodes.Clear(); bool bLoaded = true; - foreach (DocVersionInfo fdv in fld.DocVersions) + foreach (DocVersionInfo fdv in fld.FolderDocVersions) { TreeNode tnc = tn.Nodes.Add(fdv.Title); tnc.Tag = fdv; - tnc.Checked = fdv.StructureID != 0; + tnc.Checked = fdv.ItemID != 0; bLoaded &= tnc.Checked; } return bLoaded; diff --git a/PROMS/DataLoader/Loader.cs b/PROMS/DataLoader/Loader.cs new file mode 100644 index 00000000..ef84e511 --- /dev/null +++ b/PROMS/DataLoader/Loader.cs @@ -0,0 +1,212 @@ +using System; +using System.Drawing; +using System.Collections; +using System.ComponentModel; +using System.Windows.Forms; +using System.Data; +using System.Data.OleDb; +using System.Collections.Specialized; +using System.Collections.Generic; +using System.Xml; +using System.IO; +using System.Text; +using Volian.MSWord; +using vlnObjectLibrary; +using vlnServerLibrary; +using VEPROMS.CSLA.Library; +using Config; + +namespace DataLoader +{ + public partial class Loader + { + #region ClassProperties + private int wms = 500; + private static int EDDATA = 0x01; + private static int PH = 0x02; + private static int TOC = 0x04; + private static int AUTOIND = 0x08; + private static int AUTOGEN = 0x40; + + private static int STP_MULT_CHGID = 1; + private static int STP_LNK_SEQ = 2; + private static int STP_OVR_TAB = 3; + + private string ProcFileName; + private string ProcNumber; + private ROFST rofst; + private int EditSectId; + private Dictionary dicLibDocRef; + + // have a few variables for storing the database id record & the system record. + public Connection dbConn; + public Folder sysFolder; + public AnnotationType CommentType; // this holds the annotationtype of comment for future use + public Document MissingDocument=null; // make a document if there is a missing rtf file + // any missing will use this. + private Content TransDummyCont; + // the following two dictionaries are used to handle migration of the + // transitions... dicTrans_ItemDone gets an entry for procnumber, sequence + // number and the new item id as a step or section is created (transitions + // can go to steps or sections). When a transition is encountered, check this + // dictionary to see if the step or section was migrated & use the item + // for the step or section if it was migrated. When a transition is migrated where + // the 'to' has not been migrated yet, check if an entry exists in dicTrans_ItemIds, + // if so, use the item listed here. If no entry exists in dicTrans_ItemIds, create + // an item table record and use the id as part of the 'to', and add an entry to + // dicTrans_ItemIds to flag that the record was already created. As migrating sections + // and steps, check this dicTrans_ItemIds to see if the item record has already + // been create, if so use it and remove it from the dicTrans_ItemIds dictionary, + // otherwise, create a new item record. + private Dictionary dicTrans_ItemDone; + private Dictionary dicTrans_ItemIds; + private Dictionary dicOldStepSequence; + private Dictionary dicNeedToLoad; + private log4net.ILog log; + #endregion + private frmLoader frmMain; + public Loader(log4net.ILog lg, frmLoader fm) + { + dicNeedToLoad = new Dictionary(); + log = lg; + frmMain = fm; + } + public bool LoadFolders() + { + try + { + frmMain.Status = "Make Connection"; + // make the initial database connection record, annotation types & top + // system folder. + dbConn = Connection.MakeConnection("Default", "Default", "Data Source=.\\SQLEXPRESS;Initial Catalog=VEPROMS;Integrated Security=True", 1, null, DateTime.Now, "Migration"); + ConfigFile cfg = new ConfigFile(); + + frmMain.Status = "Add AnnotationTypes"; + CommentType = AnnotationType.MakeAnnotationType("Comment", null); + + AnnotationType at = AnnotationType.MakeAnnotationType("Reference", null); + at = AnnotationType.MakeAnnotationType("Action Items", null); + + frmMain.Status = "Load veproms.ini"; + XmlDocument d = cfg.LoadSystemIni(); + + frmMain.Status = "Load All Formats"; + LoadAllFormats(); + + Format baseFormat = Format.Get(1); + sysFolder = Folder.MakeFolder(null, dbConn, "VEPROMS", "VEPROMS", "VEPROMS", baseFormat, d.InnerXml, DateTime.Now, "Migration"); + + // This is to test the vln Libraries + List lfldr = vlnDataPathFolders(); + + List dp2 = new List(); + foreach (Folder fldr in lfldr) + { + TreeNode tn = frmMain.TV.Nodes.Add(fldr.Name); + tn.Tag = fldr; + vlnObject vb = new vlnObject(null, "datapath", fldr.Name, fldr.Title); + dp2.Add(vb); + vlnServer vs = new vlnServer(); + frmMain.Status = "Loading " + fldr.Name; + MigrateChildren(vb, vs, dbConn, fldr, tn); + tn.Expand(); + } + } + catch (Exception ex) + { + log.ErrorFormat("Could not load data, error = {0}", ex.Message); + return false; + } + return true; + } + public void ClearData() + { + Database.PurgeData(); + } + public static string MakeDate(string src) + { + if (src.Trim() == "") return null; + int[] DateOffset ={ 4, 5, 47, 6, 7, 47, 0, 1, 2, 3 }; // 47 = '/' + StringBuilder datebuff = new StringBuilder(10); + for (int i = 0; i < DateOffset.Length; i++) + { + if (DateOffset[i] < 9) + datebuff.Append(src[DateOffset[i]]); + else + datebuff.Append(System.Convert.ToChar(DateOffset[i])); + } + return datebuff.ToString(); + } + public DateTime GetDTS(string date, string time) + { + // Set the date/time stamp. If there is no 'date', set the date + // to 1/1/2000 (this can be changed!). If there is not 'time', + // set the time to 0:0:0 (midnight). + + DateTime dts = DateTime.Now; + string month = "01"; + string day = "01"; + string year = "2000"; + string hour = ""; + string minute = ""; + try + { + if (date != null && date != "") + { + int indx1 = date.IndexOf("/"); + month = date.Substring(0, indx1); + int indx2 = date.IndexOf("/", indx1 + 1); + day = date.Substring(indx1 + 1, indx2 - indx1 - 1); + year = date.Substring(indx2 + 1, 4); + } + if (time == null || time == "") + { + hour = "0"; + minute = "0"; + } + else + { + + hour = time.Substring(0, 2); + int indxc = time.IndexOfAny(":A-".ToCharArray()); + if (indxc == time.Length - 1) + minute = time.Substring(2, 2); + else + minute = time.Substring(indxc + 1, time.Length - indxc - 1); + } + dts = new DateTime(System.Convert.ToInt32(year), System.Convert.ToInt32(month), System.Convert.ToInt32(day), + System.Convert.ToInt32(hour), System.Convert.ToInt32(minute), 0); + } + catch (Exception ex) + { + log.ErrorFormat("Bad Date/Time {0} {1}. Set to NOW.", date, time); + log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException); + //log.ErrorFormat(ex.StackTrace); + return dts; + } + return dts; + } + + public bool LoadSecurity(string VeSamPath) + { + Security sec = new Security(VeSamPath); + return sec.Migrate(); + } + private void WaitMS(int n) + { + DateTime dtw = DateTime.Now.AddMilliseconds(n); + while (DateTime.Now < dtw) + { + Application.DoEvents(); + } + } + private void Wait(int n) + { + DateTime dtw = DateTime.Now.AddSeconds(n); + while (DateTime.Now < dtw) + { + Application.DoEvents(); + } + } + } +} diff --git a/PROMS/DataLoader/PrivateProfile.cs b/PROMS/DataLoader/PrivateProfile.cs index 0310fce3..6828daf1 100644 --- a/PROMS/DataLoader/PrivateProfile.cs +++ b/PROMS/DataLoader/PrivateProfile.cs @@ -55,6 +55,7 @@ namespace Config // We now strip spaces before and after any Attribute that is written. sValue = sValue.Trim(' '); sName = sName.Replace(' ', '_'); + sName = sName.Replace("\\", "_slash_"); // Add an attribute if(sValue=="") @@ -82,6 +83,7 @@ namespace Config string elename = sSection.Substring(1, sSection.IndexOf("]") - 1); while(elename.IndexOf(' ')>-1) elename = elename.Remove(elename.IndexOf(' '),1); if (!ele.Contains(elename.ToLower())) elename = 'z' + elename; + elename = elename.Replace("\\", "_slash_"); // Add a section [name] XmlNode nd = AddNode(xParent, elename); //AddAttribute(nd,"name",sSection.Substring(1,sSection.IndexOf("]")-1)); @@ -145,7 +147,7 @@ namespace Config private void LoadXML() { string sLine; - ppXml.LoadXml("");// initialize ppXml + ppXml.LoadXml("");// initialize ppXml XmlNode xmlTop=ppXml.DocumentElement; XmlNode xmlNd=ppXml.DocumentElement; //XmlNode xmlNd_UC=ppXml.DocumentElement; @@ -180,7 +182,7 @@ namespace Config } } } - catch (Exception ex) + catch (Exception ex) { log.ErrorFormat("error parsing .INI file: {0} - Directory: {1}", ex.Message,ppName); } diff --git a/PROMS/DataLoader/Procedures.cs b/PROMS/DataLoader/Procedures.cs index c80ac4f9..e9721b47 100644 --- a/PROMS/DataLoader/Procedures.cs +++ b/PROMS/DataLoader/Procedures.cs @@ -19,13 +19,13 @@ using System.Collections.Generic; using System.Xml; using System.IO; using System.Text; -using Volian.CSLA.Library; +using VEPROMS.CSLA.Library; namespace DataLoader { - public partial class frmLoader : Form + public partial class Loader { - private Int32 MigrateProcedure(OleDbConnection cn, DataRow dr, Byte FromType, Int32 FromID, string pth) + private Item MigrateProcedure(OleDbConnection cn, DataRow dr, Item FromItem, string pth, DocVersion docver) { dicOldStepSequence = new Dictionary(); Stack SubSectLevels = new Stack(); // levels of subsections @@ -33,6 +33,7 @@ namespace DataLoader ProcNumber = dr["Number"].ToString(); DateTime dts = GetDTS(dr["Date"].ToString(), dr["Time"].ToString()); string userid = dr["initials"].ToString().Trim(); + if (userid == null || userid == "") userid = "Migration"; ConfigInfo ci = null; string tstr = dr["Proccode"].ToString(); @@ -41,63 +42,92 @@ namespace DataLoader ci = new ConfigInfo(null); ci.AddItem("Procedure", "ProcCode", tstr); } - tstr = dr["Series"].ToString(); - if (tstr != null && tstr != "") + + // check that there is a "Series" column, i.e. the 10th column, some datasets + // may not have it, for example vetuec\master.sl1 + if (dr.ItemArray.Length > 10) { - if (ci == null) ci = new ConfigInfo(null); - ci.AddItem("Procedure", "Series", tstr); + tstr = dr["Series"].ToString(); + if (tstr != null && tstr != "") + { + if (ci == null) ci = new ConfigInfo(null); + ci.AddItem("Procedure", "Series", tstr); + } } DataSet ds = new DataSet(); DataTable dt = null; - // See if there is PSI and if so, add it to the xml. - OleDbDataAdapter dapsi = new OleDbDataAdapter("select * from [" + dr["entry"] + "] where [STEP] is null", cn); - dapsi.Fill(ds); - dt = ds.Tables[0]; - - if (dt.Rows.Count > 0) + // check that file exists, i.e. if proc file doesn't exist but has entry in set + // file, flag error, but continue. + string fname = frmMain.tbSourceText +"\\"+ dr["entry"] + ".dbf"; + if (File.Exists(fname)) { - DataRow drpsi = dt.Rows[0]; - string psistr = drpsi["TEXTM"].ToString(); - if (psistr != null && psistr != "") - { - StringReader strrd = new StringReader(psistr); + // if the dbt is bad, fix it. + DbtOk(dr["entry"].ToString()); + // See if there is PSI and if so, add it to the xml. + OleDbDataAdapter dapsi = new OleDbDataAdapter("select * from [" + dr["entry"] + "] where [STEP] is null", cn); + try + { + dapsi.Fill(ds); + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + Application.Exit(); + } + dt = ds.Tables[0]; - string sLine; - if (ci == null) ci = new ConfigInfo(null); - while ((sLine = strrd.ReadLine()) != null) + if (dt.Rows.Count > 0) + { + DataRow drpsi = dt.Rows[0]; + string psistr = drpsi["TEXTM"].ToString(); + if (psistr != null && psistr != "") { - int indx = sLine.IndexOf(' '); - string nm = null; - string vl = null; - if (indx < 0) - nm = sLine; - else + StringReader strrd = new StringReader(psistr); + + string sLine; + if (ci == null) ci = new ConfigInfo(null); + while ((sLine = strrd.ReadLine()) != null) { - nm = sLine.Substring(0, indx); - vl = sLine.Substring(indx+1, sLine.Length-indx-1); + int indx = sLine.IndexOf(' '); + string nm = null; + string vl = null; + if (indx < 0) + nm = sLine; + else + { + nm = sLine.Substring(0, indx); + vl = sLine.Substring(indx + 1, sLine.Length - indx - 1); + } + ci.AddItem("PSI", nm, vl == null ? null : vl); } - ci.AddItem("PSI", nm, vl==null?null:vl); } } + dapsi.Dispose(); + } + else // log an error + { + log.ErrorFormat("Missing DBF: {0}", fname); } - dapsi.Dispose(); // Note, for now the data from the format field will be saved. Later, xpath, ?? EditSectId = 0; - - Byte FrType = 2; - Int32 FrID = 0;// str.Structureid; - Procedure prc = Procedure.MakeProcedure(TextConvert.ConvertText(dr["Number"].ToString()), TextConvert.ConvertText(dr["Title"].ToString()), ci==null?null:ci.ToString(), null, 0, 0, dts, userid); - Structure str = Structure.MakeStructure(FromType, FromID, 1, prc.ProcID, dts, userid); - UpdateLabels(1, 0, 0); - //OleDbDataAdapter da = new OleDbDataAdapter("select * from (select asc(mid(sequence,2,1)) as locb,* from [" + dr["entry"] + "] where sequence like ' %') order by locb asc", cn); + + // See if no caret convert... + Format docverFormat = docver.ActiveFormat; + bool do_cvt = !(docverFormat.PlantFormat.FormatData.XtraOptions("DontConvertCarrotToDelta")); + // pass in a 0 on MakeContent for type of procedure, i.e. procedure = 0 (on type field) + Content cont = Content.New(TextConvert.ConvertText(dr["Number"].ToString()), TextConvert.ConvertText(dr["Title"].ToString(),do_cvt), 0, null, ci == null ? null : ci.ToString(), dts, userid); + Item itm = Item.MakeItem(FromItem, cont, dts, userid); + frmMain.UpdateLabels(1, 0, 0); + Database.LogInfoFormat("Processing Procedure [{0}] - [{1}] - {2} - {3}", frmMain.pbProcValue, dr["entry"], cont.Number, cont.Text); + OleDbDataAdapter da = new OleDbDataAdapter("select * from [" + dr["entry"] + "] where sequence like ' %'", cn); try { LoadSection(ds, da, dr["entry"].ToString()); - da.SelectCommand.CommandText = "select * from [" + dr["entry"] + "] where step not like ' '"; + da.SelectCommand.CommandText = "select * from [" + dr["entry"] + "] where step not like ' ' and step not like '%~'"; da.Fill(ds, "Steps"); dt = ds.Tables["Steps"]; dt.CaseSensitive = true; @@ -119,71 +149,108 @@ namespace DataLoader log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException); log.Error(ex.StackTrace); } - + + // dicSecCount is dictionary to track number of subsections for the parent at a level + // dicSecID is the parent at that level Dictionary dicSecCount = new Dictionary(); - Dictionary dicSecID = new Dictionary(); - pbSect.Maximum = ds.Tables["Sections"].Rows.Count; - pbSect.Value = 0; + Dictionary dicSecParentItem = new Dictionary(); + frmMain.pbSectMaximum = ds.Tables["Sections"].Rows.Count; + frmMain.pbSectValue = 0; DataTable dtsect = ds.Tables["Sections"]; dtsect.CaseSensitive = true; DataView dv = new DataView(dtsect, "", "locb", DataViewRowState.CurrentRows); + Item SectItm = null; + int level = 0; + bool addpart = true; + Item parentitem = itm; foreach (DataRowView drw in dv) { - FrID = MigrateSection(prc, cn, drw, ds.Tables["Steps"], FrType, FrID, dicSecCount.Count > 0 ? true : false, pth); - if (prc.StructureID == 0) + SectItm = MigrateSection(parentitem, cont.Number, cn, drw, ds.Tables["Steps"], SectItm, dicSecCount.Count > 0 ? true : false, pth, docver); + + // if no children, add first child (cont) + if (addpart) { - prc.StructureID = FrID; - prc.Save(true); //force update + // ContentsParts.Add can use 'fromtype', item - fromtype here = 2, section + cont.ContentParts.Add(2,SectItm); + if (cont.MyZContent.OldStepSequence == null || cont.MyZContent.OldStepSequence == "") cont.MyZContent.OldStepSequence = ProcNumber; + if (!cont.IsSavable) ErrorRpt.ErrorReport(cont); + cont.Save(); + addpart = false; } - FrType = 0; - dicSecID[dicSecCount.Count] = FrID; - if (dicSecCount.Count > 0) + //FrType = 0; + dicSecParentItem[level] = SectItm; + if (level > 0) { - if ((dicSecCount[dicSecCount.Count]) == 1) - { - dicSecCount.Remove(dicSecCount.Count); - FrID = dicSecID[dicSecCount.Count]; - } + if ((dicSecCount[level]) == 1) + // shift up a level, i.e. give me the parent for the previous level + SectItm = dicSecParentItem[--level]; else - { - dicSecCount[dicSecCount.Count] = dicSecCount[dicSecCount.Count] - 1; - } + dicSecCount[level]--; // decrements number of sections to process } + // get number of subsections for this section int subSecs = drw["Sequence"].ToString().PadRight(12, ' ')[5] - 48; if (subSecs > 0) { - dicSecCount[dicSecCount.Count + 1] = subSecs; - FrType = 2; + dicSecCount[++level] = subSecs; + cont = SectItm.MyContent; + parentitem = SectItm; + addpart = true; + SectItm = null; // no previous sibling for the first child node. } } + // need section start if (EditSectId != 0) { - prc.StructureStart = EditSectId; - EditSectId = 0; - prc.Save(true); // force update + if (ci == null) ci = new ConfigInfo(null); + ci.AddItem("Procedure", "SectionStart", string.Format("{0}", EditSectId)); + itm.MyContent.Config = (ci == null) ? null : ci.ToString(); + if (!itm.IsSavable) ErrorRpt.ErrorReport(itm); + itm.Save(); } - return str.StructureID; + return itm; } - private Int32 MigrateProcedures(OleDbConnection cn, string pth) + private Item MigrateProcedures(OleDbConnection cn, string pth, DocVersion docver) { // Loop through Set File for each Procedure OleDbDataAdapter da = new OleDbDataAdapter("Select * from [set] where entry is not null", cn); DataSet ds = new DataSet(); da.Fill(ds); - Byte FrType = 1; - Int32 FrID = 0; - Int32 FirstID = 0; - pbProc.Maximum = ds.Tables[0].Rows.Count; - UpdateLabels(0, 0, 0); + Item FrItm = null; + Item FirstItm = null; + frmMain.pbProcMaximum = ds.Tables[0].Rows.Count; + frmMain.UpdateLabels(0, 0, 0); foreach (DataRow dr in ds.Tables[0].Rows) { - FrID = MigrateProcedure(cn, dr, FrType, FrID, pth); - if (FirstID == 0) FirstID = FrID; - FrType = 0; + FrItm = MigrateProcedure(cn, dr, FrItm, pth, docver); + if (FirstItm == null) FirstItm = FrItm; } da.Dispose(); - return FirstID; + return FirstItm; } + private void DbtOk(string fname) + { + string dbtname = frmMain.tbSourceText + "\\" + fname + ".dbt"; + if (File.Exists(dbtname)) + { + // check if dbt is at least 512, if not append 508 bytes. This is to fix + // a problem where dbts were created with only 4 bytes in the 16-bit code. + // if only 4 bytes, ado.net gives an "External table not in expected format" + // error + FileInfo fi = new FileInfo(dbtname); + if (fi.Length < 512) + { + FileStream fs = new FileStream(dbtname, FileMode.Open, FileAccess.Write, FileShare.ReadWrite); + BinaryWriter bw = new BinaryWriter(fs); + bw.Seek(0, SeekOrigin.End); + byte[] wrBytes = new byte[512 - fi.Length]; + for (int i = 0; i < 512 - fi.Length; i++) wrBytes[i] = 0; + wrBytes[4] = 0x02; + bw.Write(wrBytes); + bw.Close(); + } + fi = null; + } + } } } \ No newline at end of file diff --git a/PROMS/DataLoader/ROFST.cs b/PROMS/DataLoader/ROFST.cs index 4698cb21..637a12f3 100644 --- a/PROMS/DataLoader/ROFST.cs +++ b/PROMS/DataLoader/ROFST.cs @@ -139,7 +139,8 @@ namespace DataLoader tmp.children = tmpg.children; tmp.value = tmpg.value; tmp.appid = tmpg.appid; - tmp.roid = TableID.ToString("X4") + tmp.ID.ToString("X8"); + string tmpstr = TableID.ToString("X4") + tmp.ID.ToString("X8"); + tmp.roid = tmpstr.ToUpper(); dicRos.Add(tmp.roid, tmp); int j; for (j = i - 1; j >= 0 && tmp.ID < myGrp.children[j].ID; j--) diff --git a/PROMS/DataLoader/RefObjs.cs b/PROMS/DataLoader/RefObjs.cs index d3b865af..08395ecd 100644 --- a/PROMS/DataLoader/RefObjs.cs +++ b/PROMS/DataLoader/RefObjs.cs @@ -19,19 +19,13 @@ using System.Collections.Generic; using System.Xml; using System.IO; using System.Text; -using Volian.CSLA.Library; +using VEPROMS.CSLA.Library; namespace DataLoader { - public partial class frmLoader : Form + public partial class Loader { - private void AddRoUsage(int structId, string ROID) - { - RoUsage ro = RoUsage.MakeRoUsage(structId, ROID); - ro.StructureID = structId; - ro.ROID = ROID; - } - private string MigrateRos(OleDbConnection cn, string textm, string seqcvt, int structId) + private string MigrateRos(OleDbConnection cn, string textm, string seqcvt, Content content) { StringBuilder rotxt = new StringBuilder(); int instance = 0; @@ -39,7 +33,7 @@ namespace DataLoader DataTable dt = null; DataSet ds = null; OleDbDataAdapter da = null; - //TODO: ZSteps + string cmd = "SELECT * FROM USAGERO WHERE [NUMBER]='" + ProcNumber.Replace("'", "''") + "' AND [SEQUENCE] ='" + seqcvt + "' ORDER BY [INSTANCE]"; da = new OleDbDataAdapter(cmd, cn); // get usage records for the ROID. @@ -63,17 +57,26 @@ namespace DataLoader // found a token, add the roid & value into the string and // add an ro usage for it. rotxt.Append(textm.Substring(beg, tok - beg)); - DataRow dr = dt.Rows[instance]; - string ROID = dr["ROID"].ToString(); - AddRoUsage(structId, ROID); - rotxt.Append("\x15{{"); - rotxt.Append(ROID); - rotxt.Append("}{"); - - string val = rofst.GetRoValue(ROID.Substring(0, 12)); - rotxt.Append(val); - rotxt.Append("}}"); - instance++; + if (instance < dt.Rows.Count) + { + DataRow dr = dt.Rows[instance]; + string ROID = dr["ROID"].ToString(); + RoUsage ro = RoUsage.MakeRoUsage(content, ROID, null, DateTime.Now, "Migration"); + rotxt.Append("\x15\\v RO\\v0 "); + string val = rofst.GetRoValue(ROID.Substring(0, 12).ToUpper()); + rotxt.Append(val); + rotxt.Append("\\v #"); + rotxt.Append(ro.ROUsageID.ToString()); + rotxt.Append(" "); + rotxt.Append(ROID); + rotxt.Append("\\v0 "); + instance++; + } + else + { + log.Error("Error setting RO data in text field"); + log.ErrorFormat("proc number = {0}, oldstepsequence = {1}, instance = {2}", ProcNumber, seqcvt, instance); + } beg = tok + 1; if (beg > textm.Length) { @@ -89,4 +92,5 @@ namespace DataLoader return rotxt.ToString(); } } + } \ No newline at end of file diff --git a/PROMS/DataLoader/SecObj.cs b/PROMS/DataLoader/SecObj.cs index 16222344..e93c3ef4 100644 --- a/PROMS/DataLoader/SecObj.cs +++ b/PROMS/DataLoader/SecObj.cs @@ -15,7 +15,7 @@ using System.Collections.Generic; using System.Collections.Specialized; using System.Windows.Forms; using System.Text; -using Volian.CSLA.Library; +using VEPROMS.CSLA.Library; using Config; namespace DataLoader @@ -584,13 +584,15 @@ namespace DataLoader Role role = Role.New(); role.Name = defaultRole[i]; role.Title = defaultRoleTitle[i]; - role.Save(); + if (!role.IsSavable) ErrorRpt.ErrorReport(role); + role.Save(); Permission perm = Permission.New(); - perm.RID = role.RID; + perm.MyRole = role; perm.PermLevel = defaultPermData[i, 0]; perm.VersionType = defaultPermData[i, 1]; perm.PermValue = defaultPermData[i, 2]; - perm.Save(); + if (!perm.IsSavable) ErrorRpt.ErrorReport(perm); + perm.Save(); rdic.Add(role.RID, role); for (int j = 1; j < accessLevelSetup.Length; j++) { @@ -755,7 +757,7 @@ namespace DataLoader } catch (Exception ex) { - MessageBox.Show("here"); + MessageBox.Show("here: " + ex.Message); } if (!dicOldFolders.ContainsKey(pl.Path.ToUpper()+"\\"+ps.Path.ToUpper()))dicOldFolders.Add(pl.Path.ToUpper()+"\\"+ps.Path.ToUpper(), oldFolderCount++); string sName = FixName(ps.Name); @@ -880,12 +882,17 @@ namespace DataLoader } if (pathInData>0) { + if (!grp.IsSavable) ErrorRpt.ErrorReport(grp); + grp.Save(); + Folder tmpfld = Folder.Get(pathInData); foreach (int roleId in accessRights[folderId]) { - grp.GroupAssignments.Add(roleId, pathInData); + Role tmprole = Role.Get(roleId); + grp.GroupAssignments.Add(tmprole, tmpfld); } } } + if (!grp.IsSavable) ErrorRpt.ErrorReport(grp); grp.Save(); dicGroupIds[s] = grp.GID; } @@ -901,8 +908,10 @@ namespace DataLoader newusr.UserID = sUser; ConfigFile cfg = new ConfigFile(); cfg.LoadUsrCfg(newusr); - newusr.UserMemberships.Add(dicGroupIds[s]); - newusr.Save(); + Group tmpgrp = Group.Get(dicGroupIds[s]); + newusr.UserMemberships.Add(tmpgrp); + if (!newusr.IsSavable) ErrorRpt.ErrorReport(newusr); + newusr.Save(); } } diff --git a/PROMS/DataLoader/Sections.cs b/PROMS/DataLoader/Sections.cs index ae586969..d41a1a7b 100644 --- a/PROMS/DataLoader/Sections.cs +++ b/PROMS/DataLoader/Sections.cs @@ -17,55 +17,52 @@ using System.Data.OleDb; using System.Collections.Specialized; using System.Collections.Generic; using System.Xml; +using System.Xml.XPath; using System.IO; using System.Text; -using Volian.CSLA.Library; +using VEPROMS.CSLA.Library; + namespace DataLoader { - public partial class frmLoader : Form + public partial class Loader { - private Section AddSection(string Number, string Title, DateTime Dts, string Userid, ConfigInfo ci, string stpseq, string fmt, int libdocid, string pth) + private Dictionary dicOldToNew; + private Item AddSection(Item procitem, string Number, string Title, string SecType, DateTime Dts, string Userid, ConfigInfo ci, string stpseq, string fmt, int libdocid, string pth, Item FromItem, DocVersion docver) { - UpdateLabels(0, 1, 0); + frmMain.UpdateLabels(0, 1, 0); try { - string Format = null; + Format format = null; + + // Tie the section to format used, this will add the format xml if it doesn't exist in + // the database yet. Note that if there is no format at this level then none should + // be set so that the inheritance works correctly. + if (fmt != null && fmt != "") format = GetFormat(fmt); - // do the format field, an xpath for the format & last part is column - // mode if a step section. - try + // Find the docstyle based on the section type (step[1]) & the 'type' from the dbf + // record sectype[0]) + string dstyleindx = ((stpseq == null || stpseq == "") ? " " : stpseq.Substring(1, 1)) + ((SecType==null||SecType == "") ? " " : SecType.Substring(0, 1)); + int docstyleindx = GetDocStyleIndx(dstyleindx, format, procitem, docver); + + // tack on the column mode - add to config xml for node. + if (stpseq != null && stpseq.Substring(1, 1) == "0" && stpseq.Substring(5, 1) != " ") { - if (fmt != null && fmt != "") - { - if (fmt.IndexOf(' ') > -1) // will have spaces if it's a user format - { - string part1 = "/" + fmt.Substring(0, fmt.IndexOf(' ')) + "/"; - string part2 = "USER=" + fmt.Substring(fmt.LastIndexOf(' ') + 1, 2); - Format = part1 + part2; - } - else - Format = "/" + fmt; - } + if (ci == null) ci = new ConfigInfo(null); + ci.AddItem("Section", "ColumnMode", stpseq.Substring(5, 1)); } - catch (Exception ex) - { - log.ErrorFormat("Error getting format {0}", ex.Message); - } - // tack on the column mode: - if (stpseq != null && stpseq.Substring(1, 1) == "0" && stpseq.Substring(5, 1) != " ") Format = Format + "/COL=" + stpseq.Substring(5, 1); - + // find rtf file (or use the library document temp file) & read it into the field // acccontent - int Contentid=0; - byte ContentType=0; + int Documentid=0; + bool needEntry = false; if (libdocid != 0 || stpseq.Substring(1, 1) != "0") { + needEntry = true; string fname = null; if (libdocid != 0) { - Contentid = libdocid; - ContentType = 2; + Documentid = libdocid; } else { @@ -73,13 +70,53 @@ namespace DataLoader string thenum = num.ToString("d2"); fname = string.Format("{0}\\rtffiles\\{1}.A{2}", pth, ProcFileName, thenum); Application.DoEvents(); - SaveSectionDocument(fname, stpseq, ref ContentType, ref Contentid); + SaveSectionDocument(fname, stpseq, ref Documentid); + if (Documentid == 0) + { + if (MissingDocument==null) MissingDocument = Document.MakeDocument("MISSING FILE IN CONVERSION", null, null, null); + Documentid = MissingDocument.DocID; + } } } + if (Userid == null || Userid == "") Userid = "Migration"; - Section sec = Section.MakeSection(Number, Title,ContentType, Contentid, Format, ci.ToString(), Dts, Userid); - dicOldStepSequence[sec] = stpseq; - return sec; + // test for performance + Content cont = Content.New(Number, Title, 10000+docstyleindx, format, ci==null?null:ci.ToString(), Dts, Userid); + Entry entry = cont.MyEntry; + if (needEntry) + { + entry.MyDocument = Document.Get(Documentid); + entry.DTS = Dts; + entry.UserID = Userid; + //entry = Entry.MakeEntry(cont.ContentID, Document.Get(Documentid), Dts, Userid); + } + cont.MyZContent.OldStepSequence = ProcNumber + "|" + stpseq; + Item itm = null; + // the stpseq for section records may include a space & some other data. This + // was not part of what is stored in the transition records, so just look at + // the sequence before the space for section records. Then use the first character + // with a '0'. This is what's stored in the transition record, for example, if the + // section was BI, the transition record would have B0 (the reasoning is that + // for steps, this is what could be stored if there were enough steps. + int trindxsp = stpseq.IndexOf(' '); + string trstpseq = trindxsp < 0 ? stpseq : stpseq.Substring(0, 1)+ "0"; + if (dicTrans_ItemIds.ContainsKey(ProcNumber + "|" + trstpseq)) + { + itm = dicTrans_ItemIds[ProcNumber + "|" + trstpseq]; + itm.MyContent = cont; + itm.MyPrevious = FromItem; + itm.DTS = Dts; + itm.UserID = Userid; + if (!itm.IsSavable) ErrorRpt.ErrorReport(itm); + itm.Save(); + dicTrans_ItemIds.Remove(ProcNumber + "|" + trstpseq); + } + else + itm = Item.MakeItem(FromItem, cont, Dts, Userid); + + dicTrans_ItemDone[ProcNumber+"|"+trstpseq] = itm; + dicOldStepSequence[itm] = stpseq; + return itm; } catch (Exception ex) { @@ -90,11 +127,106 @@ namespace DataLoader } return null; } - private string SectTitle(OleDbConnection cn, DataRowView dr) + + private int LookupOldToNew(string lkup) + { + if (dicOldToNew == null) + { + dicOldToNew = new Dictionary(); + //dicOldToNew.Add("", 1); + dicOldToNew.Add("0", 1); + dicOldToNew.Add("0 ", 1); + dicOldToNew.Add("00", 1); + dicOldToNew.Add("01", 2); + dicOldToNew.Add("02", 4); + dicOldToNew.Add("03", 8); + dicOldToNew.Add("04", 16); + dicOldToNew.Add("I", 32); + dicOldToNew.Add("I ", 32); + dicOldToNew.Add("I0", 32); + dicOldToNew.Add("I1", 64); + dicOldToNew.Add("I2", 128); + dicOldToNew.Add("I3", 256); + dicOldToNew.Add("I4", 512); + dicOldToNew.Add("A", 1024); + dicOldToNew.Add("A ", 1024); + dicOldToNew.Add("A0", 1024); + dicOldToNew.Add("A1", 2048); + dicOldToNew.Add("A2", 4096); + dicOldToNew.Add("A3", 8192); + dicOldToNew.Add("A4", 16384); + dicOldToNew.Add("F", 32768); + dicOldToNew.Add("F ", 32768); + dicOldToNew.Add("F0", 32768); + dicOldToNew.Add("F1", 65536); + dicOldToNew.Add("F2", 131072); + dicOldToNew.Add("F3", 262144); + dicOldToNew.Add("F4", 524288); + dicOldToNew.Add("05", 1048576); + dicOldToNew.Add("06", 2097152); + dicOldToNew.Add("07", 4194304); + dicOldToNew.Add("08", 8388608); + dicOldToNew.Add("09", 16777216); + dicOldToNew.Add("0:", 33554432); + dicOldToNew.Add("0;", 67108864); + dicOldToNew.Add("0<", 134217728); + dicOldToNew.Add("0=", 268435456); + dicOldToNew.Add("0>", 536870912); + } + int retval = -1; + try + { + retval = dicOldToNew[lkup]; + } + catch (Exception ex) + { + Console.WriteLine(string.Format("Error in oldtonew {0}", lkup)); + Console.WriteLine(string.Format("Error = {0}", ex.Message)); + } + return retval; + } + private int GetDocStyleIndx(string dstyleindx, Format format, Item procitem, DocVersion docver) + { + // get the format, if format is set, use it, otherwise walk + if (format == null) + { + format = GetFormat(procitem, docver); + } + int docstyle = LookupOldToNew(dstyleindx); + foreach (DocStyle ds in format.PlantFormat.DocStyles.DocStyleList) + { + if ((ds.OldToNew & docstyle)>0) return (int)ds.Index; + } + return -1; + } + private Format GetFormat(Item procitem, DocVersion docver) + { + while (procitem.MyContent.MyFormat == null) + { + // find the first sibling + while (procitem.PreviousID != null) + procitem = procitem.MyPrevious; + if (procitem.ItemPartCount == 0) return GetFormat(docver); + // find the parent node + procitem = procitem.ItemParts[0].MyContent.ContentItems[0].MyItem; + } + return procitem.MyContent.MyFormat; + } + private Format GetFormat(DocVersion docver) + { + if (docver.MyFormat != null) return docver.MyFormat; + return GetFormat(docver.MyFolder); + } + private Format GetFormat(Folder folder) + { + if (folder.MyFormat != null) return folder.MyFormat; + return GetFormat(folder.MyParent); + } + private string SectTitle(OleDbConnection cn, DataRowView dr, bool UseMultiLineSectionTitle, bool ConvertCaret) { string tbuff = null; string menustr = null; - bool UseMultiLineSectionTitle = false; // TODO KBR: format flag + if (UseMultiLineSectionTitle) { bool titleInMemo = false; @@ -112,11 +244,11 @@ namespace DataLoader if (ds.Tables[0].Rows.Count == 1) { DataRow row = ds.Tables[0].Rows[0]; - tbuff = TextConvert.ConvertText(row["Textm"].ToString()); - if (tbuff != null || tbuff[0] != '\0') titleInMemo = true; + tbuff = TextConvert.ConvertText(row["Textm"].ToString(),ConvertCaret); + if (tbuff != null && tbuff != "") titleInMemo = true; } else // no long section title existed for this accessory page - tbuff = TextConvert.ConvertText(dr["Text"].ToString().PadRight(130, ' ').Substring(0, 75).TrimEnd()); + tbuff = TextConvert.ConvertText(dr["Text"].ToString().PadRight(130, ' ').Substring(0, 75).TrimEnd(), ConvertCaret); } catch (Exception ex) { @@ -127,45 +259,69 @@ namespace DataLoader // (see above comment for accessory pages to see the difference) else { - tbuff = TextConvert.ConvertText(dr["TextM"].ToString().Trim()); + tbuff = TextConvert.ConvertText(dr["TextM"].ToString().Trim(), ConvertCaret); } //// TESTS were run & it looked like that whitespace was removed before saving, //// so, put up a message box if find out otherwise.... - int nl = tbuff.IndexOf("\n"); - if (nl > -1) - MessageBox.Show("multiline text for section title, fix this!!"); + //int nl = tbuff.IndexOf("\n"); + //if (nl > -1) + // MessageBox.Show("multiline text for section title, fix this!!"); //// remove newlines & any other escape/whitespace chars. - //int nl = tbuff.IndexOf("\n"); - //if (nl > -1 || titleInMemo) - //{ + int nl = tbuff.IndexOf("\n"); + if (nl > -1 || titleInMemo) + { - // string tmpstr = tbuff.Replace("\r", ""); - // tmpstr = tmpstr.Replace("\t", ""); - // tmpstr = tmpstr.Replace("\n", " "); - // // get rid of multiple spaces - // while (tmpstr.IndexOf(" ") > -1) tmpstr = tmpstr.Replace(" ", " "); - // tbuff = tmpstr; - // if (tbuff.Substring(tbuff.Length-1, 1) == " ") tbuff = tbuff.Substring(0, tbuff.Length - 1); - //} - //menustr = tbuff; + string tmpstr = tbuff.Replace("\r", ""); + tmpstr = tmpstr.Replace("\t", ""); + tmpstr = tmpstr.Replace("\n", " "); + // get rid of multiple spaces + while (tmpstr.IndexOf(" ") > -1) tmpstr = tmpstr.Replace(" ", " "); + tbuff = tmpstr; + if (tbuff.Substring(tbuff.Length - 1, 1) == " ") tbuff = tbuff.Substring(0, tbuff.Length - 1); + menustr = tbuff; + } + else + { + menustr = TextConvert.ConvertText(dr["Text"].ToString().PadRight(80, ' ').Substring(0, 75).TrimEnd(), ConvertCaret); + } } else { // format does not include long section title - menustr = TextConvert.ConvertText(dr["Text"].ToString().PadRight(80, ' ').Substring(0, 75).TrimEnd()); + menustr = TextConvert.ConvertText(dr["Text"].ToString().PadRight(80, ' ').Substring(0, 75).TrimEnd(), ConvertCaret); } return menustr; } - private Int32 MigrateSection(Procedure prc, OleDbConnection cn, DataRowView dr, DataTable dt, Byte FromType, Int32 FromID, bool isSubSection, string pth) + private Item MigrateSection(Item procitem, string procnum, OleDbConnection cn, DataRowView dr, DataTable dt, Item FromItem, bool isSubSection, string pth, DocVersion docver) { Int32 thesectid = 0; - bool islibdoc = false; - //bool hasxml = false; + bool isautogen = false; + string stype = dr["type"].ToString(); string s = dr["text"].ToString().PadRight(130, ' '); string num = s.Substring(85, 20).TrimEnd(); string fmt = s.Substring(75, 10).TrimEnd(); - string title = SectTitle(cn, dr); + if (fmt == "") fmt = null; + bool ismulti = false; + bool conv_caret = true; + + // sectFormat is a local that represents the format to be used by this section. + // Note that if the format is set for this section, check it against what the inherited + // value would be (for example, what the format is for the set), if they are the same + // clear the format at the section level. + Format sectFormat = null; + Format docverFormat = docver.ActiveFormat; + if (fmt != null&& fmt !="") // Is there a long section title (from format flag) + sectFormat = GetFormat(fmt); + else // either from this format, or the plant. + sectFormat = docverFormat; + if (sectFormat != null) + { + ismulti = sectFormat.PlantFormat.FormatData.XtraOptions("UseMultiLineSectionTitle"); + conv_caret = !(sectFormat.PlantFormat.FormatData.XtraOptions("DontConvertCarrotToDelta")); + } + if (fmt != null && fmt != "") if (fmt == docverFormat.Name) fmt = null; + string title = SectTitle(cn, dr, ismulti, conv_caret); string init = dr["initials"].ToString().Trim(); string sequence = dr["CSequence"].ToString().PadRight(10); string step = dr["CStep"].ToString(); @@ -173,7 +329,8 @@ namespace DataLoader DateTime dts = GetDTS(dr["Date"].ToString(), dr["Time"].ToString()); - ConfigInfo ci = new ConfigInfo(null); + ConfigInfo ci = null; + // for steps sections... // Step Section Header Format: // A0 1X2S51 &Y @@ -199,37 +356,40 @@ namespace DataLoader // set pagination, continuous, separate. If blank, don't create attribute - uses format default. if (sequence.Substring(4, 1) == "T") { + if(ci==null) ci = new ConfigInfo(null); ci.AddItem("Section", "Pagination", "C"); - //hasxml = SetXml(xmldoc, topElement, "Section", "Pagination", "C"); } else if (sequence.Substring(4, 1) == "S") { + if (ci == null) ci = new ConfigInfo(null); ci.AddItem("Section", "Pagination", "S"); - //hasxml = SetXml(xmldoc, topElement, "Section", "Pagination", "S"); } // Step: linked to enhanced (!exist = N) if (sequence.Substring(7, 1) == "1") { + if (ci == null) ci = new ConfigInfo(null); ci.AddItem("Step", "LnkEnh", "Y"); - //hasxml = SetXml(xmldoc, topElement, "Step", "LnkEnh", "Y"); } char cbittst = sequence.PadRight(10)[8]; - if (cbittst == ' ') cbittst = '\0'; - - // determine if TOC element (!exist = N) - if ((cbittst & TOC) > 1) + if (cbittst == ' ') + cbittst = '\0'; + else { - ci.AddItem("Section", "TOC", "Y"); - //hasxml = SetXml(xmldoc, topElement, "Section", "TOC", "Y"); + // determine if TOC element (!exist = N) + if ((cbittst & TOC) > 1) + { + if (ci == null) ci = new ConfigInfo(null); + ci.AddItem("Section", "TOC", "Y"); + } + // determine if autogenerated section (!exist = N) + if ((cbittst & AUTOGEN) > 1) + { + isautogen = true; + if (ci == null) ci = new ConfigInfo(null); + ci.AddItem("Section", "AutoGen", "Y"); + } } - // determine if autogenerated section (!exist = N) - if ((cbittst & AUTOGEN) > 1) - { - ci.AddItem("Section", "AutoGen", "Y"); - //hasxml = SetXml(xmldoc, topElement, "Section", "AutoGen", "Y"); - } - // Here are subsection flags, i.e. the following are only set if this // is a subsection. bool didsub = false; @@ -238,29 +398,29 @@ namespace DataLoader // Subsection: editable (!exist = Y) if ((cbittst & EDDATA) > 0) { + if (ci == null) ci = new ConfigInfo(null); ci.AddItem("SubSection", "Edit", "N"); - //SetXml(xmldoc, topElement, "SubSection", "Edit", "N"); } // Subsection: print section headers (!exist = Y) if ((cbittst & PH) > 0) { + if (ci == null) ci = new ConfigInfo(null); didsub = true; ci.AddItem("SubSection", "PH", "N"); - //SetXml(xmldoc, topElement, "SubSection", "PH", "N"); } // Subsection: autoindent (!exist = Y) if ((cbittst & AUTOIND) > 0) { + if (ci == null) ci = new ConfigInfo(null); ci.AddItem("SubSection", "AutoIndent", "N"); - //SetXml(xmldoc, topElement, "SubSection", "AutoIndent", "N"); } } if (!didsub && sequence.Substring(4, 1) == "N") { + if (ci == null) ci = new ConfigInfo(null); ci.AddItem("SubSection", "PH", "N"); - //SetXml(xmldoc, topElement, "SubSection", "PH", "N"); } } else @@ -273,26 +433,29 @@ namespace DataLoader // || `--- Position within the procedure // |`----- Acc. page type (A,I, or F) // `------ Internal section number (starts at A) + if (ci == null) ci = new ConfigInfo(null); ci.AddItem("Section", "NumPages", sequence.Substring(3, 1)); - //hasxml = SetXml(xmldoc, topElement, "Section", "NumPages", sequence.Substring(3, 1)); - // see if it's a libdoc too.0 - string thekey = prc.Number.PadRight(20) + step.Substring(0, 1).PadRight(10); + // see if it's a libdoc too + string thekey = procnum.PadRight(20) + step.Substring(0, 1).PadRight(10); if (dicLibDocRef.ContainsKey(thekey)) { // if it is a library document, see if the section record has already been // saved. If it has, just use this section id, otherwise, create the // section record with info from the library document file. libDocid = dicLibDocRef[thekey]; - islibdoc = true; } } - Section sec = AddSection(num, title, dts, init, ci, step + sequence, fmt, libDocid, pth); - thesectid = sec.SectID; + Item secitem = AddSection(procitem, num, title, stype, dts, init, ci, step + sequence, fmt, libDocid, pth, FromItem, docver); + thesectid = secitem.ItemID; - // if this section has the original edit section flag (sequence[2]) save the id. - if (!islibdoc && step[1] == '0' && (sequence[2] == 'x' || sequence[2] == 'X')) + // if the editsectid hasn't been set yet, set it to this section id, i.e. the first + // one processed. Then if this section has the original edit section flag (sequence[2]) + // save the id. The first step is necessary in case there is no original edit section + // flag set, so that the first section is the default one to get opened in edit. + if (EditSectId==0)EditSectId = thesectid; + if (libDocid<1 && step[1] == '0' && (sequence[2] == 'x' || sequence[2] == 'X')) EditSectId = thesectid; // ContentType (2 in the following call) are: // 0 = structure, @@ -301,36 +464,36 @@ namespace DataLoader // 3 = step // 4 = branch - // fromtype values are (see steps.cs too) - // 0 = next of same type + // fromtype values are (see steps.cs too) // 1 = procedure, // 2 = section, // 3 = caution // 4 = note // 5 = RNO - // 6 = substep + // 6 = step // 7 = table - Structure str = AddStructure(FromType, FromID, 2, thesectid, step + sequence, dts, init); - // Process the Data Table - First look for High Level Steps - string sQry = string.Format("Step like '[{0}]%' and Sequence='S'", dr["Step"].ToString().Substring(0, 1)); - DataView dv = new DataView(dt, sQry, "StepNo", DataViewRowState.CurrentRows); - Byte FrType = 6; - Int32 FrID = 0; - pbStep.Maximum = dt.Rows.Count; - pbStep.Value = 0; - foreach (DataRowView drv in dv) + if (!isautogen) { - FrID = MigrateStep(cn, dt, drv, FrType, FrID); - if (sec.ContentID == 0) + // Process the Data Table - First look for High Level Steps + string sQry = string.Format("Step like '[{0}]%' and Sequence='S'", dr["Step"].ToString().Substring(0, 1)); + DataView dv = new DataView(dt, sQry, "StepNo", DataViewRowState.CurrentRows); + Item FrItem = null; + frmMain.pbStepMaximum = dt.Rows.Count; + frmMain.pbStepValue = 0; + foreach (DataRowView drv in dv) { - sec.ContentID = FrID; - sec.ContentType = 1; - sec.Save(true); + FrItem = MigrateStep(cn, dt, drv, FrItem, conv_caret); + if (secitem.MyContent.ContentParts.Count == 0) + { + // type 6 is step + secitem.MyContent.ContentParts.Add(6, FrItem); + if (!secitem.MyContent.IsSavable) ErrorRpt.ErrorReport(secitem.MyContent); + secitem.MyContent.Save(); + } } - FrType = 0; } - return str.StructureID; + return secitem; } private void LoadSection(DataSet ds, OleDbDataAdapter da, string FileName) { @@ -359,12 +522,12 @@ namespace DataLoader switch (ex.Message) { case "Index file not found.":// then delete inf file - fi = new FileInfo(tbSource.Text + "\\" + FileName + ".inf"); + fi = new FileInfo(frmMain.tbSourceText + "\\" + FileName + ".inf"); fi.Delete(); LoadSection(ds, da, FileName);// Try Again break; case "External table is not in the expected format.": // then pad dbt file with 128 zeros. - fi = new FileInfo(tbSource.Text + "\\" + FileName + ".dbt"); + fi = new FileInfo(frmMain.tbSourceText + "\\" + FileName + ".dbt"); FileStream fs = fi.OpenWrite(); fs.Position = fs.Length; byte[] buf = new byte[128]; diff --git a/PROMS/DataLoader/Steps.cs b/PROMS/DataLoader/Steps.cs index 948c562c..dce9d1c4 100644 --- a/PROMS/DataLoader/Steps.cs +++ b/PROMS/DataLoader/Steps.cs @@ -10,19 +10,21 @@ using System.Collections.Generic; using System.Xml; using System.IO; using System.Text; -using Volian.CSLA.Library; +using VEPROMS.CSLA.Library; namespace DataLoader { - public partial class frmLoader : Form + public partial class Loader { - private Step AddStep(OleDbConnection cn, string StepType, string Textm, string Recid, string stpseq, string structtype, int structid, DateTime dts, string userid) + private Item AddStep(OleDbConnection cn, string StepType, string Textm, string Recid, string stpseq, string structtype, Item FromItem, DateTime dts, string userid, bool conv_caret) { - Step stp = null; - UpdateLabels(0, 0, 1); - bool hasxml = false; - ConfigInfo ci = new ConfigInfo(null); + Content content = null; + Item item = null; + + frmMain.UpdateLabels(0, 0, 1); + ConfigInfo ci = null; string stptext = null; + if (userid == null || userid == "") userid = "Migration"; int tok = -1; char[] chrarr = { '\x1', '\x2', '\x3', '\x5' }; try @@ -31,9 +33,9 @@ namespace DataLoader // with it with a 'token' as a separator (see below). tok = Textm.IndexOfAny(chrarr); if (tok < 0) - stptext = TextConvert.ConvertText(Textm); + stptext = TextConvert.ConvertText(Textm, conv_caret); else - stptext = TextConvert.ConvertText(Textm.Substring(0, tok)); + stptext = TextConvert.ConvertText(Textm.Substring(0, tok), conv_caret); string seqcvt = TextConvert.ConvertSeq(stpseq); @@ -44,9 +46,30 @@ namespace DataLoader log.Error("Found a old style figure!"); log.ErrorFormat("oldstepsequence = {0}", stpseq); } + string newstptyp = null; + bool ManualPagebreak = false; + char cbittst = StepType.PadRight(2)[0]; + if (cbittst != ' ' && (cbittst & 0x80) > 1) + { + ManualPagebreak = true; + if (ci==null) ci = new ConfigInfo(null); + ci.AddItem("Step", "ManualPagebreak", "True"); + newstptyp = StepType.Substring(1, 1); + } + + // Need the content record for the RO & transitions. + //content = Content.MakeContent(null, stptext, 20000 + int.Parse(newstptyp!=null?newstptyp:StepType),null, ManualPagebreak?ci.ToString():null, dts, userid); + content = Content.New(null, stptext, 20000 + int.Parse(newstptyp != null ? newstptyp : StepType), null, ManualPagebreak ? ci.ToString() : null, dts, userid); + content.MyZContent.OldStepSequence = ProcNumber + "|" + stpseq; + // Before we save it, handle RO & Transitions tokens. int tokrt = Textm.IndexOf('\x15'); - if (tokrt > -1) stptext = MigrateRos(cn, stptext, seqcvt, structid); + bool txtdirty = false; + if (tokrt > -1) + { + txtdirty = true; + stptext = MigrateRos(cn, stptext, seqcvt, content); + } // 16-bit code has the following two defines. // #define TransitionMarker 0xC2 @@ -55,10 +78,34 @@ namespace DataLoader // use the unicode chars. char[] chrrotrn = { '\x252C', '\x2566' }; tokrt = Textm.IndexOfAny(chrrotrn); - if (tokrt > -1) stptext = MigrateTrans(cn, stptext, seqcvt, structid); - TextM tm = TextM.MakeTextM(stptext); - stp = Step.MakeStep(StepType, tm.TextMID, null, dts, userid); - dicOldStepSequence[stp] = seqcvt; + if (tokrt > -1) + { + txtdirty = true; + stptext = MigrateTrans(cn, stptext, seqcvt, content); + } + if (txtdirty) + { + content.Text = stptext; + //content.Save(); + } + if (!content.IsSavable) ErrorRpt.ErrorReport(content); + content.Save(); + // check if already created thru new during transition migration... + if (dicTrans_ItemIds.ContainsKey(ProcNumber + "|" + seqcvt)) + { + item = dicTrans_ItemIds[ProcNumber + "|" + seqcvt]; + item.MyPrevious = FromItem; + item.MyContent = content; + item.DTS = dts; + item.UserID = userid; + if (!item.IsSavable) ErrorRpt.ErrorReport(item); + item.Save(); + dicTrans_ItemIds.Remove(ProcNumber + "|" + seqcvt); + } + else + item = Item.MakeItem(FromItem, content, content.DTS, content.UserID); + dicTrans_ItemDone[ProcNumber + "|" + seqcvt] = item; + dicOldStepSequence[content] = seqcvt; } catch (Exception ex) { @@ -66,7 +113,7 @@ namespace DataLoader log.ErrorFormat("oldstepsequence = {0}", stpseq); log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException); log.ErrorFormat(ex.StackTrace); - stp = null; + item = null; } // now add on any support pieces of text associated with the step. @@ -77,53 +124,61 @@ namespace DataLoader // '\3\3'override tab // '\5' continuous action summary flag + bool recdirty = false; try { while (tok >= 0 && tok != Textm.Length) { int nxttok = Textm.IndexOfAny(chrarr, tok + 1); + char chr = Textm[tok]; int typ = 0; - if (chr == '\x1') - typ = STP_COMMENT; - else if (chr == '\x2') - typ = STP_MULT_CHGID; - else if (chr == '\x3') - { - typ = STP_LNK_SEQ; - // check for a double \3 - override tab. - if (tok + 1 < Textm.Length) - { - char nxttokchr = Textm[tok + 1]; - if (nxttokchr == '\x3') - { - typ = STP_OVR_TAB; - tok++; // this was a double \3, get past 1st one. - nxttok = Textm.IndexOfAny(chrarr, tok + 1); - } - } - } - else if (chr == '\x5') - { - ci.AddItem("Step", "ContActSum", "True"); - //hasxml = SetXml(xmldoc, topElement, "Step", "ContActSum", "True"); - if (nxttok < 0) nxttok = Textm.Length; - } + if (chr == '\x1') + { + // add the comment to annotation table. Set type to comment. + if (nxttok < 0) nxttok = Textm.Length; + Annotation annot = Annotation.MakeAnnotation(item, CommentType, null, Textm.Substring(tok + 1, nxttok - tok - 1), null, dts, userid); + } + else if (chr == '\x2') + typ = STP_MULT_CHGID; + else if (chr == '\x3') + { + typ = STP_LNK_SEQ; + // check for a double \3 - override tab. + if (tok + 1 < Textm.Length) + { + char nxttokchr = Textm[tok + 1]; + if (nxttokchr == '\x3') + { + typ = STP_OVR_TAB; + tok++; // this was a double \3, get past 1st one. + nxttok = Textm.IndexOfAny(chrarr, tok + 1); + } + } + } + else if (chr == '\x5') + { + recdirty = true; + if (ci == null) ci = new ConfigInfo(null); + ci.AddItem("Step", "ContActSum", "True"); + if (nxttok < 0) nxttok = Textm.Length; + } - // if not xml, i.e. chr=='\x5', make a textm element - if (chr != '\x5') + // if not comment or ContActSum (xml) make a steptext element + if (typ == STP_MULT_CHGID || typ == STP_LNK_SEQ || typ == STP_OVR_TAB) { if (nxttok < 0) nxttok = Textm.Length; // if this is a sequence number - may need to convert hi-end chars - string str = null; + string strn = null; if (typ == STP_LNK_SEQ) - str = TextConvert.ConvertSeq(Textm.Substring(tok + 1, nxttok - tok - 1)); + strn = TextConvert.ConvertSeq(Textm.Substring(tok + 1, nxttok - tok - 1)); else - str = Textm.Substring(tok + 1, nxttok - tok - 1); - //StepText stptxt = StepText.MakeStepText(typ, str, true); - //stptxt.ItemType = typ; - //stptxt.Textm = str; - //stp.StepStepTexts.Add( + strn = Textm.Substring(tok + 1, nxttok - tok - 1); + if (strn != null && strn != "") + { + recdirty = true; + content.ContentDetails.Add(typ, strn); + } } tok = nxttok; } @@ -131,9 +186,10 @@ namespace DataLoader // also see if a check-off needs added. if (Recid[0] != '0') { + recdirty = true; string chkindx = Recid[0].ToString(); + if (ci == null) ci = new ConfigInfo(null); ci.AddItem("Step", "CheckOffIndex", chkindx); - //hasxml = SetXml(xmldoc, topElement, "Step", "CheckOffIndex", chkindx); } // here's where it knows if it's a linked step (or in processstep) @@ -143,15 +199,12 @@ namespace DataLoader } // if checkoffs or the continuous action summary flag, save the xml. - if (hasxml) + if (recdirty) { - stp.Config = ci.ToString(); - stp.Save(true); + if (ci != null) content.Config = ci.ToString(); + if (!content.IsSavable) ErrorRpt.ErrorReport(content); + content.Save(); } - // if this has associated steptext, such as tab override or comment, - // save it. - //else if (stp.StepStepTexts.Count > 0) - // stp.Save(true); } catch (Exception ex) { @@ -160,29 +213,8 @@ namespace DataLoader log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException); log.ErrorFormat(ex.StackTrace); } - return stp; + return item; } - - // private void ProcessSubStep(DataTable dt,DataRowView drv,StepTbl stpP) - // { - // // TODO: Need logic for TextM Support - // StepTbl stp = AddStep(stpP,drv["Type"].ToString(),drv["Text"].ToString(),drv["Step"].ToString()+drv["sequence"].ToString()); - // // TODO: Logic to add Sub-steps - // string sPre = drv["Sequence"].ToString(); - // ProcessSubSteps(dt,drv["Step"].ToString(),sPre+"[*!]?",stp);// Cautions and Notes - // ProcessSubSteps(dt,drv["Step"].ToString(),sPre+"$",stp);// RNOs - // ProcessSubSteps(dt,drv["Step"].ToString(),sPre+"?",stp);// Substeps - // //ProcessSubSteps(dt,drv["Step"],"S_",stp);// Tables - // } - // private void ProcessSubSteps(DataTable dt,string step,string lookfor,StepTbl stp) - // { - // DataView dv = new DataView(dt,"Step='" + step + "' and Sequence like'" + lookfor + "'", - // "sequence",DataViewRowState.OriginalRows); - // foreach(DataRowView drv in dv) - // { - // ProcessSubStep(dt,drv,stp); - // } - // } private string GetParent(string s) { string retval = "S"; @@ -219,30 +251,30 @@ namespace DataLoader } return retval; } - private Int32 MigrateStep(OleDbConnection cn, DataTable dt, DataRowView drv, Byte FromType, Int32 FromID) + private Item MigrateStep(OleDbConnection cn, DataTable dt, DataRowView drv, Item FromItem, bool conv_caret) { try { - int tmpid = 1; - - // Do the structure record first because usages from the step require a structure - // id. string sType = GetStructType(drv["CSequence"].ToString()); - // Structures str = AddStructure(FromType, FromID, (byte)(3 + ("CNRST".IndexOf(sType))), tmpid, drv["CStep"].ToString() + drv["CSequence"].ToString(), - Structure str = AddStructure(FromType, FromID, 3, tmpid, drv["CStep"].ToString() + drv["CSequence"].ToString(), - GetDTS(drv["Date"].ToString(), drv["Time"].ToString()), drv["Initials"].ToString()); - Step stp = AddStep(cn, drv["Type"].ToString() - , (drv["textm"] == DBNull.Value ? drv["Text"].ToString() : drv["Textm"].ToString()) - , drv["Recid"].ToString(), drv["CStep"].ToString() + drv["CSequence"].ToString(), "S", str.StructureID - , GetDTS(drv["Date"].ToString(), drv["Time"].ToString()), drv["Initials"].ToString()); - str.ContentID = stp.StepID; - str.Save(true); - Dictionary dicStep = new Dictionary(); - dicStep[drv["CSequence"].ToString()] = stp; - Dictionary> dicStruct = new Dictionary>(); - Dictionary dicBase = new Dictionary(); + Item item = AddStep(cn, drv["Type"].ToString() + , (drv["textm"] == DBNull.Value ? drv["Text"].ToString() : drv["Textm"].ToString()) + , drv["Recid"].ToString(), drv["CStep"].ToString() + drv["CSequence"].ToString(), "S", FromItem // was str + , GetDTS(drv["Date"].ToString(), drv["Time"].ToString()), drv["Initials"].ToString(), conv_caret); + //Content cont = Content.MakeContent(null,(drv["textm"] == DBNull.Value ? drv["Text"].ToString() : drv["Textm"].ToString()),drv["Type"]+20000,null,null, + // GetDTS(drv["Date"].ToString(), drv["Time"].ToString()), drv["Initials"].ToString()); + //Item item = Item.MakeItem(FromItem, cont, cont.DTS, cont.UserID); + //Structure str = AddStructure(FromType, FromID, 3, tmpid, drv["CStep"].ToString() + drv["CSequence"].ToString(), + // GetDTS(drv["Date"].ToString(), drv["Time"].ToString()), drv["Initials"].ToString()); + //Step stp = AddStep(cn, drv["Type"].ToString() + // , (drv["textm"] == DBNull.Value ? drv["Text"].ToString() : drv["Textm"].ToString()) + // , drv["Recid"].ToString(), drv["CStep"].ToString() + drv["CSequence"].ToString(), "S", str + // , GetDTS(drv["Date"].ToString(), drv["Time"].ToString()), drv["Initials"].ToString()); + Dictionary dicStep = new Dictionary(); + dicStep[drv["CSequence"].ToString()] = item; + Dictionary> dicStruct = new Dictionary>(); + Dictionary dicBase = new Dictionary(); dicStruct[drv["CSequence"].ToString()] = dicBase; - dicBase[""] = str.StructureID; + dicBase[""] = item; // Logic to add Sub-steps string sQry = "CStep = '" + drv["CStep"].ToString() + "' and CSequence <> 'S'"; // sort order - for sections use currentrows. @@ -250,8 +282,8 @@ namespace DataLoader //dataGrid1.DataSource=dv; //Loop through DataView and add Steps one at a time //Console.WriteLine("={0}",drv["Step"]); - Byte FrType = 0; - Int32 FrID = str.StructureID; + int FrType = 0; // type of relationship (not type of step) + Item FrItem = item; foreach (DataRowView drvs in dv) { //Console.WriteLine(">{0}",drvs["CStep"]); @@ -259,49 +291,53 @@ namespace DataLoader string sParent = GetParent(drvs["CSequence"].ToString()); if (dicStep.ContainsKey(sParent)) { - Step stpp = dicStep[sParent]; + Item itemp = dicStep[sParent]; sType = GetStructType(drvs["CSequence"].ToString()); - Dictionary dicStr = dicStruct[sParent]; - if (dicStr.ContainsKey(sType)) + Dictionary dicStr = dicStruct[sParent]; + // check if a step type of 'sType' exists to see if child/sibling + //Content contc = Content.MakeContent(null,(drvs["textm"] == DBNull.Value ? drvs["Text"].ToString() : drvs["Textm"].ToString()),drvs["Type"]+20000,null,null, + // GetDTS(drvs["Date"].ToString(), drvs["Time"].ToString()), drvs["Initials"].ToString())); + Item itemc = null; + if (dicStr.ContainsKey(sType)) // next sibling { - FrID = (Int32)dicStr[sType]; + FrItem = dicStr[sType]; FrType = 0; } - else + else // child of a node { - FrID = (Int32)dicStr[""]; - FrType = (byte)(3 + ("CNRST".IndexOf(sType))); + FrItem = null; + FrType = (3 + ("CNRST".IndexOf(sType))); } - Structure str1 = AddStructure(FrType, FrID, 3, tmpid++, drvs["CStep"].ToString() + drvs["CSequence"].ToString(), - GetDTS(drvs["Date"].ToString(), drvs["Time"].ToString()), drvs["Initials"].ToString()); - Step stpc = AddStep(cn, drvs["Type"].ToString() - , (drvs["textm"] == DBNull.Value ? drvs["Text"].ToString() : drvs["Textm"].ToString()) - , drv["Recid"].ToString(), drvs["CStep"].ToString() + drvs["CSequence"].ToString(), GetStructType(drvs["sequence"].ToString()), str1.StructureID - , GetDTS(drvs["Date"].ToString(), drvs["Time"].ToString()), drvs["Initials"].ToString()); - str1.ContentID = stpc.StepID; - str1.Save(true); - dicStep[drvs["CSequence"].ToString()] = stpc; - - dicBase = new Dictionary(); - dicStruct[drvs["CSequence"].ToString()] = dicBase; - dicBase[""] = str1.StructureID; - dicStr[sType] = str1.StructureID; + itemc = AddStep(cn, drvs["Type"].ToString() + , (drvs["textm"] == DBNull.Value ? drvs["Text"].ToString() : drvs["Textm"].ToString()) + , drv["Recid"].ToString(), drvs["CStep"].ToString() + drvs["CSequence"].ToString() + , GetStructType(drvs["sequence"].ToString()), FrItem + , GetDTS(drvs["Date"].ToString(), drvs["Time"].ToString()), drvs["Initials"].ToString(), conv_caret); + + if (FrType > 0 ) + { + itemp.MyContent.ContentParts.Add(FrType, itemc); + if (!itemp.MyContent.IsSavable) ErrorRpt.ErrorReport(itemp.MyContent); + itemp.MyContent.Save(); + } + dicStr[sType] = itemc; + dicStruct[drvs["CSequence"].ToString()] = new Dictionary(); + dicStep[drvs["CSequence"].ToString()] = itemc; } else { log.ErrorFormat("Parent {0} Could not be found for {1}", sParent, drvs["sequence"].ToString()); } } - return str.StructureID; + return item; } catch (Exception ex) { log.Error("PROCESS STEP"); log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException); log.ErrorFormat(ex.StackTrace); - return 0; + return null; } - //return 0; } } } \ No newline at end of file diff --git a/PROMS/DataLoader/TextConvert.cs b/PROMS/DataLoader/TextConvert.cs index 09d1c533..68099dfb 100644 --- a/PROMS/DataLoader/TextConvert.cs +++ b/PROMS/DataLoader/TextConvert.cs @@ -88,6 +88,8 @@ namespace DataLoader dicChar[8734] = 8857; dicChar[7] = 9679; dicChar[8976] = 9830; + dicChar[9632] = 9604; + //dicChar[236] = 38914; char[] creg = new char[dicChar.Count]; int i = 0; foreach (int ic in dicChar.Keys) @@ -111,9 +113,86 @@ namespace DataLoader } return new string(cs); } + public static string ConvertText(string s1, bool DoCaret) + { + string s2 = s1; + if (DoCaret) s2 = s2.Replace("^", @"\u916"); + return ConvertText(s2); + } + public static string ReplaceUnicode(string s2) + { + char[] tmp; + tmp = s2.ToCharArray(); + s2 = s2.Replace("`", "\'b0"); // convert backquote to degree - left over from DOS days. + s2 = s2.Replace("\'a0",@"\'a0"); // hardspace + s2 = s2.Replace("\xb0", @"\'b0"); // degree + s2 = s2.Replace("\x7f", @"\u916?"); // delta + s2 = s2.Replace("\x2265",@"\u8805?"); // greater than or equal + s2 = s2.Replace("\x2264",@"\u8804?"); // less than or equal + s2 = s2.Replace("\xB1",@"\'b1"); // plus minus + s2 = s2.Replace("\x3A3",@"\u931?"); // sigma + s2 = s2.Replace("\x3C4",@"\u947?"); // gamma + s2 = s2.Replace("\xBD",@"\'bd"); // half + s2 = s2.Replace("\x25A0",@"\u9604?"); // accum 2584 + s2 = s2.Replace("\x7",@"\u9679?"); // bullet 25CF + s2 = s2.Replace("\x2248",@"\u8776?"); // approx eq + s2 = s2.Replace("\x2261",@"\u8773?"); // similar eq 2245 + s2 = s2.Replace("\xF7",@"\'f7"); // division + s2 = s2.Replace("\x221A",@"\u8730?"); // square root + s2 = s2.Replace("\x393",@"\u961?"); // rho 3C1 + s2 = s2.Replace("\x3C0",@"\u960?"); // pi + s2 = s2.Replace("\xb5", @"\u956?"); // micro 3BC (try e6, if not work try 109) + s2 = s2.Replace("\x3B4", @"\u948?"); // lower case delta + s2 = s2.Replace("\x3C3", @"\u963?"); // lower case sigma + s2 = s2.Replace("\xBC", @"\'bc"); // quarter + s2 = s2.Replace("\x3C6", @"\'d8"); // dist zero, D8 + s2 = s2.Replace("\xC9", @"\u274?"); // energy, 112 + s2 = s2.Replace("\xEC", @"\'ec"); // grave + s2 = s2.Replace("\x2502", @"\u9474?"); // bar + s2 = s2.Replace("\x3B5", @"\u949?"); // epsilon + s2 = s2.Replace("\x398", @"\u952?"); // theta, 3B8 + s2 = s2.Replace("\x221E", @"\u8857?"); // dot in oval, 2299 + s2 = s2.Replace("\xBF", @"\u964?"); // tau, 3C4 + s2 = s2.Replace("\x2310", @"\u9830?"); // diamond, 2666 + s2 = s2.Replace("\x2192", @"\u8594?"); + s2 = s2.Replace("\x2190", @"\u8592?"); + s2 = s2.Replace("\x2191", @"\u8593?"); + s2 = s2.Replace("\x2193", @"\u8595?"); + s2 = s2.Replace("\x2207", @"\u8711?"); + + return s2; + } public static string ConvertText(string s1) { - string s2 = Reg2.Replace(s1, new MatchEvaluator(ReplaceChars)); + string s2 = s1; + + s2 = ReplaceUnicode(s2); + // now replace underline on/off (AE,AF), super on/off (C6,C7) + // bold on/off (D5, D6), subscript on/off (D1 A6), and + // italics on/off (B2, DD) + s2 = s2.Replace("\xAB", "\\ul "); + s2 = s2.Replace("\xBB", "\\ul0 "); + s2 = s2.Replace("\x255E", "\\super "); + s2 = s2.Replace("\x255F", "\\nosupersub "); + s2 = s2.Replace("\x2552", "\\b "); + s2 = s2.Replace("\x2553", "\\b0 "); + s2 = s2.Replace("\x2564", "\\sub "); + s2 = s2.Replace("\xAA", "\\nosupersub "); + s2 = s2.Replace("\x2593", "\\i "); + s2 = s2.Replace("\x258C", "\\i0 "); + s2 = s2.Replace("\x2559", "\\ul\\b "); + s2 = s2.Replace("\x2558", "\\b0\\ul0 "); + + // underline next word is 0x17 + // superscript next is 0x18 + // subscript next is 0x19 + // bold next is 0x13 + s2 = Regex.Replace(s2, @"\x17([^\x17 ]*?)(?:[\x17]|(?= )|\Z)(.*?)", @"\ul $1\ul0 $2"); + s2 = Regex.Replace(s2, @"\x18([^\x18 ]*?)(?:[\x18]|(?= )|\Z)(.*?)", @"\super $1\nosupersub $2"); + s2 = Regex.Replace(s2, @"\x19([^\x19 ]*?)(?:[\x19]|(?= )|\Z)(.*?)", @"\sub $1\nosupersub $2"); + s2 = Regex.Replace(s2, @"\x13([^\x13 ]*?)(?:[\x13]|(?= )|\Z)(.*?)", @"\b $1\b0 $2"); + + s2 = Reg2.Replace(s2, new MatchEvaluator(ReplaceChars)); return s2; } } diff --git a/PROMS/DataLoader/Transitions.cs b/PROMS/DataLoader/Transitions.cs index 3cae776d..a81ccf02 100644 --- a/PROMS/DataLoader/Transitions.cs +++ b/PROMS/DataLoader/Transitions.cs @@ -20,43 +20,147 @@ using System.Collections.Generic; using System.Xml; using System.IO; using System.Text; -using Volian.CSLA.Library; +using VEPROMS.CSLA.Library; namespace DataLoader { - public partial class frmLoader : Form + public partial class Loader { - private int AddTrans(int fromId, DataRow dr) + private string AddTrans(Content fromCon, DataRow dr, DataRow dr2) { //TODO: ZTransitions tr.Oldto = dr["OLDTO"].ToString(); string thekey = dr["TONUMBER"].ToString() + "|" + dr["TOSEQUENCE"].ToString(); string dti = dr["DTI"].ToString().PadRight(18, ' '); string userid = dti.Substring(13, 5).Trim(); + int itype = 0; + ConfigInfo ci = null; + // The transition type was stored as a character & also, when read in thru + // ado.net may have been converted into unicode. So in order to get the + // correct type, first, use the TextConvert to eliminate the conversion done + // by ado.net. Then convert to a number. The 'anding of 0x80' flags that it + // is a formatted transition (i.e. this was done for byron/braidwood to + // show the transition with a page number or not). The 'anding of 0x7f' gets + // the actual number when subtracted from 0x30 (the value of the 0 character). + try + { + char typech = TextConvert.ConvertSeq(dr["TYPE"].ToString())[0]; + int tmpitype = Convert.ToInt32(typech); + if ((tmpitype & 0x80) > 0) + { + ci = new ConfigInfo(null); + ci.AddItem("Transition", "Formatted", "True"); + } + itype = (tmpitype&0x7F) - 0x30; + } + catch (Exception ex) + { + log.Error("Error converting transition type"); + log.ErrorFormat("type from database = {0}", dr["TYPE"].ToString()); + log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException); + itype = -1; + } DateTime dts = GetDTS(MakeDate(dti.Substring(0, 8).Trim()), dti.Substring(8, 5).Trim()); // if it's in the dictionary of structure elements already migrated, just use this // structure id, or if it's in the dictionary of structure elements that have // not been migrated but a record was created from this code, use it. Otherwise // create a new structure record and use its id, its data will be updated later. // a structure record. - int toid; - if (dicTrans_StrDone.ContainsKey(thekey)) - toid = dicTrans_StrDone[thekey]; + Item toItem = null; + Item toItem2 = null; + if (dicTrans_ItemDone.ContainsKey(thekey)) + { + toItem = dicTrans_ItemDone[thekey]; + } else { - if (dicTrans_StrIds.ContainsKey(thekey)) - toid = dicTrans_StrIds[thekey]; + if (dicTrans_ItemIds.ContainsKey(thekey)) + { + toItem = dicTrans_ItemIds[thekey]; + } else { - Structure str = Structure.MakeStructure(0, 0, 0, 0); - toid = str.StructureID; - dicTrans_StrIds.Add(thekey, toid); + // note that parent is null right now - it will be filled in later. + //toItem = Item.MakeItem(null, fromCon, DateTime.Now, "Migration"); + toItem = Item.New(null, TransDummyCont, DateTime.Now, "Migration"); + dicTrans_ItemIds.Add(thekey, toItem); } } - Transition tr = Transition.MakeTransition(fromId, toid, System.Convert.ToInt32(dr["TYPE"].ToString()),0,0,0,0,dts,userid); - return tr.TransitionId; + + // if there is data in dr2, it means that it is a range transition. Get its item + // data too. + toItem2 = toItem; + if (dr2 != null) + { + string thekey2 = dr2["TONUMBER"].ToString() + "|" + dr2["TOSEQUENCE"].ToString(); + if (dicTrans_ItemDone.ContainsKey(thekey2)) + { + toItem2 = dicTrans_ItemDone[thekey2]; + } + else + { + if (dicTrans_ItemIds.ContainsKey(thekey2)) + { + toItem2 = dicTrans_ItemIds[thekey2]; + } + else + { + toItem2 = Item.MakeItem(null, TransDummyCont, DateTime.Now, "Migration"); + dicTrans_ItemIds.Add(thekey2, toItem2); + } + } + } + + if (userid == null || userid == "") userid = "Migration"; + Transition tr = null; + try + { + tr = Transition.New(fromCon, toItem, toItem2, itype, ci!=null?ci.ToString():null, dts, userid); + tr.MyZTransition.Oldto = dr["OLDTO"].ToString(); + if (!tr.IsSavable) ErrorRpt.ErrorReport(tr); + tr.Save(); + } + catch (Exception ex) + { + log.Error("Error addition transition record"); + log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException); + } + StringBuilder trtxt = new StringBuilder(); + + // the following is pre RTB link code, i.e. {tranid {type toid (rangeid}} + trtxt.Append("\\v TRAN\\v0 (Resolved Transition Text)\\v "); + + trtxt.Append(tr.TranType.ToString()); + trtxt.Append(" "); + trtxt.Append(tr.TransitionID.ToString()); + trtxt.Append(" "); + trtxt.Append(tr.ToID.ToString()); + if (toItem.ItemID == toItem2.ItemID) + trtxt.Append("\\v0 "); + else + { + trtxt.Append(" "); + trtxt.Append(tr.RangeID.ToString()); + trtxt.Append("\\v0 "); + } + //trtxt.Append("{"); + //trtxt.Append(tr.TransitionID.ToString()); + //trtxt.Append("{"); + //trtxt.Append(tr.TranType.ToString()); + //trtxt.Append(" "); + //trtxt.Append(tr.ToID.ToString()); + //if (toItem.ItemID == toItem2.ItemID) + // trtxt.Append("}}"); + //else + //{ + // trtxt.Append(" "); + // trtxt.Append(tr.RangeID.ToString()); + // trtxt.Append("}}"); + //} + + return trtxt.ToString(); } - private string MigrateTrans(OleDbConnection cn, string textm, string seqcvt, int structId) + private string MigrateTrans(OleDbConnection cn, string textm, string seqcvt, Content content) { StringBuilder trtxt = new StringBuilder(); int instance = 0; @@ -95,17 +199,30 @@ namespace DataLoader // we have too many tokens and not enough usage records - report an error... if (instance >= dt.Rows.Count) { - log.ErrorFormat("Error - ran out of usage records for step, check data "); + log.ErrorFormat("Error - ran out of transition records for step, check data "); log.ErrorFormat("from number = {0} oldstepsequence = {1}", ProcNumber, seqcvt); } else { DataRow dr = dt.Rows[instance]; - int trid = AddTrans(structId, dr); + + // if type is 2 or 3, this is a range transition, need to get the next + // record too + bool trange = false; + if (dr["Type"].ToString() == "2" || dr["Type"].ToString() == "3") + trange = true; + + string rectxt = null; + if (trange) + { + instance++; + DataRow dr2 = dt.Rows[instance]; + rectxt = AddTrans(content, dr, dr2); + } + else + rectxt = AddTrans(content, dr, null); trtxt.Append(textm[tok]); - trtxt.Append("{{"); - trtxt.Append(trid.ToString()); - trtxt.Append("}}"); + trtxt.Append(rectxt); } instance++; beg = tok + 1; @@ -121,18 +238,25 @@ namespace DataLoader trtxt.Append(textm.Substring(beg, textm.Length - beg)); if (dt.Rows.Count > instance + 1) { - log.ErrorFormat("Error - extra usage records for step, check data "); + log.ErrorFormat("Error - extra transition records for step, check data "); log.ErrorFormat("from number = {0} oldstepsequence = {1}", ProcNumber, seqcvt); } return trtxt.ToString(); } private void ShowMissingTransitions() { - log.Info("Missing Transitions"); - foreach (string s in dicTrans_StrIds.Keys) + log.Info("Missing Transitions from Dictionary"); + foreach (string s in dicTrans_ItemIds.Keys) { - log.InfoFormat("{0} - {1}", s, dicTrans_StrIds[s]); + log.InfoFormat("{0} - {1}", s, dicTrans_ItemIds[s]); } + + log.Info("Bad transitions to 'dummy' content"); + foreach (ContentItem itm in TransDummyCont.ContentItems) + { + log.InfoFormat("ItemID = {0}", itm.ItemID); + } + log.Info("End of Missing Transitions"); } } diff --git a/PROMS/DataLoader/frmCntTkn.Designer.cs b/PROMS/DataLoader/frmCntTkn.Designer.cs new file mode 100644 index 00000000..50cae084 --- /dev/null +++ b/PROMS/DataLoader/frmCntTkn.Designer.cs @@ -0,0 +1,74 @@ +namespace DataLoader +{ + partial class frmCntTkn + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.button1 = new System.Windows.Forms.Button(); + this.listBox1 = new System.Windows.Forms.ListBox(); + this.SuspendLayout(); + // + // button1 + // + this.button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.button1.Location = new System.Drawing.Point(12, 8); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(132, 22); + this.button1.TabIndex = 0; + this.button1.Text = "Count Chars/Tokens"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // listBox1 + // + this.listBox1.Font = new System.Drawing.Font("Arial Unicode MS", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.listBox1.FormattingEnabled = true; + this.listBox1.ItemHeight = 15; + this.listBox1.Location = new System.Drawing.Point(12, 36); + this.listBox1.Name = "listBox1"; + this.listBox1.Size = new System.Drawing.Size(225, 409); + this.listBox1.TabIndex = 55; + // + // frmCntTkn + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(331, 486); + this.Controls.Add(this.listBox1); + this.Controls.Add(this.button1); + this.Name = "frmCntTkn"; + this.Text = "frmCntTkn"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button button1; + private System.Windows.Forms.ListBox listBox1; + } +} \ No newline at end of file diff --git a/PROMS/DataLoader/frmCntTkn.cs b/PROMS/DataLoader/frmCntTkn.cs new file mode 100644 index 00000000..8afac0d8 --- /dev/null +++ b/PROMS/DataLoader/frmCntTkn.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Data.OleDb; +using System.Drawing; +using System.Text; +using System.IO; +using System.Windows.Forms; +using VEPROMS.CSLA.Library; + +namespace DataLoader +{ + public partial class frmCntTkn : Form + { + private Dictionary dicCharCount; + + public frmCntTkn() + { + InitializeComponent(); + } + + private void CountChars(string txt) + { + foreach (char ch in txt) + { + //'A' is a newline + int ich = Convert.ToInt32(ch); + if (ich == 0xD) Console.WriteLine("D is {0}", txt); + if (ich == 0x17) Console.WriteLine("17 is {0}", txt); + if (!dicCharCount.ContainsKey(ch)) + dicCharCount[ch] = 1; + else + dicCharCount[ch] = dicCharCount[ch] + 1; + } + } + + //private void ProcessText() + //{ + // TextMInfoList txtMList = TextMInfoList.Get(); + // foreach (TextMInfo txtM in txtMList) + // { + // string thetext = txtM.TextMValue; + // CountChars(thetext); + // } + //} + private void button1_Click(object sender, EventArgs e) + { + // Create a dictionary that stores characters + // read in data from dbf + // list chars + dicCharCount = new Dictionary(); + //ProcessText(); + + // now display dictionary results.. + Console.WriteLine("Char\t\tHex\t\tDec\t\tCount"); + foreach (char ch in dicCharCount.Keys) + { + // if character is a 'token' and not a hardspace (A0), linefeed (A), RO token (15) + // Transition tokens (0x252c & -x2566) then show it. + if ((ch < 0x20 || ch > 0x7E) && ch!= 0xA0 && ch != 0xA && ch != 0x15 && ch != 0x252C && ch != 0x2566) + { + int ich = Convert.ToInt32(ch); + string cntstr = String.Format("{0}\t\t{1}\t\t{2}\t\t{3}", ch, ich.ToString("X4"), ich.ToString(), dicCharCount[ch]); + listBox1.Items.Add(cntstr); + Console.WriteLine(cntstr); + } + } + } + } +} \ No newline at end of file diff --git a/PROMS/DataLoader/frmCntTkn.resx b/PROMS/DataLoader/frmCntTkn.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/PROMS/DataLoader/frmCntTkn.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/PROMS/DataLoader/frmLoader.Designer.cs b/PROMS/DataLoader/frmLoader.Designer.cs index 8cc7822a..0bec7b11 100644 --- a/PROMS/DataLoader/frmLoader.Designer.cs +++ b/PROMS/DataLoader/frmLoader.Designer.cs @@ -28,326 +28,364 @@ namespace DataLoader /// private void InitializeComponent() { - this.sc = new System.Windows.Forms.SplitContainer(); - this.btnVETree_CSLA = new System.Windows.Forms.Button(); - this.btnBrowseVesam = new System.Windows.Forms.Button(); - this.tbVesamPath = new System.Windows.Forms.TextBox(); - this.btnVesam = new System.Windows.Forms.Button(); - this.btnLoadTreeCSLA = new System.Windows.Forms.Button(); - this.cbLazy = new System.Windows.Forms.CheckBox(); - this.btnConvertSelected = new System.Windows.Forms.Button(); - this.btnLoadTreeDB = new System.Windows.Forms.Button(); - this.cbPurgeData = new System.Windows.Forms.CheckBox(); - this.lblTime = new System.Windows.Forms.Label(); - this.pbStep = new System.Windows.Forms.ProgressBar(); - this.pbSect = new System.Windows.Forms.ProgressBar(); - this.pbProc = new System.Windows.Forms.ProgressBar(); - this.cbSaveDoc = new System.Windows.Forms.CheckBox(); - this.cbSaveRTF = new System.Windows.Forms.CheckBox(); - this.btnBrowse = new System.Windows.Forms.Button(); - this.tbSource = new System.Windows.Forms.TextBox(); - this.lblStep = new System.Windows.Forms.Label(); - this.lblSection = new System.Windows.Forms.Label(); - this.lblProc = new System.Windows.Forms.Label(); - this.btnConvert = new System.Windows.Forms.Button(); - this.tv = new System.Windows.Forms.TreeView(); - this.fbd = new System.Windows.Forms.FolderBrowserDialog(); - this.btnGroup = new System.Windows.Forms.Button(); - this.sc.Panel1.SuspendLayout(); - this.sc.Panel2.SuspendLayout(); - this.sc.SuspendLayout(); - this.SuspendLayout(); - // - // sc - // - this.sc.Dock = System.Windows.Forms.DockStyle.Fill; - this.sc.Location = new System.Drawing.Point(0, 0); - this.sc.Margin = new System.Windows.Forms.Padding(2); - this.sc.Name = "sc"; - this.sc.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // sc.Panel1 - // - this.sc.Panel1.Controls.Add(this.btnGroup); - this.sc.Panel1.Controls.Add(this.btnVETree_CSLA); - this.sc.Panel1.Controls.Add(this.btnBrowseVesam); - this.sc.Panel1.Controls.Add(this.tbVesamPath); - this.sc.Panel1.Controls.Add(this.btnVesam); - this.sc.Panel1.Controls.Add(this.btnLoadTreeCSLA); - this.sc.Panel1.Controls.Add(this.cbLazy); - this.sc.Panel1.Controls.Add(this.btnConvertSelected); - this.sc.Panel1.Controls.Add(this.btnLoadTreeDB); - this.sc.Panel1.Controls.Add(this.cbPurgeData); - this.sc.Panel1.Controls.Add(this.lblTime); - this.sc.Panel1.Controls.Add(this.pbStep); - this.sc.Panel1.Controls.Add(this.pbSect); - this.sc.Panel1.Controls.Add(this.pbProc); - this.sc.Panel1.Controls.Add(this.cbSaveDoc); - this.sc.Panel1.Controls.Add(this.cbSaveRTF); - this.sc.Panel1.Controls.Add(this.btnBrowse); - this.sc.Panel1.Controls.Add(this.tbSource); - this.sc.Panel1.Controls.Add(this.lblStep); - this.sc.Panel1.Controls.Add(this.lblSection); - this.sc.Panel1.Controls.Add(this.lblProc); - this.sc.Panel1.Controls.Add(this.btnConvert); - // - // sc.Panel2 - // - this.sc.Panel2.Controls.Add(this.tv); - this.sc.Size = new System.Drawing.Size(623, 413); - this.sc.SplitterDistance = 172; - this.sc.SplitterWidth = 3; - this.sc.TabIndex = 46; - // - // btnVETree_CSLA - // - this.btnVETree_CSLA.Location = new System.Drawing.Point(293, 121); - this.btnVETree_CSLA.Name = "btnVETree_CSLA"; - this.btnVETree_CSLA.Size = new System.Drawing.Size(145, 21); - this.btnVETree_CSLA.TabIndex = 68; - this.btnVETree_CSLA.Text = "Load VETree from CSLA"; - this.btnVETree_CSLA.UseVisualStyleBackColor = true; - this.btnVETree_CSLA.Click += new System.EventHandler(this.btnVETree_CSLA_Click); - // - // btnBrowseVesam - // - this.btnBrowseVesam.Location = new System.Drawing.Point(479, 150); - this.btnBrowseVesam.Margin = new System.Windows.Forms.Padding(2); - this.btnBrowseVesam.Name = "btnBrowseVesam"; - this.btnBrowseVesam.Size = new System.Drawing.Size(119, 19); - this.btnBrowseVesam.TabIndex = 67; - this.btnBrowseVesam.Text = "Browse for Vesam..."; - this.btnBrowseVesam.UseVisualStyleBackColor = true; - this.btnBrowseVesam.Click += new System.EventHandler(this.btnBrowseVesam_Click); - // - // tbVesamPath - // - this.tbVesamPath.Location = new System.Drawing.Point(114, 150); - this.tbVesamPath.Name = "tbVesamPath"; - this.tbVesamPath.Size = new System.Drawing.Size(353, 20); - this.tbVesamPath.TabIndex = 66; - this.tbVesamPath.Text = "e:\\ve-proms\\vesam.opt"; - // - // btnVesam - // - this.btnVesam.Location = new System.Drawing.Point(2, 148); - this.btnVesam.Name = "btnVesam"; - this.btnVesam.Size = new System.Drawing.Size(108, 21); - this.btnVesam.TabIndex = 65; - this.btnVesam.Text = "Convert Security"; - this.btnVesam.UseVisualStyleBackColor = true; - this.btnVesam.Click += new System.EventHandler(this.btnVesam_Click); - // - // btnLoadTreeCSLA - // - this.btnLoadTreeCSLA.Location = new System.Drawing.Point(295, 96); - this.btnLoadTreeCSLA.Name = "btnLoadTreeCSLA"; - this.btnLoadTreeCSLA.Size = new System.Drawing.Size(144, 20); - this.btnLoadTreeCSLA.TabIndex = 64; - this.btnLoadTreeCSLA.Text = "Load Tree from CSLA"; - this.btnLoadTreeCSLA.UseVisualStyleBackColor = true; - this.btnLoadTreeCSLA.Click += new System.EventHandler(this.btnLoadTreeCSLA_Click); - // - // cbLazy - // - this.cbLazy.AutoSize = true; - this.cbLazy.Checked = true; - this.cbLazy.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbLazy.Location = new System.Drawing.Point(11, 126); - this.cbLazy.Margin = new System.Windows.Forms.Padding(2); - this.cbLazy.Name = "cbLazy"; - this.cbLazy.Size = new System.Drawing.Size(75, 17); - this.cbLazy.TabIndex = 63; - this.cbLazy.Text = "Lazy Load"; - this.cbLazy.UseVisualStyleBackColor = true; - // - // btnConvertSelected - // - this.btnConvertSelected.Location = new System.Drawing.Point(170, 97); - this.btnConvertSelected.Margin = new System.Windows.Forms.Padding(2); - this.btnConvertSelected.Name = "btnConvertSelected"; - this.btnConvertSelected.Size = new System.Drawing.Size(108, 19); - this.btnConvertSelected.TabIndex = 62; - this.btnConvertSelected.Text = "Convert Selected"; - this.btnConvertSelected.UseVisualStyleBackColor = true; - this.btnConvertSelected.Click += new System.EventHandler(this.btnConvertSelected_Click); - // - // btnLoadTreeDB - // - this.btnLoadTreeDB.Location = new System.Drawing.Point(450, 97); - this.btnLoadTreeDB.Margin = new System.Windows.Forms.Padding(2); - this.btnLoadTreeDB.Name = "btnLoadTreeDB"; - this.btnLoadTreeDB.Size = new System.Drawing.Size(124, 19); - this.btnLoadTreeDB.TabIndex = 60; - this.btnLoadTreeDB.Text = "Load Tree from dBase"; - this.btnLoadTreeDB.UseVisualStyleBackColor = true; - this.btnLoadTreeDB.Click += new System.EventHandler(this.btnLoadTreeDB_Click); - // - // cbPurgeData - // - this.cbPurgeData.AutoSize = true; - this.cbPurgeData.Checked = true; - this.cbPurgeData.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbPurgeData.Location = new System.Drawing.Point(479, 75); - this.cbPurgeData.Margin = new System.Windows.Forms.Padding(2); - this.cbPurgeData.Name = "cbPurgeData"; - this.cbPurgeData.Size = new System.Drawing.Size(119, 17); - this.cbPurgeData.TabIndex = 59; - this.cbPurgeData.Text = "Purge Existing Data"; - this.cbPurgeData.UseVisualStyleBackColor = true; - // - // lblTime - // - this.lblTime.BackColor = System.Drawing.SystemColors.ButtonShadow; - this.lblTime.Location = new System.Drawing.Point(70, 92); - this.lblTime.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.lblTime.Name = "lblTime"; - this.lblTime.Size = new System.Drawing.Size(84, 20); - this.lblTime.TabIndex = 58; - // - // pbStep - // - this.pbStep.Location = new System.Drawing.Point(160, 76); - this.pbStep.Margin = new System.Windows.Forms.Padding(2); - this.pbStep.Name = "pbStep"; - this.pbStep.Size = new System.Drawing.Size(308, 15); - this.pbStep.TabIndex = 57; - // - // pbSect - // - this.pbSect.Location = new System.Drawing.Point(160, 56); - this.pbSect.Margin = new System.Windows.Forms.Padding(2); - this.pbSect.Name = "pbSect"; - this.pbSect.Size = new System.Drawing.Size(307, 15); - this.pbSect.TabIndex = 56; - // - // pbProc - // - this.pbProc.Location = new System.Drawing.Point(160, 37); - this.pbProc.Margin = new System.Windows.Forms.Padding(2); - this.pbProc.Name = "pbProc"; - this.pbProc.Size = new System.Drawing.Size(308, 15); - this.pbProc.TabIndex = 55; - // - // cbSaveDoc - // - this.cbSaveDoc.AutoSize = true; - this.cbSaveDoc.Checked = true; - this.cbSaveDoc.CheckState = System.Windows.Forms.CheckState.Checked; - this.cbSaveDoc.Location = new System.Drawing.Point(480, 34); - this.cbSaveDoc.Margin = new System.Windows.Forms.Padding(2); - this.cbSaveDoc.Name = "cbSaveDoc"; - this.cbSaveDoc.Size = new System.Drawing.Size(77, 17); - this.cbSaveDoc.TabIndex = 54; - this.cbSaveDoc.Text = "Save DOC"; - this.cbSaveDoc.UseVisualStyleBackColor = true; - this.cbSaveDoc.Click += new System.EventHandler(this.cbSaveDoc_Click); - // - // cbSaveRTF - // - this.cbSaveRTF.AutoSize = true; - this.cbSaveRTF.Location = new System.Drawing.Point(480, 54); - this.cbSaveRTF.Margin = new System.Windows.Forms.Padding(2); - this.cbSaveRTF.Name = "cbSaveRTF"; - this.cbSaveRTF.Size = new System.Drawing.Size(75, 17); - this.cbSaveRTF.TabIndex = 53; - this.cbSaveRTF.Text = "Save RTF"; - this.cbSaveRTF.UseVisualStyleBackColor = true; - this.cbSaveRTF.Click += new System.EventHandler(this.cbSaveRTF_Click); - // - // btnBrowse - // - this.btnBrowse.Location = new System.Drawing.Point(479, 10); - this.btnBrowse.Margin = new System.Windows.Forms.Padding(2); - this.btnBrowse.Name = "btnBrowse"; - this.btnBrowse.Size = new System.Drawing.Size(56, 19); - this.btnBrowse.TabIndex = 52; - this.btnBrowse.Text = "Browse..."; - this.btnBrowse.UseVisualStyleBackColor = true; - this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click); - // - // tbSource - // - this.tbSource.Location = new System.Drawing.Point(71, 10); - this.tbSource.Margin = new System.Windows.Forms.Padding(2); - this.tbSource.Name = "tbSource"; - this.tbSource.Size = new System.Drawing.Size(397, 20); - this.tbSource.TabIndex = 51; - this.tbSource.Text = "i:\\vedata\\vewcnfp\\fp.prc"; - // - // lblStep - // - this.lblStep.BackColor = System.Drawing.SystemColors.ButtonShadow; - this.lblStep.Location = new System.Drawing.Point(70, 72); - this.lblStep.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.lblStep.Name = "lblStep"; - this.lblStep.Size = new System.Drawing.Size(84, 20); - this.lblStep.TabIndex = 49; - // - // lblSection - // - this.lblSection.BackColor = System.Drawing.SystemColors.ButtonShadow; - this.lblSection.Location = new System.Drawing.Point(70, 53); - this.lblSection.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.lblSection.Name = "lblSection"; - this.lblSection.Size = new System.Drawing.Size(84, 19); - this.lblSection.TabIndex = 48; - // - // lblProc - // - this.lblProc.BackColor = System.Drawing.SystemColors.ButtonShadow; - this.lblProc.Location = new System.Drawing.Point(70, 34); - this.lblProc.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.lblProc.Name = "lblProc"; - this.lblProc.Size = new System.Drawing.Size(84, 19); - this.lblProc.TabIndex = 47; - // - // btnConvert - // - this.btnConvert.Location = new System.Drawing.Point(2, 9); - this.btnConvert.Margin = new System.Windows.Forms.Padding(2); - this.btnConvert.Name = "btnConvert"; - this.btnConvert.Size = new System.Drawing.Size(56, 19); - this.btnConvert.TabIndex = 46; - this.btnConvert.Text = "Convert"; - this.btnConvert.Click += new System.EventHandler(this.btnConvert_Click); - // - // tv - // - this.tv.CheckBoxes = true; - this.tv.Dock = System.Windows.Forms.DockStyle.Bottom; - this.tv.Location = new System.Drawing.Point(0, 1); - this.tv.Margin = new System.Windows.Forms.Padding(2); - this.tv.Name = "tv"; - this.tv.Size = new System.Drawing.Size(623, 237); - this.tv.TabIndex = 24; - this.tv.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.tv_BeforeExpand); - this.tv.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tv_AfterSelect); - // - // btnGroup - // - this.btnGroup.Location = new System.Drawing.Point(505, 118); - this.btnGroup.Name = "btnGroup"; - this.btnGroup.Size = new System.Drawing.Size(75, 23); - this.btnGroup.TabIndex = 69; - this.btnGroup.Text = "Group"; - this.btnGroup.UseVisualStyleBackColor = true; - this.btnGroup.Click += new System.EventHandler(this.btnGroup_Click); - // - // frmLoader - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(623, 413); - this.Controls.Add(this.sc); - this.Margin = new System.Windows.Forms.Padding(2); - this.Name = "frmLoader"; - this.Text = "frmLoader"; - this.sc.Panel1.ResumeLayout(false); - this.sc.Panel1.PerformLayout(); - this.sc.Panel2.ResumeLayout(false); - this.sc.ResumeLayout(false); - this.ResumeLayout(false); + this.sc = new System.Windows.Forms.SplitContainer(); + this.btnCtTok = new System.Windows.Forms.Button(); + this.btnGroup = new System.Windows.Forms.Button(); + this.btnVETree_CSLA = new System.Windows.Forms.Button(); + this.btnBrowseVesam = new System.Windows.Forms.Button(); + this.tbVesamPath = new System.Windows.Forms.TextBox(); + this.btnVesam = new System.Windows.Forms.Button(); + this.btnLoadTreeCSLA = new System.Windows.Forms.Button(); + this.cbLazy = new System.Windows.Forms.CheckBox(); + this.btnConvertSelected = new System.Windows.Forms.Button(); + this.btnLoadTreeDB = new System.Windows.Forms.Button(); + this.cbPurgeData = new System.Windows.Forms.CheckBox(); + this.lblTime = new System.Windows.Forms.Label(); + this.pbStep = new System.Windows.Forms.ProgressBar(); + this.pbSect = new System.Windows.Forms.ProgressBar(); + this.pbProc = new System.Windows.Forms.ProgressBar(); + this.cbSaveDoc = new System.Windows.Forms.CheckBox(); + this.cbSaveRTF = new System.Windows.Forms.CheckBox(); + this.btnBrowse = new System.Windows.Forms.Button(); + this.tbSource = new System.Windows.Forms.TextBox(); + this.lblStep = new System.Windows.Forms.Label(); + this.lblSection = new System.Windows.Forms.Label(); + this.lblProc = new System.Windows.Forms.Label(); + this.btnConvert = new System.Windows.Forms.Button(); + this.tv = new System.Windows.Forms.TreeView(); + this.fbd = new System.Windows.Forms.FolderBrowserDialog(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.sc.Panel1.SuspendLayout(); + this.sc.Panel2.SuspendLayout(); + this.sc.SuspendLayout(); + this.statusStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // sc + // + this.sc.Dock = System.Windows.Forms.DockStyle.Fill; + this.sc.Location = new System.Drawing.Point(0, 0); + this.sc.Margin = new System.Windows.Forms.Padding(2); + this.sc.Name = "sc"; + this.sc.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // sc.Panel1 + // + this.sc.Panel1.Controls.Add(this.btnCtTok); + this.sc.Panel1.Controls.Add(this.btnGroup); + this.sc.Panel1.Controls.Add(this.btnVETree_CSLA); + this.sc.Panel1.Controls.Add(this.btnBrowseVesam); + this.sc.Panel1.Controls.Add(this.tbVesamPath); + this.sc.Panel1.Controls.Add(this.btnVesam); + this.sc.Panel1.Controls.Add(this.btnLoadTreeCSLA); + this.sc.Panel1.Controls.Add(this.cbLazy); + this.sc.Panel1.Controls.Add(this.btnConvertSelected); + this.sc.Panel1.Controls.Add(this.btnLoadTreeDB); + this.sc.Panel1.Controls.Add(this.cbPurgeData); + this.sc.Panel1.Controls.Add(this.lblTime); + this.sc.Panel1.Controls.Add(this.pbStep); + this.sc.Panel1.Controls.Add(this.pbSect); + this.sc.Panel1.Controls.Add(this.pbProc); + this.sc.Panel1.Controls.Add(this.cbSaveDoc); + this.sc.Panel1.Controls.Add(this.cbSaveRTF); + this.sc.Panel1.Controls.Add(this.btnBrowse); + this.sc.Panel1.Controls.Add(this.tbSource); + this.sc.Panel1.Controls.Add(this.lblStep); + this.sc.Panel1.Controls.Add(this.lblSection); + this.sc.Panel1.Controls.Add(this.lblProc); + this.sc.Panel1.Controls.Add(this.btnConvert); + // + // sc.Panel2 + // + this.sc.Panel2.Controls.Add(this.tv); + this.sc.Size = new System.Drawing.Size(623, 413); + this.sc.SplitterDistance = 190; + this.sc.SplitterWidth = 3; + this.sc.TabIndex = 46; + // + // btnCtTok + // + this.btnCtTok.Location = new System.Drawing.Point(482, 0); + this.btnCtTok.Name = "btnCtTok"; + this.btnCtTok.Size = new System.Drawing.Size(96, 20); + this.btnCtTok.TabIndex = 70; + this.btnCtTok.Text = "Count Tokens"; + this.btnCtTok.UseVisualStyleBackColor = true; + this.btnCtTok.Click += new System.EventHandler(this.btnCtTok_Click); + // + // btnGroup + // + this.btnGroup.Location = new System.Drawing.Point(387, -3); + this.btnGroup.Name = "btnGroup"; + this.btnGroup.Size = new System.Drawing.Size(89, 23); + this.btnGroup.TabIndex = 69; + this.btnGroup.Text = "Group/Security"; + this.btnGroup.UseVisualStyleBackColor = true; + this.btnGroup.Click += new System.EventHandler(this.btnGroup_Click); + // + // btnVETree_CSLA + // + this.btnVETree_CSLA.Location = new System.Drawing.Point(248, -1); + this.btnVETree_CSLA.Name = "btnVETree_CSLA"; + this.btnVETree_CSLA.Size = new System.Drawing.Size(133, 21); + this.btnVETree_CSLA.TabIndex = 68; + this.btnVETree_CSLA.Text = "Load VETree from CSLA"; + this.btnVETree_CSLA.UseVisualStyleBackColor = true; + this.btnVETree_CSLA.Click += new System.EventHandler(this.btnVETree_CSLA_Click); + // + // btnBrowseVesam + // + this.btnBrowseVesam.Location = new System.Drawing.Point(479, 26); + this.btnBrowseVesam.Margin = new System.Windows.Forms.Padding(2); + this.btnBrowseVesam.Name = "btnBrowseVesam"; + this.btnBrowseVesam.Size = new System.Drawing.Size(119, 19); + this.btnBrowseVesam.TabIndex = 67; + this.btnBrowseVesam.Text = "Browse for Vesam..."; + this.btnBrowseVesam.UseVisualStyleBackColor = true; + this.btnBrowseVesam.Click += new System.EventHandler(this.btnBrowseVesam_Click); + // + // tbVesamPath + // + this.tbVesamPath.Location = new System.Drawing.Point(114, 26); + this.tbVesamPath.Name = "tbVesamPath"; + this.tbVesamPath.Size = new System.Drawing.Size(353, 20); + this.tbVesamPath.TabIndex = 66; + this.tbVesamPath.Text = "e:\\ve-proms\\vesam.opt"; + // + // btnVesam + // + this.btnVesam.Location = new System.Drawing.Point(2, 24); + this.btnVesam.Name = "btnVesam"; + this.btnVesam.Size = new System.Drawing.Size(108, 21); + this.btnVesam.TabIndex = 65; + this.btnVesam.Text = "Convert Security"; + this.btnVesam.UseVisualStyleBackColor = true; + this.btnVesam.Click += new System.EventHandler(this.btnVesam_Click); + // + // btnLoadTreeCSLA + // + this.btnLoadTreeCSLA.Location = new System.Drawing.Point(123, 0); + this.btnLoadTreeCSLA.Name = "btnLoadTreeCSLA"; + this.btnLoadTreeCSLA.Size = new System.Drawing.Size(119, 20); + this.btnLoadTreeCSLA.TabIndex = 64; + this.btnLoadTreeCSLA.Text = "Load Tree from CSLA"; + this.btnLoadTreeCSLA.UseVisualStyleBackColor = true; + this.btnLoadTreeCSLA.Click += new System.EventHandler(this.btnLoadTreeCSLA_Click); + // + // cbLazy + // + this.cbLazy.AutoSize = true; + this.cbLazy.Checked = true; + this.cbLazy.CheckState = System.Windows.Forms.CheckState.Checked; + this.cbLazy.Location = new System.Drawing.Point(478, 142); + this.cbLazy.Margin = new System.Windows.Forms.Padding(2); + this.cbLazy.Name = "cbLazy"; + this.cbLazy.Size = new System.Drawing.Size(75, 17); + this.cbLazy.TabIndex = 63; + this.cbLazy.Text = "Lazy Load"; + this.cbLazy.UseVisualStyleBackColor = true; + // + // btnConvertSelected + // + this.btnConvertSelected.Location = new System.Drawing.Point(2, 166); + this.btnConvertSelected.Margin = new System.Windows.Forms.Padding(2); + this.btnConvertSelected.Name = "btnConvertSelected"; + this.btnConvertSelected.Size = new System.Drawing.Size(160, 19); + this.btnConvertSelected.TabIndex = 62; + this.btnConvertSelected.Text = "Convert Dbf Selected In Tree"; + this.btnConvertSelected.UseVisualStyleBackColor = true; + this.btnConvertSelected.Click += new System.EventHandler(this.btnConvertSelected_Click); + // + // btnLoadTreeDB + // + this.btnLoadTreeDB.Location = new System.Drawing.Point(0, 0); + this.btnLoadTreeDB.Margin = new System.Windows.Forms.Padding(2); + this.btnLoadTreeDB.Name = "btnLoadTreeDB"; + this.btnLoadTreeDB.Size = new System.Drawing.Size(118, 19); + this.btnLoadTreeDB.TabIndex = 60; + this.btnLoadTreeDB.Text = "Convert Top Folders"; + this.btnLoadTreeDB.UseVisualStyleBackColor = true; + this.btnLoadTreeDB.Click += new System.EventHandler(this.btnLoadTreeDB_Click); + // + // cbPurgeData + // + this.cbPurgeData.AutoSize = true; + this.cbPurgeData.Checked = true; + this.cbPurgeData.CheckState = System.Windows.Forms.CheckState.Checked; + this.cbPurgeData.Location = new System.Drawing.Point(478, 121); + this.cbPurgeData.Margin = new System.Windows.Forms.Padding(2); + this.cbPurgeData.Name = "cbPurgeData"; + this.cbPurgeData.Size = new System.Drawing.Size(119, 17); + this.cbPurgeData.TabIndex = 59; + this.cbPurgeData.Text = "Purge Existing Data"; + this.cbPurgeData.UseVisualStyleBackColor = true; + // + // lblTime + // + this.lblTime.BackColor = System.Drawing.SystemColors.ButtonShadow; + this.lblTime.Location = new System.Drawing.Point(70, 135); + this.lblTime.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.lblTime.Name = "lblTime"; + this.lblTime.Size = new System.Drawing.Size(84, 20); + this.lblTime.TabIndex = 58; + // + // pbStep + // + this.pbStep.Location = new System.Drawing.Point(160, 119); + this.pbStep.Margin = new System.Windows.Forms.Padding(2); + this.pbStep.Name = "pbStep"; + this.pbStep.Size = new System.Drawing.Size(308, 15); + this.pbStep.TabIndex = 57; + // + // pbSect + // + this.pbSect.Location = new System.Drawing.Point(160, 99); + this.pbSect.Margin = new System.Windows.Forms.Padding(2); + this.pbSect.Name = "pbSect"; + this.pbSect.Size = new System.Drawing.Size(307, 15); + this.pbSect.TabIndex = 56; + // + // pbProc + // + this.pbProc.Location = new System.Drawing.Point(160, 80); + this.pbProc.Margin = new System.Windows.Forms.Padding(2); + this.pbProc.Name = "pbProc"; + this.pbProc.Size = new System.Drawing.Size(308, 15); + this.pbProc.TabIndex = 55; + // + // cbSaveDoc + // + this.cbSaveDoc.AutoSize = true; + this.cbSaveDoc.Checked = true; + this.cbSaveDoc.CheckState = System.Windows.Forms.CheckState.Checked; + this.cbSaveDoc.Location = new System.Drawing.Point(479, 80); + this.cbSaveDoc.Margin = new System.Windows.Forms.Padding(2); + this.cbSaveDoc.Name = "cbSaveDoc"; + this.cbSaveDoc.Size = new System.Drawing.Size(77, 17); + this.cbSaveDoc.TabIndex = 54; + this.cbSaveDoc.Text = "Save DOC"; + this.cbSaveDoc.UseVisualStyleBackColor = true; + this.cbSaveDoc.Click += new System.EventHandler(this.cbSaveDoc_Click); + // + // cbSaveRTF + // + this.cbSaveRTF.AutoSize = true; + this.cbSaveRTF.Location = new System.Drawing.Point(479, 100); + this.cbSaveRTF.Margin = new System.Windows.Forms.Padding(2); + this.cbSaveRTF.Name = "cbSaveRTF"; + this.cbSaveRTF.Size = new System.Drawing.Size(75, 17); + this.cbSaveRTF.TabIndex = 53; + this.cbSaveRTF.Text = "Save RTF"; + this.cbSaveRTF.UseVisualStyleBackColor = true; + this.cbSaveRTF.Click += new System.EventHandler(this.cbSaveRTF_Click); + // + // btnBrowse + // + this.btnBrowse.Location = new System.Drawing.Point(479, 53); + this.btnBrowse.Margin = new System.Windows.Forms.Padding(2); + this.btnBrowse.Name = "btnBrowse"; + this.btnBrowse.Size = new System.Drawing.Size(56, 19); + this.btnBrowse.TabIndex = 52; + this.btnBrowse.Text = "Browse..."; + this.btnBrowse.UseVisualStyleBackColor = true; + this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click); + // + // tbSource + // + this.tbSource.Location = new System.Drawing.Point(71, 53); + this.tbSource.Margin = new System.Windows.Forms.Padding(2); + this.tbSource.Name = "tbSource"; + this.tbSource.Size = new System.Drawing.Size(397, 20); + this.tbSource.TabIndex = 51; + this.tbSource.Text = "i:\\vedata\\vewcnfp\\fp.prc"; + this.tbSource.TextChanged += new System.EventHandler(this.tbSource_TextChanged); + // + // lblStep + // + this.lblStep.BackColor = System.Drawing.SystemColors.ButtonShadow; + this.lblStep.Location = new System.Drawing.Point(70, 115); + this.lblStep.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.lblStep.Name = "lblStep"; + this.lblStep.Size = new System.Drawing.Size(84, 20); + this.lblStep.TabIndex = 49; + // + // lblSection + // + this.lblSection.BackColor = System.Drawing.SystemColors.ButtonShadow; + this.lblSection.Location = new System.Drawing.Point(70, 96); + this.lblSection.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.lblSection.Name = "lblSection"; + this.lblSection.Size = new System.Drawing.Size(84, 19); + this.lblSection.TabIndex = 48; + // + // lblProc + // + this.lblProc.BackColor = System.Drawing.SystemColors.ButtonShadow; + this.lblProc.Location = new System.Drawing.Point(70, 77); + this.lblProc.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.lblProc.Name = "lblProc"; + this.lblProc.Size = new System.Drawing.Size(84, 19); + this.lblProc.TabIndex = 47; + // + // btnConvert + // + this.btnConvert.Location = new System.Drawing.Point(2, 54); + this.btnConvert.Margin = new System.Windows.Forms.Padding(2); + this.btnConvert.Name = "btnConvert"; + this.btnConvert.Size = new System.Drawing.Size(56, 40); + this.btnConvert.TabIndex = 46; + this.btnConvert.Text = "Convert Dbf"; + this.btnConvert.Click += new System.EventHandler(this.btnConvert_Click); + // + // tv + // + this.tv.CheckBoxes = true; + this.tv.Dock = System.Windows.Forms.DockStyle.Bottom; + this.tv.Location = new System.Drawing.Point(0, -4); + this.tv.Margin = new System.Windows.Forms.Padding(2); + this.tv.Name = "tv"; + this.tv.Size = new System.Drawing.Size(623, 224); + this.tv.TabIndex = 24; + this.tv.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.tv_BeforeExpand); + this.tv.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tv_AfterSelect); + // + // statusStrip1 + // + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabel1}); + this.statusStrip1.Location = new System.Drawing.Point(0, 391); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(623, 22); + this.statusStrip1.TabIndex = 47; + this.statusStrip1.Text = "statusStrip1"; + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(97, 17); + this.toolStripStatusLabel1.Text = "Status Information"; + // + // frmLoader + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(623, 413); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.sc); + this.Margin = new System.Windows.Forms.Padding(2); + this.Name = "frmLoader"; + this.Text = "frmLoader"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.frmLoader_FormClosing); + this.Load += new System.EventHandler(this.frmLoader_Load); + this.sc.Panel1.ResumeLayout(false); + this.sc.Panel1.PerformLayout(); + this.sc.Panel2.ResumeLayout(false); + this.sc.ResumeLayout(false); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); } @@ -378,5 +416,8 @@ namespace DataLoader private System.Windows.Forms.Button btnBrowseVesam; private System.Windows.Forms.Button btnVETree_CSLA; private System.Windows.Forms.Button btnGroup; + private System.Windows.Forms.Button btnCtTok; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; } } \ No newline at end of file diff --git a/PROMS/DataLoader/frmLoader.cs b/PROMS/DataLoader/frmLoader.cs index d7a8a183..926d22fd 100644 --- a/PROMS/DataLoader/frmLoader.cs +++ b/PROMS/DataLoader/frmLoader.cs @@ -13,7 +13,7 @@ using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; -using System.Data.OleDb; +using System.Data.OleDb; using System.Collections.Specialized; using System.Collections.Generic; using System.Xml; @@ -22,64 +22,49 @@ using System.Text; using Volian.MSWord; using vlnObjectLibrary; using vlnServerLibrary; -using Volian.CSLA.Library; +using VEPROMS.CSLA.Library; using Config; + [assembly: log4net.Config.XmlConfigurator(Watch = true)] namespace DataLoader { public partial class frmLoader : Form { + private bool _Loading = true; + private FolderTreeNode _topnode; + private bool UseVeTree = false; #region Log4Net public static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); #endregion - #region ClassProperties - private int wms = 500; - private static int EDDATA = 0x01; - private static int PH = 0x02; - private static int TOC = 0x04; - private static int AUTOIND = 0x08; - private static int AUTOGEN = 0x40; - - private static int STP_COMMENT = 0; - private static int STP_MULT_CHGID = 1; - private static int STP_LNK_SEQ = 2; - private static int STP_OVR_TAB = 3; - - private string ProcFileName; - private string ProcNumber; - private ROFST rofst; - private int EditSectId; - private Dictionary dicLibDocRef; - - // have a few variables for storing the database id record & the system record. - private Connection dbConn; - private Folder sysFolder; - FolderTreeNode _topnode; + private Loader ldr; + public bool cbSaveDocChecked { get { return cbSaveDoc.Checked; } } + public bool cbSaveRTFChecked { get { return cbSaveRTF.Checked; } } + public TreeView TV { get { return tv; } } + public int pbProcMaximum { get { return pbProc.Maximum; } set { pbProc.Maximum = value; } } + public int pbSectMaximum { get { return pbSect.Maximum; } set { pbSect.Maximum = value; } } + public int pbSectValue { get { return pbSect.Value; } set { pbSect.Value = value; } } + public int pbStepMaximum { get { return pbStep.Maximum; } set { pbStep.Maximum = value; } } + public int pbStepValue { get { return pbStep.Value; } set { pbStep.Value = value; } } + public int pbProcValue { get { return pbProc.Value; } set { pbProc.Value = value; } } - // the following two dictionaries are used to handle migration of the - // transitions... dicTrans_StrDone gets an entry for procnumber, sequence - // number and the new structure id as a step or section is created (transitions - // can go to steps or sections). When a transition is encountered, check this - // dictionary to see if the step or section was migrated & use the structureid - // for the step or section if it was migrated. When a transition is migrated where - // the 'to' has not been migrated yet, check if an entry exists in dicTrans_StrIds, - // if so, use the id listed here. If no entry exists in dicTrans_StrIds, create - // a structure table record and use the id as part of the 'to', and add an entry to - // dicTrans_StpIds to flag that the record was already created. As migrating sections - // and steps, check this dicTrans_StrIds to see if the structure record has already - // been create, if so use it and remove it from the dicTrans_StrIds dictionary, - // otherwise, create a new structure record. - private Dictionary dicTrans_StrDone; - private Dictionary dicTrans_StrIds; - private Dictionary dicOldStepSequence; - private Dictionary dicNeedToLoad; - private bool UseVeTree = false; - #endregion - public frmLoader() + public string Status { + get { return toolStripStatusLabel1.Text; } + set + { + toolStripStatusLabel1.Text = value; + Application.DoEvents(); + } + } + + public string tbSourceText { get { return tbSource.Text; } set { tbSource.Text = value; } } + + public frmLoader() + { + ldr = new Loader(log, this); InitializeComponent(); lblTime.Tag = DateTime.Now; switch (SystemInformation.ComputerName.ToUpper()) @@ -88,7 +73,7 @@ namespace DataLoader //tbSource.Text = "G:\\VEIP2\\PROCS"; // basic data //tbSource.Text = "G:\\VEFNP\\AOP1.PRC"; // test subsections, checkoffs, comments & continuous action flag //tbSource.Text = "G:\\vecal\\eops.bck"; // test link seq STP_LNK_SEQ - tbSource.Text = "G:\\vehlp\\procs";// multiple change ids. + tbSource.Text = "G:\\vewcnckl\\ckl.prc";// multiple change ids. break; case "RHMDESKTOP": //tbSource.Text = @"I:\UNZIPPED ACTIVE BASELINE DATA\vehlp\Procs"; // Sub-sections @@ -97,7 +82,6 @@ namespace DataLoader default: throw new Exception("Not configured for " + SystemInformation.ComputerName); } - dicNeedToLoad = new Dictionary(); } private void btnConvertSelected_Click(object sender, EventArgs e) { @@ -110,23 +94,18 @@ namespace DataLoader return; } object o = tn.VEObject; - //object o = tn.Tag; if (o.GetType() != typeof(DocVersionInfo)) { MessageBox.Show("Must select a version node (working draft, approved, etc)", "No Node Selected"); return; } DocVersion v = ((DocVersionInfo)o).Get(); - int istr = MigrateDocVersion(v.Title); - if (istr > 0) + Item itm = ldr.MigrateDocVersion(v); + if (itm != null) { - - v.StructureID = istr; - v.Title = ""; - v.Save(true); // true forces save. - tn.Checked = true; - //TODO: Walk up structure and set check boxes appropriately. + tn.Checked = true; } + } else { @@ -143,15 +122,10 @@ namespace DataLoader return; } DocVersion v = (DocVersion)o; - int istr = MigrateDocVersion(v.Title); - if (istr > 0) + Item itm = ldr.MigrateDocVersion(v); + if (itm != null) { - - v.StructureID = istr; - v.Title = ""; - v.Save(true); // true forces save. tn.Checked = true; - //TODO: Walk up structure and set check boxes appropriately. } } } @@ -169,8 +143,8 @@ namespace DataLoader { case "Volian.CSLA.Library.FolderInfo": FolderInfo fld = (FolderInfo)o; - if (fld.DocVersionCount>0) - tn.Checked = LoadChildren(fld, tn); // load docversions. + if (fld.ChildFolderCount>0) + tn.Checked = ldr.LoadChildren(fld, tn); // load docversions. break; default: break; @@ -186,61 +160,44 @@ namespace DataLoader if (o.GetType() == typeof(DocVersion)) tbSource.Text = ((DocVersion)o).Title; } - private bool LoadFolders() - { - try - { - // make the initial database connection record - dbConn = Connection.MakeConnection("Default", "Default", "Data Source=.\\SQLEXPRESS;Initial Catalog=VEPROMS;Integrated Security=True", 1, null); - ConfigFile cfg = new ConfigFile(); - - - XmlDocument d = cfg.LoadSystemIni(); - sysFolder = Folder.MakeFolder(0, dbConn.DBID, "system", "system", d.InnerXml); - - // This is to test the vln Libraries - List lfldr = vlnDataPathFolders(); - - List dp2 = new List(); - foreach (Folder fldr in lfldr) - { - TreeNode tn = tv.Nodes.Add(fldr.Name); - tn.Tag = fldr; - vlnObject vb = new vlnObject(null, "datapath", fldr.Name, fldr.Title); - dp2.Add(vb); - vlnServer vs = new vlnServer(); - MigrateChildren(vb, vs, fldr.DBID, fldr.FolderID, tn); - tn.Expand(); - } - } - catch (Exception ex) - { - log.ErrorFormat("Could not load data, error = {0}", ex.Message); - return false; - } - return true; - } + private void btnLoadTreeDB_Click(object sender, EventArgs e) { // When loading folders, i.e. the tree from dBase (old 16-bit) // always clear the data - ClearData(); - bool suc = LoadFolders(); + ldr.ClearData(); + bool suc = ldr.LoadFolders(); } private void btnConvert_Click(object sender, System.EventArgs e) { + Database.LoggingInfo = false; bool success = true; // if purge data, purge it all & reload folders & security. if (cbPurgeData.Checked) { - ClearData(); - success=LoadFolders(); - if (success)success=LoadSecurity(); + ldr.ClearData(); + success=ldr.LoadFolders(); + if (success) success = ldr.LoadSecurity(tbVesamPath.Text); + } + if (success) + { + DateTime tstart = DateTime.Now; + DocVersionInfoList vl = DocVersionInfoList.Get(); + DocVersion v = null; + foreach (DocVersionInfo vi in vl) + { + if (vi.Title.ToUpper() == tbSource.Text.ToUpper()) + { + v = DocVersion.Get(vi.VersionID); + Database.LogInfoFormat("Before MigrateDocVersion"); + Item itm = ldr.MigrateDocVersion(v); + } + } + MessageBox.Show(string.Format("{0} seconds",TimeSpan.FromTicks(DateTime.Now.Ticks-tstart.Ticks).TotalSeconds)); } - if (success) MigrateDocVersion(tbSource.Text); } - private void UpdateLabels(int incPrc, int incSec, int incStp) + public void UpdateLabels(int incPrc, int incSec, int incStp) { if (incPrc == 0 && incSec == 0 && incStp == 0)//Reset { @@ -262,6 +219,7 @@ namespace DataLoader log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException); } } + //Database.LoggingInfo = (pbProc.Value > 153 && pbSect.Value > 11 && pbStep.Value > 61); lblProc.Text = string.Format("{0} Procedures", pbProc.Value); lblSection.Text = string.Format("{0} Sections", pbSect.Value); lblStep.Text = string.Format("{0} Steps", pbStep.Value); @@ -286,89 +244,8 @@ namespace DataLoader { if (cbSaveDoc.Checked) cbSaveRTF.Checked = false; } - private void Wait(int n) - { - DateTime dtw = DateTime.Now.AddSeconds(n); - while (DateTime.Now < dtw) - { - Application.DoEvents(); - } - } - private void WaitMS(int n) - { - DateTime dtw = DateTime.Now.AddMilliseconds(n); - while (DateTime.Now < dtw) - { - Application.DoEvents(); - } - } - private void ClearData() - { - Database.PurgeData(); - } - public static string MakeDate(string src) - { - if (src.Trim() == "") return null; - int[] DateOffset ={ 4, 5, 47, 6, 7, 47, 0, 1, 2, 3 }; // 47 = '/' - StringBuilder datebuff = new StringBuilder(10); - for (int i = 0; i < DateOffset.Length; i++) - { - if (DateOffset[i] < 9) - datebuff.Append(src[DateOffset[i]]); - else - datebuff.Append(System.Convert.ToChar(DateOffset[i])); - } - return datebuff.ToString(); - } - private DateTime GetDTS(string date, string time) - { - // Set the date/time stamp. If there is no 'date', set the date - // to 1/1/2000 (this can be changed!). If there is not 'time', - // set the time to 0:0:0 (midnight). - DateTime dts = DateTime.Now; - string month = "01"; - string day = "01"; - string year = "2000"; - string hour = ""; - string minute = ""; - try - { - if (date != null && date != "") - { - int indx1 = date.IndexOf("/"); - month = date.Substring(0, indx1); - int indx2 = date.IndexOf("/", indx1 + 1); - day = date.Substring(indx1 + 1, indx2 - indx1 - 1); - year = date.Substring(indx2 + 1, 4); - } - if (time == null || time == "") - { - hour = "0"; - minute = "0"; - } - else - { - - hour = time.Substring(0, 2); - int indxc = time.IndexOfAny(":A-".ToCharArray()); - if (indxc == time.Length - 1) - minute = time.Substring(2, 2); - else - minute = time.Substring(indxc + 1, time.Length - indxc - 1); - } - dts = new DateTime(System.Convert.ToInt32(year), System.Convert.ToInt32(month), System.Convert.ToInt32(day), - System.Convert.ToInt32(hour), System.Convert.ToInt32(minute), 0); - } - catch (Exception ex) - { - log.ErrorFormat("DATE/TIME {0} {1}", date, time); - log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException); - log.ErrorFormat(ex.StackTrace); - return dts; - } - return dts; - } + private void btnLoadTreeCSLA_Click(object sender, EventArgs e) { _topnode = FolderTreeNode.BuildTreeList(); @@ -384,26 +261,21 @@ namespace DataLoader tbVesamPath.Text = fbd.SelectedPath; } - private bool LoadSecurity() - { - Security sec = new Security(tbVesamPath.Text); - return sec.Migrate(); - } private void btnVesam_Click(object sender, EventArgs e) { // if purge data, purge it all & reload folders. if (cbPurgeData.Checked) { - ClearData(); - LoadFolders(); + ldr.ClearData(); + ldr.LoadFolders(); } - bool sec = LoadSecurity(); + bool sec = ldr.LoadSecurity(tbVesamPath.Text); } private void btnVETree_CSLA_Click(object sender, EventArgs e) { - tv.Nodes.Add(VEFolder.LoadTree()); + tv.Nodes.Add(VETreeNode.GetFolder(1)); UseVeTree = true; } @@ -412,5 +284,69 @@ namespace DataLoader GroupProp f = new GroupProp(); f.ShowDialog(); } + + private void tbSource_TextChanged(object sender, EventArgs e) + { + + } + + private void btnCtTok_Click(object sender, EventArgs e) + { + frmCntTkn frm = new frmCntTkn(); + frm.ShowDialog(); + } + public void UpdateLabelsSetProc(int prc) + { + pbProc.Maximum = prc; + } + public void UpdateLabelsSetSect(int sec) + { + pbSect.Maximum = sec; + } + public void UpdateLabelsLibDocs(int incLib, int incUsages) + { + if (incLib == 0 && incUsages == 0)//Reset + { + lblTime.Tag = DateTime.Now; + pbProc.Value = 0; + pbSect.Value = 0; + } + else + { + pbProc.Value += incLib; + pbSect.Value += incUsages; + } + lblProc.Text = string.Format("{0} Lib Docs", pbProc.Value); + lblSection.Text = string.Format("{0} Usages", pbSect.Value); + lblStep.Text = ""; + TimeSpan ts = new TimeSpan(DateTime.Now.Ticks - ((DateTime)lblTime.Tag).Ticks); + lblTime.Text = string.Format("{0:D2}:{1:D2}:{2:D2} Elapsed", ts.Hours, ts.Minutes, ts.Seconds); + Application.DoEvents(); + } + + private void frmLoader_Load(object sender, EventArgs e) + { + if (Properties.Settings.Default["VeSamFilename"] != null) + this.tbVesamPath.Text = Properties.Settings.Default.VeSamFilename; + if (Properties.Settings.Default["DbfPathname"] != null) + this.tbSource.Text = Properties.Settings.Default.DbfPathname; + if (Properties.Settings.Default["LoadWordDoc"] != null) + this.cbSaveDoc.CheckState = Properties.Settings.Default.LoadWordDoc; + if (Properties.Settings.Default["PurgeData"] != null) + this.cbPurgeData.CheckState = Properties.Settings.Default.PurgeData; + if (Properties.Settings.Default["LoadRTFDoc"] != null) + this.cbSaveRTF.CheckState = Properties.Settings.Default.LoadRTFDoc; + _Loading = false; + } + + private void frmLoader_FormClosing(object sender, FormClosingEventArgs e) + { + Properties.Settings.Default.VeSamFilename = tbVesamPath.Text; + Properties.Settings.Default.DbfPathname = tbSource.Text; + Properties.Settings.Default.LoadWordDoc = cbSaveDoc.CheckState; + Properties.Settings.Default.LoadRTFDoc = cbSaveRTF.CheckState; + Properties.Settings.Default.PurgeData = cbPurgeData.CheckState; + Properties.Settings.Default.Save(); + } } } \ No newline at end of file diff --git a/PROMS/DataLoader/frmLoader.resx b/PROMS/DataLoader/frmLoader.resx index 3edce43f..b52c185f 100644 --- a/PROMS/DataLoader/frmLoader.resx +++ b/PROMS/DataLoader/frmLoader.resx @@ -120,4 +120,7 @@ 17, 17 + + 84, 17 + \ No newline at end of file