using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using VEPROMS.CSLA.Library; using Volian.Base.Library; using System.Xml; using System.IO; using Ionic.Zip; namespace DataLoader { public partial class dlgExportImport : Form { private Dictionary oldFormat; private Dictionary newFormat; private int oldRODbID; private int newRODbID; private FolderInfo _MyNewFolder; public FolderInfo MyNewFolder { get { return _MyNewFolder; } } private string PEIPath; private string _MyMode; private FolderInfo MyFolder = null; private ProcedureInfo MyProcedure = null; private XmlAttribute AddAttribute(XmlDocument xd, string name, string value) { XmlAttribute xa = xd.CreateAttribute(name); xa.InnerText = value; return xa; } public dlgExportImport(string mode, FolderInfo folderInfo) { _MyMode = mode; MyFolder = folderInfo; InitializeComponent(); this.Text = mode + " Dialog for " + folderInfo.Name; } public dlgExportImport(string mode, ProcedureInfo procedureInfo) { _MyMode = mode; MyProcedure = procedureInfo; InitializeComponent(); this.Text = mode + " Dialog for " + procedureInfo.DisplayNumber; } private void dlgExportImport_Load(object sender, EventArgs e) { PEIPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\VEPROMS\PEI_" + Database.VEPROMS_SqlConnection.Database; if (!Directory.Exists(PEIPath)) Directory.CreateDirectory(PEIPath); if (_MyMode == "Import") { if (MyFolder.ChildFolderCount == 0) { Directory.Delete(PEIPath, true); Directory.CreateDirectory(PEIPath); } } pnlExport.Dock = DockStyle.Fill; pnlImport.Dock = DockStyle.Fill; if (_MyMode.ToLower() == "export") { sfd.InitialDirectory = PEIPath; pnlExport.BringToFront(); } else { ofd.InitialDirectory = PEIPath; pnlImport.BringToFront(); } this.Height = this.Height / 2; } private void btnExport_Click(object sender, EventArgs e) { if (MyFolder != null) { sfd.FileName = string.Format("{0}.expx", MyFolder.Name); if (sfd.ShowDialog(this) == DialogResult.OK) { if (sfd.FileName != string.Empty) { txtExport.Text = sfd.FileName; if (File.Exists(txtExport.Text)) File.Delete(txtExport.Text); MyExpxZipFile = new ZipFile(txtExport.Text, Encoding.UTF8); MyExpxZipFile.Save(); } } } else if (MyProcedure != null) { txtExport.Text = string.Format(@"{0}\{1}.xml", PEIPath, MyProcedure.DisplayNumber); } } private void txtExport_TextChanged(object sender, EventArgs e) { btnDoExport.Enabled = txtExport.TextLength > 0; if (btnDoExport.Enabled) lblExportStatus.Text = "Ready To Perform Export"; else lblExportStatus.Text = "Awaiting Export File Name:"; } private XmlWriter MyWriter = null; private ZipFile MyExpxZipFile = null; private ZipFile MyImpxZipFile = null; private DateTime MyStart; private void btnDoExport_Click(object sender, EventArgs e) { btnExport.Enabled = false; if (MyFolder != null) { this.Cursor = Cursors.WaitCursor; MyStart = DateTime.Now; btnDoExport.Enabled = false; lblExportStatus.Text = "Performing Export"; SaveExportData(); //SaveExportDataWriter(); TimeSpan elapsed = DateTime.Now.Subtract(MyStart); lblExportStatus.Text = "Export Completed in " + elapsed.ToString(); this.Cursor = Cursors.Default; } else if (MyProcedure != null) { this.Cursor = Cursors.WaitCursor; MyStart = DateTime.Now; btnDoExport.Enabled = false; lblExportStatus.Text = "Performing Export"; XmlDocument xd = new XmlDocument(); ExportItem(xd, MyProcedure, "procedure"); xd.Save(txtExport.Text); TimeSpan elapsed = DateTime.Now.Subtract(MyStart); lblExportStatus.Text = "Export Completed in " + elapsed.ToString(); this.Cursor = Cursors.Default; } btnCloseExport.Enabled = true; } private void SaveExportData() { XmlDocument xd = new XmlDocument(); ExportFolder(xd, MyFolder, "folder"); } private void SaveExportDataWriter() { XmlWriterSettings ws = new XmlWriterSettings(); ws.Indent = true; ws.NewLineHandling = NewLineHandling.Entitize; ws.CheckCharacters = false; MyWriter = XmlWriter.Create(txtExport.Text, ws); ExportFolder(MyFolder, "folder"); MyWriter.Close(); } private void btnDoImport_Click(object sender, EventArgs e) { btnImport.Enabled = false; this.Cursor = Cursors.WaitCursor; MyStart = DateTime.Now; btnDoImport.Enabled = false; lblImportStatus.Text = "Performing Import"; //LoadImportDataReader(); TurnChangeManagerOff.Execute(); LoadImportDataDocument(); TurnChangeManagerOn.Execute(); TimeSpan elapsed = DateTime.Now.Subtract(MyStart); lblImportStatus.Text = "Import Completed in " + elapsed.ToString(); this.Cursor = Cursors.Default; btnCloseImport.Enabled = true; } private void LoadImportDataDocument() { ZipEntry ze = MyExpxZipFile[0]; string fn = PEIPath + @"\" + ze.FileName; ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently); XmlDocument xd = new XmlDocument(); xd.Load(fn); LoadFormats(xd); Folder ff = AddFolder(Folder.Get(MyFolder.FolderID), xd); _MyNewFolder = FolderInfo.Get(ff.FolderID); AddAnnotationTypes(xd); DocVersionInfo dvi = AddDocVersion(ff, xd); xd = null; lblImportStatus.Text = "Creating Procedures..."; Application.DoEvents(); ProcedureInfo pi = null; pbImportProcedure.Value = 0; pbImportProcedure.Maximum = MyExpxZipFile.Entries.Count - 1; for (int i = 1; i < MyExpxZipFile.Entries.Count; i++) { ze = MyExpxZipFile[i]; fn = PEIPath + @"\" + ze.FileName; ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently); xd = new XmlDocument(); xd.Load(fn); pi = AddProcedure(xd.DocumentElement, dvi, pi); } DirectoryInfo di = new DirectoryInfo(PEIPath); DirectoryInfo[] dis = di.GetDirectories(); for (int d = 0; d < dis.Length; d++) dis[d].Delete(true); lblImportStatus.Text = "Updating Transitions"; AddTransitions(); SaveTransitionAndItemContentIDs(); } private void LoadFormats(XmlDocument xd) { oldFormat = new Dictionary(); XmlNodeList nl = xd.SelectNodes("folder/formats/format"); foreach (XmlNode nd in nl) { int formatid = int.Parse(nd.Attributes.GetNamedItem("formatid").InnerText); string name = nd.Attributes.GetNamedItem("name").InnerText; oldFormat.Add(formatid, name); } newFormat = new Dictionary(); FormatInfoList fil = FormatInfoList.Get(); foreach (FormatInfo fi in fil) newFormat.Add(fi.Name, fi.FormatID); } Dictionary dicParentItem = null; private void UpdateParentItem(int depth, ItemInfo ii) { if (dicParentItem == null) dicParentItem = new Dictionary(); if (!dicParentItem.ContainsKey(depth)) dicParentItem.Add(depth, null); dicParentItem[depth] = ii; } Dictionary dicPreviousItem = null; private void UpdatePreviousItem(int depth, ItemInfo ii) { if (dicPreviousItem == null) dicPreviousItem = new Dictionary(); if (!dicPreviousItem.ContainsKey(depth)) dicPreviousItem.Add(depth, null); dicPreviousItem[depth] = ii; } Dictionary dicItemDepth = null; private void UpdateItemDepth(int depth, int id) { if (dicItemDepth == null) dicItemDepth = new Dictionary(); if (!dicItemDepth.ContainsKey(depth)) dicItemDepth.Add(depth, 0); dicItemDepth[depth] = id; } private void LoadImportDataReader() { int pCount = 0; int sCount = 0; Folder folder = null; DocVersion docversion = null; Dictionary dicRofst = null; Dictionary dicEntry = null; ROFst rofst = null; GetImportDataCounts(); pbImportProcedure.Maximum = MyCounts.Count; pbImportProcedure.Value = 0; Application.DoEvents(); FileStream fs = File.OpenRead(txtImport.Text); XmlReaderSettings rs = new XmlReaderSettings(); rs.CheckCharacters = false; XmlReader xr = XmlReader.Create(fs, rs); while (xr.Read()) { if (xr.IsStartElement()) { switch (xr.Name) { case "annotation": AddAnnotation(xr); break; //case "association": // break; case "content": { if (xr.Depth == 3) //content for procedure { ItemInfo ii = AddProcedure(xr, docversion, dicPreviousItem[xr.Depth], dicItemDepth[xr.Depth]); UpdatePreviousItem(xr.Depth, ii); UpdateParentItem(xr.Depth, ii); } else { int fromtype = dicItemDepth.ContainsKey(xr.Depth - 2) ? dicItemDepth[xr.Depth - 2] : 0; switch (fromtype) { case 2: { //sections ItemInfo ii = AddSection(xr, dicParentItem[xr.Depth], dicPreviousItem[xr.Depth], dicItemDepth[xr.Depth]); UpdatePreviousItem(xr.Depth, ii); UpdateParentItem(xr.Depth, ii); break; } case 3: { //cautions ItemInfo ii = AddCaution(xr, dicParentItem[xr.Depth], dicPreviousItem[xr.Depth], dicItemDepth[xr.Depth]); UpdatePreviousItem(xr.Depth, ii); UpdateParentItem(xr.Depth, ii); break; } case 4: { //notes ItemInfo ii = AddNote(xr, dicParentItem[xr.Depth], dicPreviousItem[xr.Depth], dicItemDepth[xr.Depth]); UpdatePreviousItem(xr.Depth, ii); UpdateParentItem(xr.Depth, ii); break; } case 5: { //rnos ItemInfo ii = AddRNO(xr, dicParentItem[xr.Depth], dicPreviousItem[xr.Depth], dicItemDepth[xr.Depth]); UpdatePreviousItem(xr.Depth, ii); UpdateParentItem(xr.Depth, ii); break; } case 6: { //steps ItemInfo ii = AddStep(xr, dicParentItem[xr.Depth], dicPreviousItem[xr.Depth], dicItemDepth[xr.Depth]); UpdatePreviousItem(xr.Depth, ii); UpdateParentItem(xr.Depth, ii); break; } case 7: { //tables ItemInfo ii = AddTable(xr, dicParentItem[xr.Depth], dicPreviousItem[xr.Depth], dicItemDepth[xr.Depth]); UpdatePreviousItem(xr.Depth, ii); UpdateParentItem(xr.Depth, ii); break; } default: break; } } break; } case "document": AddDocument(xr, dicEntry); break; case "docversion": { docversion = AddDocVersion(folder, xr); UpdatePreviousItem(xr.Depth + 2, null); break; } case "entry": dicEntry = AddEntry(xr); break; case "folder": folder = AddFolder(Folder.Get(MyFolder.FolderID), xr); break; case "grid": AddGrid(xr); break; case "procedure": { UpdateItemDepth(xr.Depth + 1, int.Parse(xr.GetAttribute("itemid"))); pbImportProcedure.PerformStep(); lblImportProcedure.Text = string.Format("{0} of {1} Procedures", pbImportProcedure.Value.ToString(), pbImportProcedure.Maximum.ToString()); pCount++; pbImportSection.Maximum = MyCounts[pCount].Count; pbImportSection.Value = 0; sCount = 0; Application.DoEvents(); break; } case "section": { UpdateItemDepth(xr.Depth + 1, int.Parse(xr.GetAttribute("itemid"))); pbImportSection.PerformStep(); lblImportSection.Text = string.Format("{0} of {1} Sections", pbImportSection.Value.ToString(), pbImportSection.Maximum.ToString()); sCount++; pbImportStep.Maximum = MyCounts[pCount][sCount]; pbImportStep.Value = 0; Application.DoEvents(); break; } case "step": { UpdateItemDepth(xr.Depth + 1, int.Parse(xr.GetAttribute("itemid"))); if (xr.Depth == 8) { pbImportStep.PerformStep(); lblImportStep.Text = string.Format("{0} of {1} Steps", pbImportStep.Value.ToString(), pbImportStep.Maximum.ToString()); Application.DoEvents(); } break; } case "caution": case "note": case "rno": case "table": UpdateItemDepth(xr.Depth + 1, int.Parse(xr.GetAttribute("itemid"))); break; case "cautions": case "notes": case "rnos": case "sections": case "steps": case "tables": { UpdateItemDepth(xr.Depth, int.Parse(xr.GetAttribute("fromtype"))); UpdatePreviousItem(xr.Depth + 2, null); UpdateParentItem(xr.Depth + 2, dicParentItem[xr.Depth - 1]); break; } case "rodb": { MyRODb = AddRODb(xr); rofst = AddROFst(dicRofst); docversion.DocVersionAssociations.Add(rofst); docversion.Save(); break; } case "rofst": dicRofst = GetROFstData(xr); break; case "rousage": AddROUsage(xr); break; //case "transition": // break; default: break; } Console.WriteLine("{0} - {1}", xr.Name, xr.Depth.ToString()); } } pbImportProcedure.PerformStep(); Application.DoEvents(); fs.Close(); FixImportDataTransitions(); StoreItemContentIDs(); ResolveExternalTransitions(folder); } private void SaveTransitionAndItemContentIDs() { XmlDocument xd = new XmlDocument(); XmlElement xe = xd.CreateElement("items"); xd.AppendChild(xe); string fn = PEIPath + @"\items.xml"; foreach (int key in Old2NewItem.Keys) { xe = xd.CreateElement("item"); xe.Attributes.SetNamedItem(AddAttribute(xd, "old", key.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xd, "new", Old2NewItem[key].ToString())); xd.DocumentElement.AppendChild(xe); } xd.Save(fn); ZipEntry ze = MyImpxZipFile["items.xml"]; MyImpxZipFile.RemoveEntry(ze); MyImpxZipFile.Save(); MyImpxZipFile.AddFile(fn, ""); MyImpxZipFile.Save(); File.Delete(fn); xd = new XmlDocument(); xe = xd.CreateElement("contents"); xd.AppendChild(xe); fn = PEIPath + @"\contents.xml"; foreach (int key in Old2NewContent.Keys) { xe = xd.CreateElement("content"); xe.Attributes.SetNamedItem(AddAttribute(xd, "old", key.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xd, "new", Old2NewContent[key].ToString())); xd.DocumentElement.AppendChild(xe); } xd.Save(fn); ze = MyImpxZipFile["contents.xml"]; MyImpxZipFile.RemoveEntry(ze); MyImpxZipFile.Save(); MyImpxZipFile.AddFile(fn, ""); MyImpxZipFile.Save(); File.Delete(fn); xd = new XmlDocument(); xe = xd.CreateElement("transitions"); xd.AppendChild(xe); fn = PEIPath + @"\transitions.xml"; if (PendingTransitions != null && PendingTransitions.DocumentElement.HasChildNodes) { foreach (XmlNode nd in PendingTransitions.DocumentElement.ChildNodes) { if(nd.InnerText == "") xd.DocumentElement.AppendChild(xd.ImportNode(nd, true)); } xd.Save(fn); } ze = MyImpxZipFile["transitions.xml"]; MyImpxZipFile.RemoveEntry(ze); MyImpxZipFile.Save(); MyImpxZipFile.AddFile(fn, ""); MyImpxZipFile.Save(); File.Delete(fn); } private void StoreItemContentIDs() { XmlDocument xd = new XmlDocument(); string fn = PEIPath + @"\ExternalTransitions.xml"; xd.Load(fn); XmlElement xe = (XmlElement)xd.SelectSingleNode("externaltransitions/oldtonewitem"); foreach (int key in Old2NewItem.Keys) { XmlElement xee = xd.CreateElement("item"); XmlAttribute xa = AddAttribute(xd, "old", key.ToString()); xee.Attributes.SetNamedItem(xa); xa = AddAttribute(xd, "new", Old2NewItem[key].ToString()); xee.Attributes.SetNamedItem(xa); xe.AppendChild(xee); } xd.Save(fn); xe = (XmlElement)xd.SelectSingleNode("externaltransitions/oldtonewcontent"); foreach (int key in Old2NewContent.Keys) { XmlElement xee = xd.CreateElement("content"); XmlAttribute xa = AddAttribute(xd, "old", key.ToString()); xee.Attributes.SetNamedItem(xa); xa = AddAttribute(xd, "new", Old2NewContent[key].ToString()); xee.Attributes.SetNamedItem(xa); xe.AppendChild(xee); } xd.Save(fn); } private void ResolveExternalTransitions(Folder folder) { XmlDocument xd = new XmlDocument(); string fn = PEIPath + @"\ExternalTransitions.xml"; xd.Load(fn); AddStoredItemContentIDs(xd); XmlNodeList nl = xd.SelectNodes("//transition[@folder!='']"); foreach (XmlNode nd in nl) { int transitionid = int.Parse(nd.Attributes.GetNamedItem("transitionid").InnerText); int fromid = int.Parse(nd.Attributes.GetNamedItem("fromid").InnerText); int toid = int.Parse(nd.Attributes.GetNamedItem("toid").InnerText); int rangeid = int.Parse(nd.Attributes.GetNamedItem("rangeid").InnerText); if (Old2NewContent.ContainsKey(fromid) && Old2NewItem.ContainsKey(toid) && Old2NewItem.ContainsKey(rangeid)) { int isrange = int.Parse(nd.Attributes.GetNamedItem("isrange").InnerText); int trantype = int.Parse(nd.Attributes.GetNamedItem("trantype").InnerText); string config = nd.Attributes.GetNamedItem("config").InnerText; string userid = nd.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(nd.Attributes.GetNamedItem("dts").InnerText); string lookfor; if (isrange == 0) lookfor = string.Format("#Link:Transition:{0} {1} {2}", trantype, transitionid, toid); else lookfor = string.Format("#Link:TransitionRange:{0} {1} {2} {3}", trantype, transitionid, toid, rangeid); fromid = Old2NewContent[fromid]; toid = Old2NewItem[toid]; rangeid = Old2NewItem[rangeid]; Content cc = Content.Get(fromid); Transition tt = Transition.MakeTransition(cc, Item.Get(toid), Item.Get(rangeid), isrange, trantype, config, dts, userid); transitionid = tt.TransitionID; string replacewith; if (isrange == 0) replacewith = string.Format("#Link:Transition:{0} {1} {2}", trantype, transitionid, toid); else replacewith = string.Format("#Link:TransitionRange:{0} {1} {2} {3}", trantype, transitionid, toid, rangeid); cc.Text = cc.Text.Replace(lookfor, replacewith); cc.Save(); nd.Attributes.GetNamedItem("folder").InnerText = ""; } } xd.Save(fn); } private void ReadTransitionAndItemContentIDs() { ZipEntry ze = MyImpxZipFile["items.xml"]; ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently); string fn = PEIPath + @"\items.xml"; XmlDocument xd = new XmlDocument(); xd.Load(fn); XmlNodeList nl = xd.SelectNodes("//item"); foreach (XmlNode nd in nl) { int oldid = int.Parse(nd.Attributes.GetNamedItem("old").InnerText); int newid = int.Parse(nd.Attributes.GetNamedItem("new").InnerText); //if (!Old2NewItem.ContainsKey(oldid)) Old2NewItem.Add(oldid, newid); } ze = MyImpxZipFile["contents.xml"]; ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently); fn = PEIPath + @"\contents.xml"; xd = new XmlDocument(); xd.Load(fn); nl = xd.SelectNodes("//content"); foreach (XmlNode nd in nl) { int oldid = int.Parse(nd.Attributes.GetNamedItem("old").InnerText); int newid = int.Parse(nd.Attributes.GetNamedItem("new").InnerText); //if (!Old2NewContent.ContainsKey(oldid)) Old2NewContent.Add(oldid, newid); } ze = MyImpxZipFile["libdocs.xml"]; ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently); fn = PEIPath + @"\libdocs.xml"; xd = new XmlDocument(); xd.Load(fn); nl = xd.SelectNodes("//libdoc"); foreach (XmlNode nd in nl) { int oldid = int.Parse(nd.Attributes.GetNamedItem("old").InnerText); int newid = int.Parse(nd.Attributes.GetNamedItem("new").InnerText); //if (!Old2NewContent.ContainsKey(oldid)) Old2NewLibDoc.Add(oldid, newid); } ze = MyImpxZipFile["transitions.xml"]; ze.Extract(PEIPath, ExtractExistingFileAction.OverwriteSilently); fn = PEIPath + @"\transitions.xml"; PendingTransitions.Load(fn); } private void AddStoredItemContentIDs(XmlDocument xd) { XmlNodeList nl = xd.SelectNodes("//item"); foreach (XmlNode nd in nl) { int oldid = int.Parse(nd.Attributes.GetNamedItem("old").InnerText); int newid = int.Parse(nd.Attributes.GetNamedItem("new").InnerText); if (!Old2NewItem.ContainsKey(oldid)) Old2NewItem.Add(oldid, newid); } nl = xd.SelectNodes("//content"); foreach (XmlNode nd in nl) { int oldid = int.Parse(nd.Attributes.GetNamedItem("old").InnerText); int newid = int.Parse(nd.Attributes.GetNamedItem("new").InnerText); if (!Old2NewContent.ContainsKey(oldid)) Old2NewContent.Add(oldid, newid); } } private void FixImportDataTransitions() { XmlDocument xd = new XmlDocument(); string fn = PEIPath + @"\ExternalTransitions.xml"; if (!File.Exists(fn)) { XmlElement xe = xd.CreateElement("externaltransitions"); XmlElement xee = xd.CreateElement("oldtonewitem"); xe.AppendChild(xee); xee = xd.CreateElement("oldtonewcontent"); xe.AppendChild(xee); xee = xd.CreateElement("transitions"); xe.AppendChild(xee); xd.AppendChild(xe); xd.Save(fn); } else { xd.Load(fn); } FileStream fs = File.OpenRead(txtImport.Text); XmlReaderSettings rs = new XmlReaderSettings(); rs.CheckCharacters = false; XmlReader xr = XmlReader.Create(fs, rs); while (xr.Read()) { if (xr.IsStartElement()) { switch (xr.Name) { case "transition": AddTransitions(xr); break; case "externaltransition": { AddExternalTransition(xr, xd); break; } default: break; } } } fs.Close(); xd.Save(fn); } private Dictionary> MyCounts = null; private Dictionary MySubCounts = null; private void GetImportDataCounts() { int pCount = 0; int sCount = 0; int tCount = 0; MyCounts = new Dictionary>(); MySubCounts = new Dictionary(); FileStream fs = File.OpenRead(txtImport.Text); XmlReaderSettings rs = new XmlReaderSettings(); rs.CheckCharacters = false; XmlReader xr = XmlReader.Create(fs, rs); while (xr.Read()) { if (xr.IsStartElement()) { switch (xr.Name) { case "procedure": { if (pCount > 0) { MySubCounts.Add(sCount, tCount); MyCounts.Add(pCount, MySubCounts); sCount = 0; tCount = 0; MySubCounts = new Dictionary(); } pCount++; break; } case "section": { if (sCount > 0) { MySubCounts.Add(sCount, tCount); tCount = 0; } sCount++; break; } case "step": { if (xr.Depth == 8) tCount++; break; } default: break; } } } MySubCounts.Add(sCount, tCount); MyCounts.Add(pCount, MySubCounts); fs.Close(); } private void btnImport_Click(object sender, EventArgs e) { if (ofd.ShowDialog(this) == DialogResult.OK) { if (ofd.FileName != string.Empty) { Old2NewItem = new Dictionary(); Old2NewContent = new Dictionary(); Old2NewLibDoc = new Dictionary(); PendingTransitions = new XmlDocument(); FileInfo fi = new FileInfo(ofd.FileName); string dn = fi.Directory.Name; txtImport.Text = ofd.FileName; ReadOptions ro = new ReadOptions(); ro.Encoding = Encoding.UTF8; MyExpxZipFile = ZipFile.Read(txtImport.Text, ro); string fn = string.Format(@"{0}\{1}.impx", PEIPath, dn); if (File.Exists(fn)) { MyImpxZipFile = ZipFile.Read(fn, ro); ReadTransitionAndItemContentIDs(); } else { MyImpxZipFile = new ZipFile(fn, Encoding.UTF8); //transitions XmlElement xe = PendingTransitions.CreateElement("transitions"); PendingTransitions.AppendChild(xe); fn = PEIPath + @"\transitions.xml"; PendingTransitions.Save(fn); MyImpxZipFile.AddFile(fn, ""); MyImpxZipFile.Save(); //File.Delete(fn); //itemids XmlDocument xd = new XmlDocument(); xe = xd.CreateElement("items"); xd.AppendChild(xe); fn = PEIPath + @"\items.xml"; xd.Save(fn); MyImpxZipFile.AddFile(fn, ""); MyImpxZipFile.Save(); File.Delete(fn); //contentids xd = new XmlDocument(); xe = xd.CreateElement("contents"); xd.AppendChild(xe); fn = PEIPath + @"\contents.xml"; xd.Save(fn); MyImpxZipFile.AddFile(fn, ""); MyImpxZipFile.Save(); File.Delete(fn); //libdocids xd = new XmlDocument(); xe = xd.CreateElement("libdocs"); xd.AppendChild(xe); fn = PEIPath + @"\libdocs.xml"; xd.Save(fn); MyImpxZipFile.AddFile(fn, ""); MyImpxZipFile.Save(); File.Delete(fn); } } } } private void txtImport_TextChanged(object sender, EventArgs e) { btnDoImport.Enabled = txtImport.TextLength > 0; if (btnDoImport.Enabled) lblImportStatus.Text = "Ready To Perform Import"; else lblImportStatus.Text = "Awaiting Import File Name:"; } #region Export for Merge private string FromFolderName = string.Empty; private void ExportFolder(XmlDocument xd, FolderInfo fi, string nodename) { /* FolderID ParentID DBID Name Title ShortName FormatID ManualOrder Config DTS UsrID */ lblExportStatus.Text = "Exporting Folder..."; Application.DoEvents(); FromFolderName = fi.Name; XmlElement xe = xd.CreateElement(nodename); xe.Attributes.SetNamedItem(AddAttribute(xd, "folderid", fi.FolderID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xd, "parentid", fi.ParentID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xd, "dbid", fi.DBID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xd, "name", fi.Name)); xe.Attributes.SetNamedItem(AddAttribute(xd, "title", fi.Title)); xe.Attributes.SetNamedItem(AddAttribute(xd, "shortname", fi.ShortName)); xe.Attributes.SetNamedItem(AddAttribute(xd, "formatid", fi.FormatID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xd, "manualorder", fi.ManualOrder.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xd, "config", fi.Config)); xe.Attributes.SetNamedItem(AddAttribute(xd, "dts", fi.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); xe.Attributes.SetNamedItem(AddAttribute(xd, "usrid", fi.UsrID.ToString())); xd.AppendChild(xe); ExportAnnotationTypes(xe, "annotationtypes"); ExportFormats(xe, "formats"); if (fi.FolderDocVersionCount > 0) foreach (DocVersionInfo dvi in fi.FolderDocVersions) ExportDocVersion(xe, dvi, "docversion"); } private void ExportFormats(XmlElement xn, string nodename) { XmlElement xe = xn.OwnerDocument.CreateElement(nodename); FormatInfoList fil = FormatInfoList.Get(); foreach (FormatInfo fi in fil) ExportFormat(xe, fi, "format"); xn.AppendChild(xe); } private void ExportFormat(XmlElement xn, FormatInfo fi, string nodename) { XmlElement xe = xn.OwnerDocument.CreateElement(nodename); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "formatid", fi.FormatID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "name", fi.Name)); xn.AppendChild(xe); } private void ExportAnnotationTypes(XmlElement xn, string nodename) { XmlElement xe = xn.OwnerDocument.CreateElement(nodename); AnnotationTypeInfoList atl = AnnotationTypeInfoList.Get(); foreach (AnnotationTypeInfo ati in atl) ExportAnnotationType(xe, ati, "annotationtype"); xn.AppendChild(xe); } private void ExportAnnotationType(XmlElement xn, AnnotationTypeInfo ati, string nodename) { /* TypeID Name Config DTS UserID */ XmlElement xe = xn.OwnerDocument.CreateElement(nodename); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "typeid", ati.TypeID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "name", ati.Name)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "config", ati.Config)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", ati.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", ati.UserID.ToString())); xn.AppendChild(xe); } private void ExportFolder(FolderInfo fi, string nodename) { /* FolderID ParentID DBID Name Title ShortName FormatID ManualOrder Config DTS UsrID */ FromFolderName = fi.Name; MyWriter.WriteStartDocument(); MyWriter.WriteStartElement(nodename); MyWriter.WriteAttributeString("folderid", fi.FolderID.ToString()); MyWriter.WriteAttributeString("parentid", fi.ParentID.ToString()); MyWriter.WriteAttributeString("dbid", fi.DBID.ToString()); MyWriter.WriteAttributeString("name", fi.Name); MyWriter.WriteAttributeString("title", fi.Title); MyWriter.WriteAttributeString("shortname", fi.ShortName); MyWriter.WriteAttributeString("formatid", fi.FormatID.ToString()); MyWriter.WriteAttributeString("manualorder", fi.ManualOrder.ToString()); MyWriter.WriteAttributeString("config", fi.Config); MyWriter.WriteAttributeString("dts", fi.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); MyWriter.WriteAttributeString("usrid", fi.UsrID.ToString()); if (fi.FolderDocVersionCount > 0) foreach (DocVersionInfo dvi in fi.FolderDocVersions) ExportDocVersion(dvi, "docversion"); MyWriter.WriteEndElement(); MyWriter.WriteEndDocument(); } private void ExportDocVersion(XmlElement xn, DocVersionInfo dvi, string nodename) { /* VersionID FolderID VersionType Name Title ItemID FormatID Config DTS UserID */ lblExportStatus.Text = "Exporting DocVersion..."; Application.DoEvents(); XmlElement xe = xn.OwnerDocument.CreateElement(nodename); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "versionid", dvi.VersionID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "folderid", dvi.FolderID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "versiontype", dvi.VersionType.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "name", dvi.Name)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "title", dvi.Title)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "itemid", dvi.ItemID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "formatid", dvi.FormatID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "config", dvi.Config)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", dvi.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", dvi.UserID.ToString())); xn.AppendChild(xe); if (dvi.DocVersionAssociationCount > 0) foreach (AssociationInfo ai in dvi.DocVersionAssociations) ExportAssociation(xe, ai, "association"); string fn = PEIPath + @"\folder.xml"; xn.OwnerDocument.Save(fn); MyExpxZipFile.AddFile(fn, "folder"); MyExpxZipFile.Save(); File.Delete(fn); //here lblExportStatus.Text = "Exporting Procedures..."; Application.DoEvents(); if (dvi.Procedures.Count > 0) { pbExportProcedure.Value = 0; pbExportProcedure.Maximum = dvi.Procedures.Count; lblExportProcedure.Text = pbExportProcedure.Maximum.ToString() + " Procedures"; foreach (ItemInfo ii in dvi.Procedures) { XmlDocument xd = new XmlDocument(); ExportItem(xd, ii, "procedure"); fn = string.Format(@"{0}\proc{1}.xml", PEIPath, pbExportProcedure.Value.ToString().PadLeft(4, '0')); xd.Save(fn); MyExpxZipFile.AddFile(fn, "procedures"); MyExpxZipFile.Save(); File.Delete(fn); xd = null; } } } private void ExportDocVersion(DocVersionInfo dvi, string nodename) { /* VersionID FolderID VersionType Name Title ItemID FormatID Config DTS UserID */ MyWriter.WriteStartElement(nodename); MyWriter.WriteAttributeString("versionid", dvi.VersionID.ToString()); MyWriter.WriteAttributeString("folderid", dvi.FolderID.ToString()); MyWriter.WriteAttributeString("versiontype", dvi.VersionType.ToString()); MyWriter.WriteAttributeString("name", dvi.Name); MyWriter.WriteAttributeString("title", dvi.Title); MyWriter.WriteAttributeString("itemid", dvi.ItemID.ToString()); MyWriter.WriteAttributeString("formatid", dvi.FormatID.ToString()); MyWriter.WriteAttributeString("config", dvi.Config); MyWriter.WriteAttributeString("dts", dvi.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); MyWriter.WriteAttributeString("userid", dvi.UserID.ToString()); if (dvi.DocVersionAssociationCount > 0) foreach (AssociationInfo ai in dvi.DocVersionAssociations) ExportAssociation(ai, "association"); if (dvi.Procedures.Count > 0) { pbExportProcedure.Value = 0; pbExportProcedure.Maximum = dvi.Procedures.Count; lblExportProcedure.Text = pbExportProcedure.Maximum.ToString() + " Procedures"; foreach (ItemInfo ii in dvi.Procedures) { ExportItem(ii, "procedure"); } } MyWriter.WriteEndElement(); } private void ExportAssociation(XmlElement xn, AssociationInfo ai, string nodename) { /* AssociationID VersionID ROFstID Config DTS UserID */ lblExportStatus.Text = "Exporting Association..."; Application.DoEvents(); XmlElement xe = xn.OwnerDocument.CreateElement(nodename); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "associationid", ai.AssociationID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "versionid", ai.VersionID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "rofstid", ai.ROFstID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "config", ai.Config)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", ai.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", ai.UserID.ToString())); xn.AppendChild(xe); ExportROFst(xe, ai.MyROFst, "rofst"); } private void ExportAssociation(AssociationInfo ai, string nodename) { /* AssociationID VersionID ROFstID Config DTS UserID */ MyWriter.WriteStartElement(nodename); MyWriter.WriteAttributeString("associationid", ai.AssociationID.ToString()); MyWriter.WriteAttributeString("versionid", ai.VersionID.ToString()); MyWriter.WriteAttributeString("rofstid", ai.ROFstID.ToString()); MyWriter.WriteAttributeString("config", ai.Config); MyWriter.WriteAttributeString("dts", ai.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); MyWriter.WriteAttributeString("userid", ai.UserID.ToString()); ExportROFst(ai.MyROFst, "rofst"); MyWriter.WriteEndElement(); } private void ExportROFst(XmlElement xn, ROFstInfo fst, string nodename) { /* ROFstID RODbID ROLookup Config DTS UserID */ lblExportStatus.Text = "Exporting ROFst..."; Application.DoEvents(); XmlElement xe = xn.OwnerDocument.CreateElement(nodename); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "rofstid", fst.ROFstID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "rodbid", fst.RODbID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "rolookup", Convert.ToBase64String(fst.ROLookup))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "config", fst.Config)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", fst.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", fst.UserID.ToString())); xn.AppendChild(xe); ExportRODb(xe, fst.MyRODb, "rodb"); } private void ExportROFst(ROFstInfo fst, string nodename) { /* ROFstID RODbID ROLookup Config DTS UserID */ MyWriter.WriteStartElement(nodename); MyWriter.WriteAttributeString("rofstid", fst.ROFstID.ToString()); MyWriter.WriteAttributeString("rodbid", fst.RODbID.ToString()); MyWriter.WriteAttributeString("rolookup", Convert.ToBase64String(fst.ROLookup)); MyWriter.WriteAttributeString("config", fst.Config); MyWriter.WriteAttributeString("dts", fst.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); MyWriter.WriteAttributeString("userid", fst.UserID.ToString()); ExportRODb(fst.MyRODb, "rodb"); MyWriter.WriteEndElement(); } private void ExportRODb(XmlElement xn, RODbInfo db, string nodename) { /* RODbID ROName FolderPath DBConnectionString Config DTS UserID */ lblExportStatus.Text = "Exporting RODb..."; Application.DoEvents(); XmlElement xe = xn.OwnerDocument.CreateElement(nodename); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "rodbid", db.RODbID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "roname", db.ROName)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "folderpath", db.FolderPath)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dbconnectionstring", db.DBConnectionString)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "config", db.Config)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", db.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", db.UserID.ToString())); xn.AppendChild(xe); } private void ExportRODb(RODbInfo db, string nodename) { /* RODbID ROName FolderPath DBConnectionString Config DTS UserID */ MyWriter.WriteStartElement(nodename); MyWriter.WriteAttributeString("rodbid", db.RODbID.ToString()); MyWriter.WriteAttributeString("roname", db.ROName); MyWriter.WriteAttributeString("folderpath", db.FolderPath); MyWriter.WriteAttributeString("dbconnectionstring", db.DBConnectionString); MyWriter.WriteAttributeString("config", db.Config); MyWriter.WriteAttributeString("dts", db.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); MyWriter.WriteAttributeString("userid", db.UserID.ToString()); MyWriter.WriteEndElement(); } private void ExportItem(XmlDocument xd, ItemInfo ii, string nodename) { XmlElement xe = xd.CreateElement(nodename); xd.AppendChild(xe); ExportItem(xe, ii, nodename); } private void ExportItem(XmlElement xn, ItemInfo ii, string nodename) { /* ItemID PreviousID ContentID DTS */ XmlElement xe = null; if (xn.Name == "procedure") xe = xn; else { xe = xn.OwnerDocument.CreateElement(nodename); xn.AppendChild(xe); } if (ii.IsProcedure) { pbExportProcedure.PerformStep(); lblExportProcedure.Text = string.Format("{0} of {1} Procedures", pbExportProcedure.Value.ToString(), pbExportProcedure.Maximum.ToString()); TimeSpan elapsed = DateTime.Now.Subtract(MyStart); lblExportTime.Text = "Elapsed Time: " + elapsed.ToString(); Application.DoEvents(); pbExportSection.Value = 0; pbExportSection.Maximum = pbExportSection.Value; pbExportStep.Value = 0; pbExportStep.Maximum = pbExportStep.Value; pbExportSection.Maximum = ii.Sections.Count; } if (ii.IsSection && ii.ActiveParent.IsProcedure) { pbExportSection.PerformStep(); lblExportSection.Text = string.Format("{0} of {1} Sections", pbExportSection.Value.ToString(), pbExportSection.Maximum.ToString()); Application.DoEvents(); pbExportStep.Value = 0; pbExportStep.Maximum = pbExportStep.Value; if (ii.Steps != null) pbExportStep.Maximum = ii.Steps.Count; } if (ii.IsStep && ii.ActiveParent.IsSection && ii.ActiveParent.ActiveParent.IsProcedure) { pbExportStep.PerformStep(); lblExportStep.Text = string.Format("{0} of {1} Steps", pbExportStep.Value.ToString(), pbExportStep.Maximum.ToString()); Application.DoEvents(); } xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "itemid", ii.ItemID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "previousid", ii.PreviousID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "contentid", ii.ContentID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", ii.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); ExportContent(xe, ii.MyContent, "content"); if (ii.ItemAnnotationCount > 0) foreach (AnnotationInfo ai in ii.ItemAnnotations) ExportAnnotation(xe, ai, "annotation"); } private void ExportItem(ItemInfo ii, string nodename) { /* ItemID PreviousID ContentID DTS */ if (ii.IsProcedure) { pbExportProcedure.PerformStep(); lblExportProcedure.Text = string.Format("{0} of {1} Procedures", pbExportProcedure.Value.ToString(), pbExportProcedure.Maximum.ToString()); Application.DoEvents(); pbExportSection.Value = 0; pbExportStep.Value = 0; pbExportSection.Maximum = ii.Sections.Count; } if (ii.IsSection) { pbExportSection.PerformStep(); lblExportSection.Text = string.Format("{0} of {1} Sections", pbExportSection.Value.ToString(), pbExportSection.Maximum.ToString()); Application.DoEvents(); pbExportStep.Value = 0; if (ii.Steps != null) pbExportStep.Maximum = ii.Steps.Count; } if (ii.IsStep) { pbExportStep.PerformStep(); lblExportStep.Text = string.Format("{0} of {1} Steps", pbExportStep.Value.ToString(), pbExportStep.Maximum.ToString()); Application.DoEvents(); } MyWriter.WriteStartElement(nodename); MyWriter.WriteAttributeString("itemid", ii.ItemID.ToString()); MyWriter.WriteAttributeString("previousid", ii.PreviousID.ToString()); MyWriter.WriteAttributeString("contentid", ii.ContentID.ToString()); MyWriter.WriteAttributeString("dts", ii.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); ExportContent(ii.MyContent, "content"); if (ii.ItemAnnotationCount > 0) foreach (AnnotationInfo ai in ii.ItemAnnotations) ExportAnnotation(ai, "annotation"); MyWriter.WriteEndElement(); } private void ExportContent(XmlElement xn, ContentInfo ci, string nodename) { /* ContentID Number Text Type FormatID Config DTS UserID */ XmlElement xe = xn.OwnerDocument.CreateElement(nodename); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "contentid", ci.ContentID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "number", ci.Number)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "text", ci.Text)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "type", ci.Type.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "formatid", ci.FormatID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "config", ci.Config)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", ci.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", ci.UserID.ToString())); xn.AppendChild(xe); if (ci.ContentTransitionCount > 0) foreach (TransitionInfo ti in ci.ContentTransitions) ExportTransition(xe, ti, "transition"); if (ci.ContentRoUsageCount > 0) foreach (RoUsageInfo ri in ci.ContentRoUsages) ExportROUsage(xe, ri, "rousage"); if (ci.ContentEntryCount > 0) ExportEntry(xe, ci.MyEntry, "entry"); if (ci.ContentGridCount > 0) ExportGrid(xe, ci.MyGrid, "grid"); if (ci.ContentPartCount > 0) foreach (PartInfo pi in ci.ContentParts) ExportPart(xe, pi, ((E_FromTypes)pi.FromType).ToString().ToLower()); } private void ExportContent(ContentInfo ci, string nodename) { /* ContentID Number Text Type FormatID Config DTS UserID */ MyWriter.WriteStartElement(nodename); MyWriter.WriteAttributeString("contentid", ci.ContentID.ToString()); MyWriter.WriteAttributeString("number", ci.Number); MyWriter.WriteAttributeString("text", ci.Text); MyWriter.WriteAttributeString("type", ci.Type.ToString()); MyWriter.WriteAttributeString("formatid", ci.FormatID.ToString()); MyWriter.WriteAttributeString("config", ci.Config); MyWriter.WriteAttributeString("dts", ci.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); MyWriter.WriteAttributeString("userid", ci.UserID.ToString()); if (ci.ContentTransitionCount > 0) foreach (TransitionInfo ti in ci.ContentTransitions) ExportTransition(ti, "transition"); if (ci.ContentRoUsageCount > 0) foreach (RoUsageInfo ri in ci.ContentRoUsages) ExportROUsage(ri, "rousage"); if (ci.ContentEntryCount > 0) ExportEntry(ci.MyEntry, "entry"); if (ci.ContentGridCount > 0) ExportGrid(ci.MyGrid, "grid"); if (ci.ContentPartCount > 0) foreach (PartInfo pi in ci.ContentParts) ExportPart(pi, ((E_FromTypes)pi.FromType).ToString().ToLower()); MyWriter.WriteEndElement(); } private void ExportGrid(XmlElement xn, GridInfo gi, string nodename) { /* ContentID Data Config DTS UserID */ XmlElement xe = xn.OwnerDocument.CreateElement(nodename); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "contentid", gi.ContentID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "data", gi.Data)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "config", gi.Config)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", gi.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", gi.UserID.ToString())); xn.AppendChild(xe); } private void ExportGrid(GridInfo gi, string nodename) { /* ContentID Data Config DTS UserID */ MyWriter.WriteStartElement(nodename); MyWriter.WriteAttributeString("contentid", gi.ContentID.ToString()); MyWriter.WriteAttributeString("data", gi.Data); MyWriter.WriteAttributeString("config", gi.Config); MyWriter.WriteAttributeString("dts", gi.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); MyWriter.WriteAttributeString("userid", gi.UserID.ToString()); MyWriter.WriteEndElement(); } private void ExportEntry(XmlElement xn, EntryInfo ei, string nodename) { /* ContentID DocID DTS UserID */ XmlElement xe = xn.OwnerDocument.CreateElement(nodename); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "contentid", ei.ContentID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "docid", ei.DocID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", ei.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", ei.UserID.ToString())); xn.AppendChild(xe); ExportDocument(xe, ei.MyDocument, "document"); } private void ExportEntry(EntryInfo ei, string nodename) { /* ContentID DocID DTS UserID */ MyWriter.WriteStartElement(nodename); MyWriter.WriteAttributeString("contentid", ei.ContentID.ToString()); MyWriter.WriteAttributeString("docid", ei.DocID.ToString()); MyWriter.WriteAttributeString("dts", ei.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); MyWriter.WriteAttributeString("userid", ei.UserID.ToString()); ExportDocument(ei.MyDocument, "document"); MyWriter.WriteEndElement(); } private void ExportDocument(XmlElement xn, DocumentInfo di, string nodename) { /* DocID LibTitle DocContent DocAscii Config DTS UserID FileExtension */ XmlElement xe = xn.OwnerDocument.CreateElement(nodename); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "docid", di.DocID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "libtitle", di.LibTitle)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "doccontent", Convert.ToBase64String(di.DocContent))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "docascii", di.DocAscii)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "config", di.Config)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", di.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", di.UserID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "fileextension", di.FileExtension)); xn.AppendChild(xe); } private void ExportDocument(DocumentInfo di, string nodename) { /* DocID LibTitle DocContent DocAscii Config DTS UserID FileExtension */ MyWriter.WriteStartElement(nodename); MyWriter.WriteAttributeString("docid", di.DocID.ToString()); MyWriter.WriteAttributeString("libtitle", di.LibTitle); MyWriter.WriteAttributeString("doccontent", Convert.ToBase64String(di.DocContent)); MyWriter.WriteAttributeString("docascii", di.DocAscii); MyWriter.WriteAttributeString("config", di.Config); MyWriter.WriteAttributeString("dts", di.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); MyWriter.WriteAttributeString("userid", di.UserID.ToString()); MyWriter.WriteAttributeString("fileextension", di.FileExtension); MyWriter.WriteEndElement(); } private void ExportROUsage(XmlElement xn, RoUsageInfo ri, string nodename) { /* ROUsageID ContentID ROID Config DTS UserID RODbID */ XmlElement xe = xn.OwnerDocument.CreateElement(nodename); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "rousageid", ri.ROUsageID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "contentid", ri.ContentID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "roid", ri.ROID)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "config", ri.Config)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", ri.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", ri.UserID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "rodbid", ri.RODbID.ToString())); xn.AppendChild(xe); } private void ExportROUsage(RoUsageInfo ri, string nodename) { /* ROUsageID ContentID ROID Config DTS UserID RODbID */ MyWriter.WriteStartElement(nodename); MyWriter.WriteAttributeString("rousageid", ri.ROUsageID.ToString()); MyWriter.WriteAttributeString("contentid", ri.ContentID.ToString()); MyWriter.WriteAttributeString("roid", ri.ROID); MyWriter.WriteAttributeString("config", ri.Config); MyWriter.WriteAttributeString("dts", ri.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); MyWriter.WriteAttributeString("userid", ri.UserID.ToString()); MyWriter.WriteAttributeString("rodbid", ri.RODbID.ToString()); MyWriter.WriteEndElement(); } private void ExportPart(XmlElement xn, PartInfo pi, string nodename) { /* ContentID FromType ItemID DTS UserID */ XmlElement xe = xn.OwnerDocument.CreateElement(nodename); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "contentid", pi.ContentID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "fromtype", pi.FromType.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "itemid", pi.ItemID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", pi.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", pi.UserID.ToString())); xn.AppendChild(xe); foreach (ItemInfo ii in pi.MyItems) ExportItem(xe, ii, pi.PartType.ToString().ToLower()); } private void ExportPart(PartInfo pi, string nodename) { /* ContentID FromType ItemID DTS UserID */ MyWriter.WriteStartElement(nodename); MyWriter.WriteAttributeString("contentid", pi.ContentID.ToString()); MyWriter.WriteAttributeString("fromtype", pi.FromType.ToString()); MyWriter.WriteAttributeString("itemid", pi.ItemID.ToString()); MyWriter.WriteAttributeString("dts", pi.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); MyWriter.WriteAttributeString("userid", pi.UserID.ToString()); foreach (ItemInfo ii in pi.MyItems) ExportItem(ii, pi.PartType.ToString().ToLower()); MyWriter.WriteEndElement(); } private void ExportTransition(XmlElement xn, TransitionInfo ti, string nodename) { /* TransitionID FromID ToID RangeID IsRange TranType Config DTS UserID */ XmlElement xe = xn.OwnerDocument.CreateElement(nodename); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "transitionid", ti.TransitionID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "fromid", ti.FromID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "toid", ti.ToID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "rangeid", ti.RangeID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "isrange", ti.IsRange.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "trantype", ti.TranType.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "config", ti.Config)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", ti.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", ti.UserID.ToString())); xn.AppendChild(xe); } private void ExportTransition(TransitionInfo ti, string nodename) { /* TransitionID FromID ToID RangeID IsRange TranType Config DTS UserID */ string folder = string.Empty; if (ti.MyItemToID.MyDocVersion != null && ti.MyItemToID.MyDocVersion.MyFolder.Name != MyFolder.Name) { nodename = "external" + nodename; folder = ti.MyItemToID.MyDocVersion.MyFolder.Name; } else { nodename = "external" + nodename; folder = "UNKNOWN"; } MyWriter.WriteStartElement(nodename); if (folder != string.Empty) MyWriter.WriteAttributeString("folder", folder); MyWriter.WriteAttributeString("transitionid", ti.TransitionID.ToString()); MyWriter.WriteAttributeString("fromid", ti.FromID.ToString()); MyWriter.WriteAttributeString("toid", ti.ToID.ToString()); MyWriter.WriteAttributeString("rangeid", ti.RangeID.ToString()); MyWriter.WriteAttributeString("isrange", ti.IsRange.ToString()); MyWriter.WriteAttributeString("trantype", ti.TranType.ToString()); MyWriter.WriteAttributeString("config", ti.Config); MyWriter.WriteAttributeString("dts", ti.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); MyWriter.WriteAttributeString("userid", ti.UserID.ToString()); MyWriter.WriteEndElement(); } private void ExportAnnotation(XmlElement xn, AnnotationInfo ai, string nodename) { /* AnnotationID ItemID TypeID RtfText SearchText Config DTS UserID */ XmlElement xe = xn.OwnerDocument.CreateElement(nodename); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "annotationid", ai.AnnotationID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "itemid", ai.ItemID.ToString())); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "typeid", ai.TypeID.ToString())); //if(ai.TypeID > 6) xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "typename", ai.MyAnnotationType.Name)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "rtftext", ai.RtfText)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "searchtext", ai.SearchText)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "config", ai.Config)); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", ai.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", ai.UserID.ToString())); xn.AppendChild(xe); } private void ExportAnnotation(AnnotationInfo ai, string nodename) { /* AnnotationID ItemID TypeID RtfText SearchText Config DTS UserID */ MyWriter.WriteStartElement(nodename); MyWriter.WriteAttributeString("annotationid", ai.AnnotationID.ToString()); MyWriter.WriteAttributeString("itemid", ai.ItemID.ToString()); MyWriter.WriteAttributeString("typeid", ai.TypeID.ToString()); MyWriter.WriteAttributeString("rtftext", ai.RtfText); MyWriter.WriteAttributeString("searchtext", ai.SearchText); MyWriter.WriteAttributeString("config", ai.Config); MyWriter.WriteAttributeString("dts", ai.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); MyWriter.WriteAttributeString("userid", ai.UserID.ToString()); MyWriter.WriteEndElement(); } #endregion #region Import for Merge private void AddExternalTransition(XmlReader xr, XmlDocument xd) { XmlElement xe = xd.CreateElement("transition"); XmlAttribute xa = AddAttribute(xd, "folder", xr.GetAttribute("folder")); xe.Attributes.SetNamedItem(xa); xa = AddAttribute(xd, "transitionid", xr.GetAttribute("transitionid")); xe.Attributes.SetNamedItem(xa); xa = AddAttribute(xd, "fromid", xr.GetAttribute("fromid")); xe.Attributes.SetNamedItem(xa); xa = AddAttribute(xd, "toid", xr.GetAttribute("toid")); xe.Attributes.SetNamedItem(xa); xa = AddAttribute(xd, "rangeid", xr.GetAttribute("rangeid")); xe.Attributes.SetNamedItem(xa); xa = AddAttribute(xd, "isrange", xr.GetAttribute("isrange")); xe.Attributes.SetNamedItem(xa); xa = AddAttribute(xd, "trantype", xr.GetAttribute("trantype")); xe.Attributes.SetNamedItem(xa); xa = AddAttribute(xd, "config", xr.GetAttribute("config")); xe.Attributes.SetNamedItem(xa); xa = AddAttribute(xd, "userid", xr.GetAttribute("userid")); xe.Attributes.SetNamedItem(xa); xa = AddAttribute(xd, "dts", xr.GetAttribute("dts")); xe.Attributes.SetNamedItem(xa); xd.SelectSingleNode("externaltransitions/transitions").AppendChild(xe); } private void AddTransitions(XmlReader xr) { int transitionid = int.Parse(xr.GetAttribute("transitionid")); int fromid = int.Parse(xr.GetAttribute("fromid")); int toid = int.Parse(xr.GetAttribute("toid")); int rangeid = int.Parse(xr.GetAttribute("rangeid")); int isrange = int.Parse(xr.GetAttribute("isrange")); int trantype = int.Parse(xr.GetAttribute("trantype")); string config = xr.GetAttribute("config"); string userid = xr.GetAttribute("userid"); DateTime dts = DateTime.Parse(xr.GetAttribute("dts")); string lookfor; if (isrange == 0) lookfor = string.Format("#Link:Transition:{0} {1} {2}", trantype, transitionid, toid); else lookfor = string.Format("#Link:TransitionRange:{0} {1} {2} {3}", trantype, transitionid, toid, rangeid); fromid = Old2NewContent[fromid]; toid = Old2NewItem[toid]; rangeid = Old2NewItem[rangeid]; Content cc = Content.Get(fromid); Transition tt = Transition.MakeTransition(cc, Item.Get(toid), Item.Get(rangeid), isrange, trantype, config, dts, userid); transitionid = tt.TransitionID; string replacewith; if (isrange == 0) replacewith = string.Format("#Link:Transition:{0} {1} {2}", trantype, transitionid, toid); else replacewith = string.Format("#Link:TransitionRange:{0} {1} {2} {3}", trantype, transitionid, toid, rangeid); cc.Text = cc.Text.Replace(lookfor, replacewith); cc.Save(); } private void AddTransitions(Content content, XmlNode xn) { /* Content Item Item int int string dts string #Link:Transition:1 2 187 type,id,toid #Link:TransitionRange:2 1 175 177 type,id,toid,rangeid */ XmlNodeList nl = xn.SelectNodes("./transition"); foreach (XmlNode nd in nl) { int toid = int.Parse(nd.Attributes.GetNamedItem("toid").InnerText); int rangeid = int.Parse(nd.Attributes.GetNamedItem("rangeid").InnerText); if (Old2NewItem.ContainsKey(toid) && Old2NewItem.ContainsKey(rangeid)) { int transitionid = int.Parse(nd.Attributes.GetNamedItem("transitionid").InnerText); int isrange = int.Parse(nd.Attributes.GetNamedItem("isrange").InnerText); int trantype = int.Parse(nd.Attributes.GetNamedItem("trantype").InnerText); string config = nd.Attributes.GetNamedItem("config").InnerText; string userid = nd.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(nd.Attributes.GetNamedItem("dts").InnerText); string lookfor; if (isrange == 0) lookfor = string.Format("#Link:Transition:{0} {1} {2}", trantype, transitionid, toid); else lookfor = string.Format("#Link:TransitionRange:{0} {1} {2} {3}", trantype, transitionid, toid, rangeid); //fromid = content.ContentID; toid = Old2NewItem[toid]; rangeid = Old2NewItem[rangeid]; Transition tt = Transition.MakeTransition(content, Item.Get(toid), Item.Get(rangeid), isrange, trantype, config, dts, userid); transitionid = tt.TransitionID; string replacewith; if (isrange == 0) replacewith = string.Format("#Link:Transition:{0} {1} {2}", trantype, transitionid, toid); else replacewith = string.Format("#Link:TransitionRange:{0} {1} {2} {3}", trantype, transitionid, toid, rangeid); content.Text = content.Text.Replace(lookfor, replacewith); content.Save(); } else { PendingTransitions.DocumentElement.AppendChild(PendingTransitions.ImportNode(nd, true)); //save to holding pen } } } private void AddTransitions() { AddTransitions(PendingTransitions); } private void AddTransitions(XmlDocument xd) { /* Content Item Item int int string dts string #Link:Transition:1 2 187 type,id,toid #Link:TransitionRange:2 1 175 177 type,id,toid,rangeid */ XmlNodeList nl = xd.SelectNodes("//transition"); lblImportStatus.Text = string.Format("Updating {0} Tranistions", nl.Count.ToString()); foreach (XmlNode nd in nl) { int fromid = int.Parse(nd.Attributes.GetNamedItem("fromid").InnerText); int toid = int.Parse(nd.Attributes.GetNamedItem("toid").InnerText); int rangeid = int.Parse(nd.Attributes.GetNamedItem("rangeid").InnerText); if (Old2NewContent.ContainsKey(fromid) && Old2NewItem.ContainsKey(toid) && Old2NewItem.ContainsKey(rangeid)) { int transitionid = int.Parse(nd.Attributes.GetNamedItem("transitionid").InnerText); int isrange = int.Parse(nd.Attributes.GetNamedItem("isrange").InnerText); int trantype = int.Parse(nd.Attributes.GetNamedItem("trantype").InnerText); string config = nd.Attributes.GetNamedItem("config").InnerText; string userid = nd.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(nd.Attributes.GetNamedItem("dts").InnerText); string lookfor; if (isrange == 0) lookfor = string.Format("#Link:Transition:{0} {1} {2}", trantype, transitionid, toid); else lookfor = string.Format("#Link:TransitionRange:{0} {1} {2} {3}", trantype, transitionid, toid, rangeid); fromid = Old2NewContent[fromid]; toid = Old2NewItem[toid]; rangeid = Old2NewItem[rangeid]; Content cc = Content.Get(fromid); Transition tt = Transition.MakeTransition(cc, Item.Get(toid), Item.Get(rangeid), isrange, trantype, config, dts, userid); transitionid = tt.TransitionID; string replacewith; if (isrange == 0) replacewith = string.Format("#Link:Transition:{0} {1} {2}", trantype, transitionid, toid); else replacewith = string.Format("#Link:TransitionRange:{0} {1} {2} {3}", trantype, transitionid, toid, rangeid); cc.Text = cc.Text.Replace(lookfor, replacewith); cc.Save(); nd.InnerText = "done"; } } } private Dictionary Old2NewItem; private Dictionary Old2NewContent; private Dictionary Old2NewLibDoc; private XmlDocument PendingTransitions; private RODb MyRODb = null; private Folder AddFolder(Folder folder, XmlReader xr) { Old2NewItem = new Dictionary(); Old2NewContent = new Dictionary(); Old2NewLibDoc = new Dictionary(); string title = xr.GetAttribute("title"); string name = xr.GetAttribute("name"); string shortname = xr.GetAttribute("shortname"); string usrid = xr.GetAttribute("usrid"); DateTime dts = DateTime.Parse(xr.GetAttribute("dts")); string formatid = xr.GetAttribute("formatid"); Format format = formatid == string.Empty ? null : OldToNewFormat(int.Parse(formatid)); folder = Folder.MakeFolder(folder, folder.MyConnection, name, title, shortname, format, null, dts, usrid); //f.Save(); return folder; } private Folder AddFolder(Folder p, XmlDocument xd) { lblImportStatus.Text = "Creating Folder..."; Application.DoEvents(); string title = xd.DocumentElement.Attributes.GetNamedItem("title").InnerText; string name = xd.DocumentElement.Attributes.GetNamedItem("name").InnerText; string shortname = xd.DocumentElement.Attributes.GetNamedItem("shortname").InnerText; string usrid = xd.DocumentElement.Attributes.GetNamedItem("usrid").InnerText; DateTime dts = DateTime.Parse(xd.DocumentElement.Attributes.GetNamedItem("dts").InnerText); string formatid = xd.DocumentElement.Attributes.GetNamedItem("formatid").InnerText; Format format = formatid == string.Empty ? null : OldToNewFormat(int.Parse(formatid)); Folder f = Folder.MakeFolder(p, p.MyConnection, name, title, shortname, format, null, dts, usrid); return f; } private Format OldToNewFormat(int formatID) { string formatName = oldFormat[formatID]; formatID = newFormat[formatName]; return Format.Get(formatID); } private DocVersion AddDocVersion(Folder f, XmlReader xr) { int versiontype = int.Parse(xr.GetAttribute("versiontype")); string name = xr.GetAttribute("name"); string config = xr.GetAttribute("config"); string userid = xr.GetAttribute("userid"); DateTime dts = DateTime.Parse(xr.GetAttribute("dts")); string formatid = xr.GetAttribute("formatid"); Format format = formatid == string.Empty ? null : OldToNewFormat(int.Parse(formatid)); DocVersion dv = DocVersion.MakeDocVersion(f, versiontype, name, null, null, format, config, dts, userid); return dv; } private void AddAnnotationTypes(XmlDocument xd) { XmlNodeList nl = xd.SelectNodes("folder/annotationtypes/annotationtype"); foreach (XmlNode nd in nl) { AnnotationTypeInfo ati = AnnotationTypeInfo.GetByName(nd.Attributes.GetNamedItem("name").InnerText); if (ati == null) AnnotationType.MakeAnnotationType(nd.Attributes.GetNamedItem("name").InnerText, nd.Attributes.GetNamedItem("config").InnerText, DateTime.Parse(nd.Attributes.GetNamedItem("dts").InnerText), nd.Attributes.GetNamedItem("userid").InnerText); } } private DocVersionInfo AddDocVersion(Folder f, XmlDocument xd) { lblImportStatus.Text = "Creating DocVersion..."; Application.DoEvents(); XmlElement xe = (XmlElement)xd.SelectSingleNode("folder/docversion"); int versiontype = int.Parse(xe.Attributes.GetNamedItem("versiontype").InnerText); string name = xe.Attributes.GetNamedItem("name").InnerText; string config = xe.Attributes.GetNamedItem("config").InnerText; string userid = xe.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(xe.Attributes.GetNamedItem("dts").InnerText); string formatid = xe.Attributes.GetNamedItem("formatid").InnerText; Format format = formatid == string.Empty ? null : OldToNewFormat(int.Parse(formatid)); DocVersion dv = DocVersion.MakeDocVersion(f, versiontype, name, null, null, format, config, dts, userid); XmlNode xassoc = xe.SelectSingleNode("association"); if (xassoc != null) { XmlNode xrofst = xassoc.SelectSingleNode("rofst"); XmlNode xrodb = xrofst.SelectSingleNode("rodb"); MyRODb = AddRODb(xrodb); ROFst rofst = AddROFst(xrofst); DocVersionAssociation dva = dv.DocVersionAssociations.Add(rofst); dv.Save(); } return DocVersionInfo.Get(dv.VersionID); } private Dictionary GetROFstData(XmlReader xr) { Dictionary rv = new Dictionary(); rv.Add("rolookup", xr.GetAttribute("rolookup")); rv.Add("config", xr.GetAttribute("config")); rv.Add("userid", xr.GetAttribute("userid")); rv.Add("dts", xr.GetAttribute("dts")); return rv; } private ROFst AddROFst(Dictionary dic) { byte[] rolookup = Convert.FromBase64String(dic["rolookup"]); string config = dic["config"]; string userid = dic["userid"]; DateTime dts = DateTime.Parse(dic["dts"]); ROFst rv = null; rv = ROFst.GetByRODbID_DTS(MyRODb.RODbID, dts); //MyRODb.DTS); if (rv == null) rv = ROFst.MakeROFst(MyRODb, rolookup, config, dts, userid); return rv; } private ROFst AddROFst(XmlNode xrofst) { lblImportStatus.Text = "Creating ROFst..."; Application.DoEvents(); byte[] rolookup = Convert.FromBase64String(xrofst.Attributes.GetNamedItem("rolookup").InnerText); string config = xrofst.Attributes.GetNamedItem("config").InnerText; string userid = xrofst.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(xrofst.Attributes.GetNamedItem("dts").InnerText); ROFst rv = null; rv = ROFst.GetByRODbID_DTS(MyRODb.RODbID, dts); //MyRODb.DTS); if (rv == null) rv = ROFst.MakeROFst(MyRODb, rolookup, config, dts, userid); return rv; } private RODb AddRODb(XmlReader xr) { oldRODbID = int.Parse(xr.GetAttribute("rodbid")); string roname = xr.GetAttribute("roname"); string folderpath = xr.GetAttribute("folderpath"); string dbconnectionstring = xr.GetAttribute("dbconnectionstring"); string config = xr.GetAttribute("config"); string userid = xr.GetAttribute("userid"); DateTime dts = DateTime.Parse(xr.GetAttribute("dts")); RODb rv = null; rv = RODb.GetByFolderPath(folderpath); if (rv == null) rv = RODb.MakeRODb(roname, folderpath, dbconnectionstring, config, dts, userid); newRODbID = rv.RODbID; return rv; } private RODb AddRODb(XmlNode xrodb) { lblImportStatus.Text = "Creating RODb..."; Application.DoEvents(); oldRODbID = int.Parse(xrodb.Attributes.GetNamedItem("rodbid").InnerText); string roname = xrodb.Attributes.GetNamedItem("roname").InnerText; string folderpath = xrodb.Attributes.GetNamedItem("folderpath").InnerText; string dbconnectionstring = xrodb.Attributes.GetNamedItem("dbconnectionstring").InnerText; string config = xrodb.Attributes.GetNamedItem("config").InnerText; string userid = xrodb.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(xrodb.Attributes.GetNamedItem("dts").InnerText); RODb rv = null; rv = RODb.GetByFolderPath(folderpath); if (rv == null) rv = RODb.MakeRODb(roname, folderpath, dbconnectionstring, config, dts, userid); newRODbID = rv.RODbID; return rv; } private int GetProcedureData(XmlReader xr) { return int.Parse(xr.GetAttribute("itemid")); } private ItemInfo AddProcedure(XmlReader xr, DocVersion dv, ItemInfo procInfo, int oldid) { DocVersionInfo dvInfo = DocVersionInfo.Get(dv.VersionID); string number = xr.GetAttribute("number"); string text = xr.GetAttribute("text"); int proctype = int.Parse(xr.GetAttribute("type")); string formatid = xr.GetAttribute("formatid"); string config = xr.GetAttribute("config"); string userid = xr.GetAttribute("userid"); DateTime dts = DateTime.Parse(xr.GetAttribute("dts")); Procedure p = Procedure.MakeProcedure(dvInfo, procInfo, number, text, proctype); p.DTS = dts; p.UserID = userid; if (formatid != string.Empty) p.MyContent.MyFormat = OldToNewFormat(int.Parse(formatid)); p.MyContent.Config = config; p.MyContent.DTS = dts; p.MyContent.UserID = userid; p.Save(); Old2NewItem.Add(oldid, p.ItemID); Old2NewContent.Add(int.Parse(xr.GetAttribute("contentid")), p.MyContent.ContentID); procInfo = ProcedureInfo.Get(p.ItemID); return procInfo; } private ProcedureInfo AddProcedure(XmlNode xn, DocVersionInfo dvInfo, ProcedureInfo procInfo) { pbImportProcedure.PerformStep(); lblImportProcedure.Text = string.Format("{0} of {1} Procedures", pbImportProcedure.Value.ToString(), pbImportProcedure.Maximum.ToString()); TimeSpan elapsed = DateTime.Now.Subtract(MyStart); lblImportTime.Text = "Elapsed Time: " + elapsed.ToString(); Application.DoEvents(); XmlNode xc = xn.SelectSingleNode("content"); string number = xc.Attributes.GetNamedItem("number").InnerText; string text = xc.Attributes.GetNamedItem("text").InnerText; int proctype = int.Parse(xc.Attributes.GetNamedItem("type").InnerText); string formatid = xc.Attributes.GetNamedItem("formatid").InnerText; string config = xc.Attributes.GetNamedItem("config").InnerText; string userid = xc.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(xc.Attributes.GetNamedItem("dts").InnerText); Procedure p = Procedure.MakeProcedure(dvInfo, procInfo, number, text, proctype); p.DTS = dts; p.UserID = userid; if (formatid != string.Empty) p.MyContent.MyFormat = OldToNewFormat(int.Parse(formatid)); p.MyContent.Config = config; p.MyContent.DTS = dts; p.MyContent.UserID = userid; p.Save(); Old2NewItem.Add(int.Parse(xn.Attributes.GetNamedItem("itemid").InnerText), p.ItemID); Old2NewContent.Add(int.Parse(xc.Attributes.GetNamedItem("contentid").InnerText), p.MyContent.ContentID); if (xn.SelectNodes("annotation").Count > 0) AddAnnotations(p.ItemID, xn); if (xc.SelectNodes("rousage").Count > 0) AddROUsages(p.MyContent, xc); if (xc.SelectNodes("transition").Count > 0) AddTransitions(p.MyContent, xc); procInfo = ProcedureInfo.Get(p.ItemID); if (xc.HasChildNodes) AddParts(xc, procInfo); return procInfo; } private void AddROUsage(XmlReader xr) { int contentid = int.Parse(xr.GetAttribute("contentid")); contentid = Old2NewContent[contentid]; Content content = Content.Get(contentid); string rousageid = xr.GetAttribute("rousageid"); string roid = xr.GetAttribute("roid"); string config = xr.GetAttribute("config"); string userid = xr.GetAttribute("userid"); DateTime dts = DateTime.Parse(xr.GetAttribute("dts")); RoUsage rou = RoUsage.MakeRoUsage(content, roid, config, dts, userid, MyRODb); rou.Save(); string lookFor = string.Format("#Link:ReferencedObject:{0} {1} {2}[END>", rousageid, roid, oldRODbID.ToString()); string replaceWith = string.Format("#Link:ReferencedObject:{0} {1} {2}[END>", rou.ROUsageID.ToString(), roid, newRODbID.ToString()); if (lookFor != replaceWith) { content.Text = content.Text.Replace(lookFor, replaceWith); content.Save(); } } private void AddROUsages(Content content, XmlNode xn) { foreach (XmlNode nd in xn.SelectNodes("rousage")) { string rousageid = nd.Attributes.GetNamedItem("rousageid").InnerText; string roid = nd.Attributes.GetNamedItem("roid").InnerText; string config = nd.Attributes.GetNamedItem("config").InnerText; string userid = nd.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(nd.Attributes.GetNamedItem("dts").InnerText); RoUsage rou = RoUsage.MakeRoUsage(content, roid, config, dts, userid, MyRODb); rou.Save(); string lookFor = string.Format("#Link:ReferencedObject:{0} {1} {2}[END>", rousageid, roid, oldRODbID.ToString()); string replaceWith = string.Format("#Link:ReferencedObject:{0} {1} {2}[END>", rou.ROUsageID.ToString(), roid, newRODbID.ToString()); if (lookFor != replaceWith) { content.Text = content.Text.Replace(lookFor, replaceWith); content.Save(); } } } private void AddAnnotation(XmlReader xr) { int itemid = int.Parse(xr.GetAttribute("itemid")); itemid = Old2NewItem[itemid]; Item itm = Item.Get(itemid); int typeid = int.Parse(xr.GetAttribute("typeid")); string rtftext = xr.GetAttribute("rtftext"); string searchtext = xr.GetAttribute("searchtext"); string config = xr.GetAttribute("config"); string userid = xr.GetAttribute("userid"); DateTime dts = DateTime.Parse(xr.GetAttribute("dts")); Annotation ann = Annotation.MakeAnnotation(itm, AnnotationType.Get(typeid), rtftext, searchtext, config, dts, userid); } private void AddAnnotations(int itemID, XmlNode xn) { Item itm = Item.Get(itemID); foreach (XmlNode nd in xn.SelectNodes("annotation")) { int typeid = int.Parse(nd.Attributes.GetNamedItem("typeid").InnerText); string rtftext = nd.Attributes.GetNamedItem("rtftext").InnerText; string searchtext = nd.Attributes.GetNamedItem("searchtext").InnerText; string config = nd.Attributes.GetNamedItem("config").InnerText; string userid = nd.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(nd.Attributes.GetNamedItem("dts").InnerText); AnnotationType annType = AnnotationType.GetByName(nd.Attributes.GetNamedItem("typename").InnerText); Annotation ann = Annotation.MakeAnnotation(itm, annType, rtftext, searchtext, config, dts, userid); ann.Save(); } } private void AddParts(XmlNode myNode, ItemInfo parentInfo) { foreach (XmlNode xn in myNode.ChildNodes) { switch (xn.Name) { case "sections": AddSections(xn, parentInfo); break; case "cautions": AddCautions(xn, parentInfo); break; case "notes": AddNotes(xn, parentInfo); break; case "rnos": AddRNOs(xn, parentInfo); break; case "steps": AddSteps(xn, parentInfo); break; case "tables": AddTables(xn, parentInfo); break; default: break; } } } private void AddTables(XmlNode xn, ItemInfo parentInfo) { if (parentInfo.IsProcedure) { pbImportSection.Value = 0; pbImportStep.Value = 0; pbImportSection.Maximum = xn.ChildNodes.Count; } if (parentInfo.IsSection) { pbImportStep.Value = 0; pbImportStep.Maximum = xn.ChildNodes.Count; } ItemInfo prevInfo = null; foreach (XmlNode nd in xn.ChildNodes) prevInfo = AddTable(nd, parentInfo, prevInfo); } private ItemInfo AddTable(XmlReader xr, ItemInfo parentInfo, ItemInfo prevInfo, int oldid) { string number = xr.GetAttribute("number"); string text = xr.GetAttribute("text"); int steptype = int.Parse(xr.GetAttribute("type")); string formatid = xr.GetAttribute("formatid"); string config = xr.GetAttribute("config"); string userid = xr.GetAttribute("userid"); DateTime dts = DateTime.Parse(xr.GetAttribute("dts")); Step step = Step.MakeStep(parentInfo, prevInfo, number, text, steptype, E_FromType.Table); step.DTS = dts; step.UserID = userid; if (formatid != string.Empty) step.MyContent.MyFormat = OldToNewFormat(int.Parse(formatid)); step.MyContent.Config = config; step.MyContent.DTS = dts; step.MyContent.UserID = userid; step.Save(); Old2NewItem.Add(oldid, step.ItemID); Old2NewContent.Add(int.Parse(xr.GetAttribute("contentid")), step.MyContent.ContentID); prevInfo = StepInfo.Get(step.ItemID); return prevInfo; } private ItemInfo AddTable(XmlNode xn, ItemInfo parentInfo, ItemInfo prevInfo) { pbImportStep.PerformStep(); lblImportStep.Text = string.Format("{0} of {1} Steps", pbImportStep.Value.ToString(), pbImportStep.Maximum.ToString()); Application.DoEvents(); XmlNode xc = xn.SelectSingleNode("content"); Step step; string number = xc.Attributes.GetNamedItem("number").InnerText; string text = xc.Attributes.GetNamedItem("text").InnerText; int steptype = int.Parse(xc.Attributes.GetNamedItem("type").InnerText); string formatid = xc.Attributes.GetNamedItem("formatid").InnerText; string config = xc.Attributes.GetNamedItem("config").InnerText; string userid = xc.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(xc.Attributes.GetNamedItem("dts").InnerText); step = Step.MakeStep(parentInfo, prevInfo, number, text, steptype, E_FromType.Table); step.DTS = dts; step.UserID = userid; if (formatid != string.Empty) step.MyContent.MyFormat = OldToNewFormat(int.Parse(formatid)); step.MyContent.Config = config; step.MyContent.DTS = dts; step.MyContent.UserID = userid; step.Save(); Old2NewItem.Add(int.Parse(xn.Attributes.GetNamedItem("itemid").InnerText), step.ItemID); Old2NewContent.Add(int.Parse(xc.Attributes.GetNamedItem("contentid").InnerText), step.MyContent.ContentID); if (xc.SelectNodes("grid").Count > 0) AddGrid(step.MyContent, xc); if (xn.SelectNodes("annotation").Count > 0) AddAnnotations(step.ItemID, xn); if (xc.SelectNodes("rousage").Count > 0) AddROUsages(step.MyContent, xc); if (xc.SelectNodes("transition").Count > 0) AddTransitions(step.MyContent, xc); prevInfo = StepInfo.Get(step.ItemID); if (xc.HasChildNodes) AddParts(xc, prevInfo); return prevInfo; } private void AddSteps(XmlNode xn, ItemInfo parentInfo) { if (parentInfo.IsProcedure) { pbImportSection.Value = 0; pbImportStep.Value = 0; pbImportSection.Maximum = xn.ChildNodes.Count; } if (parentInfo.IsSection) { pbImportStep.Value = 0; pbImportStep.Maximum = xn.ChildNodes.Count; } ItemInfo prevInfo = null; foreach (XmlNode nd in xn.ChildNodes) prevInfo = AddStep(nd, parentInfo, prevInfo); } private ItemInfo AddStep(XmlReader xr, ItemInfo parentInfo, ItemInfo prevInfo, int oldid) { string number = xr.GetAttribute("number"); string text = xr.GetAttribute("text"); int steptype = int.Parse(xr.GetAttribute("type")); string formatid = xr.GetAttribute("formatid"); string config = xr.GetAttribute("config"); string userid = xr.GetAttribute("userid"); DateTime dts = DateTime.Parse(xr.GetAttribute("dts")); Step step = Step.MakeStep(parentInfo, prevInfo, number, text, steptype, E_FromType.Step); step.DTS = dts; step.UserID = userid; if (formatid != string.Empty) step.MyContent.MyFormat = OldToNewFormat(int.Parse(formatid)); step.MyContent.Config = config; step.MyContent.DTS = dts; step.MyContent.UserID = userid; step.Save(); Old2NewItem.Add(oldid, step.ItemID); Old2NewContent.Add(int.Parse(xr.GetAttribute("contentid")), step.MyContent.ContentID); prevInfo = StepInfo.Get(step.ItemID); return prevInfo; } private ItemInfo AddStep(XmlNode xn, ItemInfo parentInfo, ItemInfo prevInfo) { pbImportStep.PerformStep(); lblImportStep.Text = string.Format("{0} of {1} Steps", pbImportStep.Value.ToString(), pbImportStep.Maximum.ToString()); Application.DoEvents(); XmlNode xc = xn.SelectSingleNode("content"); Step step; string number = xc.Attributes.GetNamedItem("number").InnerText; string text = xc.Attributes.GetNamedItem("text").InnerText; int steptype = int.Parse(xc.Attributes.GetNamedItem("type").InnerText); string formatid = xc.Attributes.GetNamedItem("formatid").InnerText; string config = xc.Attributes.GetNamedItem("config").InnerText; string userid = xc.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(xc.Attributes.GetNamedItem("dts").InnerText); step = Step.MakeStep(parentInfo, prevInfo, number, text, steptype, E_FromType.Step); step.DTS = dts; step.UserID = userid; if (formatid != string.Empty) step.MyContent.MyFormat = OldToNewFormat(int.Parse(formatid)); step.MyContent.Config = config; step.MyContent.DTS = dts; step.MyContent.UserID = userid; step.Save(); Old2NewItem.Add(int.Parse(xn.Attributes.GetNamedItem("itemid").InnerText), step.ItemID); Old2NewContent.Add(int.Parse(xc.Attributes.GetNamedItem("contentid").InnerText), step.MyContent.ContentID); if (xn.SelectNodes("annotation").Count > 0) AddAnnotations(step.ItemID, xn); if (xc.SelectNodes("rousage").Count > 0) AddROUsages(step.MyContent, xc); if (xc.SelectNodes("transition").Count > 0) AddTransitions(step.MyContent, xc); prevInfo = StepInfo.Get(step.ItemID); if (xc.HasChildNodes) AddParts(xc, prevInfo); return prevInfo; } private void AddRNOs(XmlNode xn, ItemInfo parentInfo) { if (parentInfo.IsProcedure) { pbImportSection.Value = 0; pbImportStep.Value = 0; pbImportSection.Maximum = xn.ChildNodes.Count; } if (parentInfo.IsSection) { pbImportStep.Value = 0; pbImportStep.Maximum = xn.ChildNodes.Count; } ItemInfo prevInfo = null; foreach (XmlNode nd in xn.ChildNodes) prevInfo = AddRNO(nd, parentInfo, prevInfo); } private ItemInfo AddRNO(XmlReader xr, ItemInfo parentInfo, ItemInfo prevInfo, int oldid) { string number = xr.GetAttribute("number"); string text = xr.GetAttribute("text"); int steptype = int.Parse(xr.GetAttribute("type")); string formatid = xr.GetAttribute("formatid"); string config = xr.GetAttribute("config"); string userid = xr.GetAttribute("userid"); DateTime dts = DateTime.Parse(xr.GetAttribute("dts")); Step step = Step.MakeStep(parentInfo, prevInfo, number, text, steptype, E_FromType.RNO); step.DTS = dts; step.UserID = userid; if (formatid != string.Empty) step.MyContent.MyFormat = OldToNewFormat(int.Parse(formatid)); step.MyContent.Config = config; step.MyContent.DTS = dts; step.MyContent.UserID = userid; step.Save(); Old2NewItem.Add(oldid, step.ItemID); Old2NewContent.Add(int.Parse(xr.GetAttribute("contentid")), step.MyContent.ContentID); prevInfo = StepInfo.Get(step.ItemID); return prevInfo; } private ItemInfo AddRNO(XmlNode xn, ItemInfo parentInfo, ItemInfo prevInfo) { pbImportStep.PerformStep(); lblImportStep.Text = string.Format("{0} of {1} Steps", pbImportStep.Value.ToString(), pbImportStep.Maximum.ToString()); Application.DoEvents(); XmlNode xc = xn.SelectSingleNode("content"); Step step; string number = xc.Attributes.GetNamedItem("number").InnerText; string text = xc.Attributes.GetNamedItem("text").InnerText; int steptype = int.Parse(xc.Attributes.GetNamedItem("type").InnerText); string formatid = xc.Attributes.GetNamedItem("formatid").InnerText; string config = xc.Attributes.GetNamedItem("config").InnerText; string userid = xc.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(xc.Attributes.GetNamedItem("dts").InnerText); step = Step.MakeStep(parentInfo, prevInfo, number, text, steptype, E_FromType.RNO); step.DTS = dts; step.UserID = userid; if (formatid != string.Empty) step.MyContent.MyFormat = OldToNewFormat(int.Parse(formatid)); step.MyContent.Config = config; step.MyContent.DTS = dts; step.MyContent.UserID = userid; step.Save(); Old2NewItem.Add(int.Parse(xn.Attributes.GetNamedItem("itemid").InnerText), step.ItemID); Old2NewContent.Add(int.Parse(xc.Attributes.GetNamedItem("contentid").InnerText), step.MyContent.ContentID); if (xn.SelectNodes("annotation").Count > 0) AddAnnotations(step.ItemID, xn); if (xc.SelectNodes("rousage").Count > 0) AddROUsages(step.MyContent, xc); if (xc.SelectNodes("transition").Count > 0) AddTransitions(step.MyContent, xc); prevInfo = StepInfo.Get(step.ItemID); if (xc.HasChildNodes) AddParts(xc, prevInfo); return prevInfo; } private void AddNotes(XmlNode xn, ItemInfo parentInfo) { if (parentInfo.IsProcedure) { pbImportSection.Value = 0; pbImportStep.Value = 0; pbImportSection.Maximum = xn.ChildNodes.Count; } if (parentInfo.IsSection) { pbImportStep.Value = 0; pbImportStep.Maximum = xn.ChildNodes.Count; } ItemInfo prevInfo = null; foreach (XmlNode nd in xn.ChildNodes) prevInfo = AddNote(nd, parentInfo, prevInfo); } private ItemInfo AddNote(XmlReader xr, ItemInfo parentInfo, ItemInfo prevInfo, int oldid) { string number = xr.GetAttribute("number"); string text = xr.GetAttribute("text"); int steptype = int.Parse(xr.GetAttribute("type")); string formatid = xr.GetAttribute("formatid"); string config = xr.GetAttribute("config"); string userid = xr.GetAttribute("userid"); DateTime dts = DateTime.Parse(xr.GetAttribute("dts")); Step step = Step.MakeStep(parentInfo, prevInfo, number, text, steptype, E_FromType.Note); step.DTS = dts; step.UserID = userid; if (formatid != string.Empty) step.MyContent.MyFormat = OldToNewFormat(int.Parse(formatid)); step.MyContent.Config = config; step.MyContent.DTS = dts; step.MyContent.UserID = userid; step.Save(); Old2NewItem.Add(oldid, step.ItemID); Old2NewContent.Add(int.Parse(xr.GetAttribute("contentid")), step.MyContent.ContentID); prevInfo = StepInfo.Get(step.ItemID); return prevInfo; } private ItemInfo AddNote(XmlNode xn, ItemInfo parentInfo, ItemInfo prevInfo) { pbImportStep.PerformStep(); lblImportStep.Text = string.Format("{0} of {1} Steps", pbImportStep.Value.ToString(), pbImportStep.Maximum.ToString()); Application.DoEvents(); XmlNode xc = xn.SelectSingleNode("content"); Step step; string number = xc.Attributes.GetNamedItem("number").InnerText; string text = xc.Attributes.GetNamedItem("text").InnerText; int steptype = int.Parse(xc.Attributes.GetNamedItem("type").InnerText); string formatid = xc.Attributes.GetNamedItem("formatid").InnerText; string config = xc.Attributes.GetNamedItem("config").InnerText; string userid = xc.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(xc.Attributes.GetNamedItem("dts").InnerText); step = Step.MakeStep(parentInfo, prevInfo, number, text, steptype, E_FromType.Note); step.DTS = dts; step.UserID = userid; if (formatid != string.Empty) step.MyContent.MyFormat = OldToNewFormat(int.Parse(formatid)); step.MyContent.Config = config; step.MyContent.DTS = dts; step.MyContent.UserID = userid; step.Save(); Old2NewItem.Add(int.Parse(xn.Attributes.GetNamedItem("itemid").InnerText), step.ItemID); Old2NewContent.Add(int.Parse(xc.Attributes.GetNamedItem("contentid").InnerText), step.MyContent.ContentID); if (xn.SelectNodes("annotation").Count > 0) AddAnnotations(step.ItemID, xn); if (xc.SelectNodes("rousage").Count > 0) AddROUsages(step.MyContent, xc); if (xc.SelectNodes("transition").Count > 0) AddTransitions(step.MyContent, xc); prevInfo = StepInfo.Get(step.ItemID); if (xc.HasChildNodes) AddParts(xc, prevInfo); return prevInfo; } private void AddCautions(XmlNode xn, ItemInfo parentInfo) { if (parentInfo.IsProcedure) { pbImportSection.Value = 0; pbImportStep.Value = 0; pbImportSection.Maximum = xn.ChildNodes.Count; } if (parentInfo.IsSection) { pbImportStep.Value = 0; pbImportStep.Maximum = xn.ChildNodes.Count; } ItemInfo prevInfo = null; foreach (XmlNode nd in xn.ChildNodes) prevInfo = AddCaution(nd, parentInfo, prevInfo); } private ItemInfo AddCaution(XmlReader xr, ItemInfo parentInfo, ItemInfo prevInfo, int oldid) { string number = xr.GetAttribute("number"); string text = xr.GetAttribute("text"); int steptype = int.Parse(xr.GetAttribute("type")); string formatid = xr.GetAttribute("formatid"); string config = xr.GetAttribute("config"); string userid = xr.GetAttribute("userid"); DateTime dts = DateTime.Parse(xr.GetAttribute("dts")); Step step = Step.MakeStep(parentInfo, prevInfo, number, text, steptype, E_FromType.Caution); step.DTS = dts; step.UserID = userid; if (formatid != string.Empty) step.MyContent.MyFormat = OldToNewFormat(int.Parse(formatid)); step.MyContent.Config = config; step.MyContent.DTS = dts; step.MyContent.UserID = userid; step.Save(); Old2NewItem.Add(oldid, step.ItemID); Old2NewContent.Add(int.Parse(xr.GetAttribute("contentid")), step.MyContent.ContentID); prevInfo = StepInfo.Get(step.ItemID); return prevInfo; } private ItemInfo AddCaution(XmlNode xn, ItemInfo parentInfo, ItemInfo prevInfo) { pbImportStep.PerformStep(); lblImportStep.Text = string.Format("{0} of {1} Steps", pbImportStep.Value.ToString(), pbImportStep.Maximum.ToString()); Application.DoEvents(); XmlNode xc = xn.SelectSingleNode("content"); Step step; string number = xc.Attributes.GetNamedItem("number").InnerText; string text = xc.Attributes.GetNamedItem("text").InnerText; int steptype = int.Parse(xc.Attributes.GetNamedItem("type").InnerText); string formatid = xc.Attributes.GetNamedItem("formatid").InnerText; string config = xc.Attributes.GetNamedItem("config").InnerText; string userid = xc.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(xc.Attributes.GetNamedItem("dts").InnerText); step = Step.MakeStep(parentInfo, prevInfo, number, text, steptype, E_FromType.Caution); step.DTS = dts; step.UserID = userid; if (formatid != string.Empty) step.MyContent.MyFormat = OldToNewFormat(int.Parse(formatid)); step.MyContent.Config = config; step.MyContent.DTS = dts; step.MyContent.UserID = userid; step.Save(); Old2NewItem.Add(int.Parse(xn.Attributes.GetNamedItem("itemid").InnerText), step.ItemID); Old2NewContent.Add(int.Parse(xc.Attributes.GetNamedItem("contentid").InnerText), step.MyContent.ContentID); if (xn.SelectNodes("annotation").Count > 0) AddAnnotations(step.ItemID, xn); if (xc.SelectNodes("rousage").Count > 0) AddROUsages(step.MyContent, xc); if (xc.SelectNodes("transition").Count > 0) AddTransitions(step.MyContent, xc); prevInfo = StepInfo.Get(step.ItemID); if (xc.HasChildNodes) AddParts(xc, prevInfo); return prevInfo; } private void AddSections(XmlNode xn, ItemInfo parentInfo) { if (parentInfo.IsProcedure) { pbImportSection.Value = 0; pbImportStep.Value = 0; pbImportSection.Maximum = xn.ChildNodes.Count; } if (parentInfo.IsSection) { pbImportStep.Value = 0; pbImportStep.Maximum = xn.ChildNodes.Count; } ItemInfo prevInfo = null; foreach (XmlNode nd in xn.ChildNodes) prevInfo = AddSection(nd, parentInfo, prevInfo); } private Dictionary GetSectionData(XmlReader xr) { Dictionary rv = new Dictionary(); rv.Add("itemid", xr.GetAttribute("itemid")); return rv; } private ItemInfo AddSection(XmlReader xr, ItemInfo parentInfo, ItemInfo prevInfo, int oldid) { string number = xr.GetAttribute("number"); string text = xr.GetAttribute("text"); int sectiontype = int.Parse(xr.GetAttribute("type")); string formatid = xr.GetAttribute("formatid"); string config = xr.GetAttribute("config"); string userid = xr.GetAttribute("userid"); DateTime dts = DateTime.Parse(xr.GetAttribute("dts")); Section sect = Section.MakeSection(parentInfo, prevInfo, number, text, sectiontype); sect.DTS = dts; sect.UserID = userid; if (formatid != string.Empty) sect.MyContent.MyFormat = OldToNewFormat(int.Parse(formatid)); sect.MyContent.Config = config; sect.MyContent.DTS = dts; sect.MyContent.UserID = userid; sect.Save(); Old2NewItem.Add(oldid, sect.ItemID); Old2NewContent.Add(int.Parse(xr.GetAttribute("contentid")), sect.MyContent.ContentID); prevInfo = SectionInfo.Get(sect.ItemID); return prevInfo; } private ItemInfo AddSection(XmlNode xn, ItemInfo parentInfo, ItemInfo prevInfo) { pbImportSection.PerformStep(); lblImportSection.Text = string.Format("{0} of {1} Sections", pbImportSection.Value.ToString(), pbImportSection.Maximum.ToString()); Application.DoEvents(); XmlNode xc = xn.SelectSingleNode("content"); Section sect; string number = xc.Attributes.GetNamedItem("number").InnerText; string text = xc.Attributes.GetNamedItem("text").InnerText; int sectiontype = int.Parse(xc.Attributes.GetNamedItem("type").InnerText); string formatid = xc.Attributes.GetNamedItem("formatid").InnerText; string config = xc.Attributes.GetNamedItem("config").InnerText; string userid = xc.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(xc.Attributes.GetNamedItem("dts").InnerText); sect = Section.MakeSection(parentInfo, prevInfo, number, text, sectiontype); sect.DTS = dts; sect.UserID = userid; if (formatid != string.Empty) sect.MyContent.MyFormat = OldToNewFormat(int.Parse(formatid)); sect.MyContent.Config = config; sect.MyContent.DTS = dts; sect.MyContent.UserID = userid; sect.Save(); Old2NewItem.Add(int.Parse(xn.Attributes.GetNamedItem("itemid").InnerText), sect.ItemID); Old2NewContent.Add(int.Parse(xc.Attributes.GetNamedItem("contentid").InnerText), sect.MyContent.ContentID); if (xn.SelectNodes("annotation").Count > 0) AddAnnotations(sect.ItemID, xn); if (xc.SelectNodes("entry").Count > 0) AddEntry(sect.MyContent, xc); if (xc.SelectNodes("rousage").Count > 0) AddROUsages(sect.MyContent, xc); if (xc.SelectNodes("transition").Count > 0) AddTransitions(sect.MyContent, xc); prevInfo = SectionInfo.Get(sect.ItemID); if (xc.HasChildNodes) AddParts(xc, prevInfo); return prevInfo; } private void AddGrid(XmlReader xr) { int contentid = int.Parse(xr.GetAttribute("contentid")); contentid = Old2NewContent[contentid]; Content content = Content.Get(contentid); string data = xr.GetAttribute("data"); string config = xr.GetAttribute("config"); string userid = xr.GetAttribute("userid"); DateTime dts = DateTime.Parse(xr.GetAttribute("dts")); Grid gg = Grid.MakeGrid(content, data, config, dts, userid); } private void AddGrid(Content content, XmlNode xc) { XmlNode nd = xc.SelectSingleNode("grid"); string data = nd.Attributes.GetNamedItem("data").InnerText; XmlDocument xd = new XmlDocument(); xd.LoadXml(data); XmlNode gn = xd.SelectSingleNode("C1FlexGrid/Control/IsRoTable"); if (gn.InnerText.ToLower() == "true") { gn = xd.SelectSingleNode("C1FlexGrid/Control/RODbId"); gn.InnerText = newRODbID.ToString(); data = xd.OuterXml; } else { XmlNodeList nl = xd.SelectNodes("C1FlexGrid/Cells/Cell/Data"); bool modified = false; string lookFor = string.Format(" {0}[END", oldRODbID.ToString()); string replaceWith = string.Format(" {0}[END", newRODbID.ToString()); foreach (XmlNode nn in nl) { if (nn.InnerText.Contains("#Link:ReferencedObject:")) { nn.InnerText = nn.InnerText.Replace(lookFor, replaceWith); modified = true; } } if (modified) data = xd.OuterXml; } string config = nd.Attributes.GetNamedItem("config").InnerText; string userid = nd.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(nd.Attributes.GetNamedItem("dts").InnerText); Grid gg = Grid.MakeGrid(content, data, config, dts, userid); gg.Save(); } private Dictionary AddEntry(XmlReader xr) { Dictionary dic = new Dictionary(); dic.Add("contentid", xr.GetAttribute("contentid")); dic.Add("dts", xr.GetAttribute("dts")); dic.Add("userid", xr.GetAttribute("userid")); return dic; } private void AddEntry(Content content, XmlNode xc) { XmlNode nd = xc.SelectSingleNode("entry"); string userid = nd.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(nd.Attributes.GetNamedItem("dts").InnerText); Document dd = AddDocument(nd.SelectSingleNode("document")); Entry ee = Entry.MakeEntry(content, dd, dts, userid); ee.Save(); } private void AddDocument(XmlReader xr, Dictionary dic) { string libtitle = xr.GetAttribute("libtitle"); byte[] doccontent = Convert.FromBase64String(xr.GetAttribute("doccontent")); string docascii = xr.GetAttribute("docascii"); string config = xr.GetAttribute("config"); string userid = xr.GetAttribute("userid"); DateTime dts = DateTime.Parse(xr.GetAttribute("dts")); string fileextension = xr.GetAttribute("fileextension"); Document dd = Document.MakeDocument(libtitle, doccontent, docascii, config, dts, userid, fileextension); int contentid = int.Parse(dic["contentid"]); contentid = Old2NewContent[contentid]; Content content = Content.Get(contentid); dts = DateTime.Parse(dic["dts"]); userid = dic["userid"]; Entry ee = Entry.MakeEntry(content, dd, dts, userid); } private Document AddDocument(XmlNode xn) { Document d; int docid = int.Parse(xn.Attributes.GetNamedItem("docid").InnerText); if (Old2NewLibDoc.ContainsKey(docid)) { docid = Old2NewLibDoc[docid]; d = Document.Get(docid); } else { string libtitle = xn.Attributes.GetNamedItem("libtitle").InnerText; byte[] doccontent = Convert.FromBase64String(xn.Attributes.GetNamedItem("doccontent").InnerText); string docascii = xn.Attributes.GetNamedItem("docascii").InnerText; string config = xn.Attributes.GetNamedItem("config").InnerText; string userid = xn.Attributes.GetNamedItem("userid").InnerText; DateTime dts = DateTime.Parse(xn.Attributes.GetNamedItem("dts").InnerText); string fileextension = xn.Attributes.GetNamedItem("fileextension").InnerText; d = Document.MakeDocument(libtitle, doccontent, docascii, config, dts, userid, fileextension); d.Save(); Old2NewLibDoc.Add(docid, d.DocID); } return d; } #endregion private void btnCloseExport_Click(object sender, EventArgs e) { this.Close(); } private void btnCloseImport_Click(object sender, EventArgs e) { this.Close(); } } }