270 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			270 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Text;
 | |
| using Volian.Controls.Library;
 | |
| using VEPROMS.CSLA.Library;
 | |
| using System.Text.RegularExpressions;
 | |
| using Volian.Base.Library;
 | |
| using System.Xml;
 | |
| using System.IO;
 | |
| 
 | |
| namespace DataLoader
 | |
| {
 | |
| 	public delegate void TransitionFixerEvent(object sender, TransitionFixerEventArgs args);
 | |
| 	public class TransitionFixerEventArgs
 | |
| 	{
 | |
| 		private string _MyStatus;
 | |
| 
 | |
| 		public string MyStatus
 | |
| 		{
 | |
| 			get { return _MyStatus; }
 | |
| 			set { _MyStatus = value; }
 | |
| 		}
 | |
| 		public TransitionFixerEventArgs(string myStatus)
 | |
| 		{
 | |
| 			_MyStatus = myStatus;
 | |
| 		}
 | |
| 	}
 | |
| 	class TransitionFixer
 | |
| 	{
 | |
| 		public event TransitionFixerEvent StatusChanged;
 | |
| 		private void OnStatusChanged(object sender, TransitionFixerEventArgs args)
 | |
| 		{
 | |
| 			if (StatusChanged != null)
 | |
| 				StatusChanged(sender, args);
 | |
| 		}
 | |
| 		private string _Status;
 | |
| 
 | |
| 		public string Status
 | |
| 		{
 | |
| 			get { return _Status; }
 | |
| 			set
 | |
| 			{
 | |
| 				_Status = value;
 | |
| 				OnStatusChanged(this, new TransitionFixerEventArgs(_Status));
 | |
| 			}
 | |
| 		}
 | |
| 		private int _ErrorCount = 0;
 | |
| 
 | |
| 		public int ErrorCount
 | |
| 		{
 | |
| 			get { return _ErrorCount; }
 | |
| 			set { _ErrorCount = value; }
 | |
| 		}
 | |
| 
 | |
| 		private StepRTB _MyStepRTB;
 | |
| 
 | |
| 		public StepRTB MyStepRTB
 | |
| 		{
 | |
| 			get { return _MyStepRTB; }
 | |
| 		}
 | |
| 		private string _LogPath;
 | |
| 		public TransitionFixer(StepRTB myStepRTB,string logpath)
 | |
| 		{
 | |
| 			_MyStepRTB = myStepRTB;
 | |
| 			_LogPath = logpath;
 | |
| 		}
 | |
| 		public TimeSpan Process(bool checkRTF)
 | |
| 		{
 | |
| 			DateTime tstart = DateTime.Now;
 | |
| 			ProcessTransitions(checkRTF);
 | |
| 			return DateTime.Now - tstart;
 | |
| 		}
 | |
| 		private void ProcessTransitions(bool checkRTF)
 | |
| 		{
 | |
| 			Status = "Getting List...";
 | |
| 			// Loop through all Items and check before and after text
 | |
| 			ItemInfoList myListFrom = ItemInfoList.GetListTranFrom();
 | |
| 			ItemInfoList myListTo = ItemInfoList.GetListTranTo();
 | |
| 			ConversionRTBProblems myProblems = new ConversionRTBProblems();
 | |
| 			int i = 0;
 | |
| 			foreach (ItemInfo item in myListFrom)
 | |
| 			{
 | |
| 				if (item.MyContent.ContentID == 311)
 | |
| 					Console.WriteLine();
 | |
| 				Status = string.Format("Processing {0} of {1} steps", ++i, myListFrom.Count);
 | |
| 				//MyStepRTB.ViewRTB = false;
 | |
| 				string originalText = item.MyContent.Text;
 | |
| 				string updatedText = item.MyContent.Text;
 | |
| 				if (item.MyContent.MyGrid != null)
 | |
| 				{
 | |
| 					originalText = item.MyContent.MyGrid.Data;
 | |
| 					updatedText = (item.MyContent.MyGrid.Data.Replace("<START]", "<START]")).Replace("[END>", "[END>");
 | |
| 				}
 | |
| 				// Exclude items that are not connected (Dummy steps for invalid transition destinations)
 | |
| 				if (item.ItemDocVersionCount != 0 || item.MyPrevious != null || item.MyParent != null)
 | |
| 				{
 | |
| 					if (item.MyContent.ContentTransitionCount > 0)
 | |
| 					{
 | |
| 						//updatedText = Volian.Controls.Library.DisplayText.StaticRemoveRtfStyles(updatedText, item);
 | |
| 						foreach (TransitionInfo tran in item.MyContent.ContentTransitions)
 | |
| 						{
 | |
| 							try
 | |
| 							{
 | |
| 								if (item.MyContent.MyGrid != null)
 | |
| 									updatedText = FixTableTransitionText(updatedText, tran, item.MyContent.Get());
 | |
| 								else
 | |
| 									updatedText = FixTransitionText(updatedText, tran);
 | |
| 							}
 | |
| 							catch (Exception ex)
 | |
| 							{
 | |
| 								Console.WriteLine("{0} {1}", ex.GetType().Name, ex.Message);
 | |
| 							}
 | |
| 							// Added for transitions to un-numbered steps
 | |
| 							if (tran.NewTransToUnNumberedItem) item.NewTransToUnNumberedItem = true;
 | |
| 						}
 | |
| 					}
 | |
| 					if (updatedText.EndsWith(" ")) updatedText = updatedText.Substring(0, updatedText.Length - 1);
 | |
| 					if (item.MyContent.MyGrid != null)
 | |
| 					{
 | |
| 						using (Item itm = item.Get())
 | |
| 						{
 | |
| 							updatedText = (updatedText.Replace("<START]", "<START]")).Replace("[END>", "[END>");
 | |
| 							string sstring = AdjustSizeAndGetSearchString(updatedText, itm);
 | |
| 							itm.MyContent.Text = sstring;
 | |
| 							if (item.NewTransToUnNumberedItem)
 | |
| 							{
 | |
| 								ItemAnnotation ia = itm.ItemAnnotations.Add(VerificationRequiredType);
 | |
| 								ia.SearchText = "Transition to un-numbered step";
 | |
| 								ia.UserID = "Migration";
 | |
| 							}
 | |
| 							itm.Save();
 | |
| 						}
 | |
| 					}
 | |
| 					else
 | |
| 					{
 | |
| 						if (item.NewTransToUnNumberedItem)
 | |
| 						{
 | |
| 							using (Item itm = item.Get())
 | |
| 							{
 | |
| 								ItemAnnotation ia = itm.ItemAnnotations.Add(VerificationRequiredType);
 | |
| 								ia.SearchText = "Transition to un-numbered step";
 | |
| 								ia.UserID = "Migration";
 | |
| 								itm.Save();
 | |
| 							}
 | |
| 						}
 | |
| 						using (Content c = item.MyContent.Get())
 | |
| 						{
 | |
| 							c.Text = updatedText;
 | |
| 							c.Save();
 | |
| 						}
 | |
| 					}
 | |
| 					// Added for transitions to un-numbered steps
 | |
| 				if (checkRTF)
 | |
| 					{
 | |
| 						MyStepRTB.MyItemInfo = item;
 | |
| 						// Force Save - This will put change bars on everything
 | |
| 						if (MyStepRTB.Text.Contains("(Resolved Transition Text)") != false) MyStepRTB.OrigDisplayText.Save(MyStepRTB);
 | |
| 						string afterText = item.MyContent.Text;
 | |
| 						// aftertext is 'newrtf'
 | |
| 						if (afterText != updatedText)
 | |
| 							myProblems.RTBProblems.Add(item.ItemID, item.MyContent.ContentID, originalText, updatedText, MyStepRTB.Rtf, afterText, item.Path);
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 			if (checkRTF)
 | |
| 			{
 | |
| 				Status = "Saving problems";
 | |
| 				string logFile = _LogPath + @"\RTBProblems.xml";
 | |
| 				ErrorCount = myProblems.RTBProblems.Count;
 | |
| 				myProblems.Save(logFile);
 | |
| 				if (ErrorCount > 0)
 | |
| 				{
 | |
| 					System.Windows.Forms.DialogResult answer = System.Windows.Forms.MessageBox.Show(
 | |
| 						string.Format("{0} Differences found in Transition Text\r\nResults in {1}\r\n\r\nOpen Log File?",
 | |
| 						ErrorCount, logFile), "Transitions Different", System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question);
 | |
| 					if(answer == System.Windows.Forms.DialogResult.Yes)
 | |
| 						System.Diagnostics.Process.Start(logFile);
 | |
| 				}
 | |
| 			}
 | |
| 			Status = "Done comparing";
 | |
| 		}
 | |
| 		// Added for transitions to un-numbered steps
 | |
| 		private AnnotationType _VerificationRequiredType; // Using this to flag table to grid conversions
 | |
| 		public AnnotationType VerificationRequiredType
 | |
| 		{
 | |
| 			get 
 | |
| 			{ 
 | |
| 				if (_VerificationRequiredType == null)
 | |
| 					_VerificationRequiredType = AnnotationType.GetByName("Verification Required");
 | |
| 				return _VerificationRequiredType; 
 | |
| 			}
 | |
| 		}
 | |
| 		public string FixTransitionText(string Text, TransitionInfo tran)
 | |
| 		{
 | |
| 			if (tran.MyItemToID.ToString().Contains("diamond"))
 | |
| 				Console.WriteLine();
 | |
| 			string lookFor = string.Format(@"<START\]\\v0 ([^#]*?)\\v #Link:Transition[^:]*?:{0} {1}( [0-9]*){2}\[END>", tran.TranType, tran.TransitionID, "{1,2}");
 | |
| 			string transText = tran.ResolvePathTo();
 | |
| 			//Console.WriteLine(">>>>> FixTransitionText");
 | |
| 			//Console.WriteLine("Text = {0}", Text);
 | |
| 			//Console.WriteLine("lookFor = {0}", lookFor);
 | |
| 			//Console.WriteLine("TransText = {0}", transText);
 | |
| 			Match m = Regex.Match(Text, lookFor);
 | |
| 			if (m != null && m.Groups.Count > 1)
 | |
| 			{
 | |
| 				System.Text.RegularExpressions.Group g = m.Groups[1];
 | |
| 				if (g.ToString() != transText)
 | |
| 					Text = Text.Substring(0, g.Index) + transText + Text.Substring(g.Index + g.Length);
 | |
| 			}
 | |
| 			else
 | |
| 				Console.WriteLine("Transition not Found");
 | |
| 			return Text;
 | |
| 		}
 | |
| 		public string FixTableTransitionText(string Text, TransitionInfo tran, Content content)
 | |
| 		{
 | |
| 			string lookFor = string.Format(@"<START\]\\cf1\\v0 ([^#]*?)\\cf0\\v #Link:Transition[^:]*?:{0} {1}( [0-9]*){2}\[END>", tran.TranType, tran.TransitionID, "{1,2}");
 | |
| 			string transText = tran.ResolvePathTo();
 | |
| 			//Console.WriteLine(">>>>> FixTransitionText");
 | |
| 			//Console.WriteLine("Text = {0}", Text);
 | |
| 			//Console.WriteLine("lookFor = {0}", lookFor);
 | |
| 			//Console.WriteLine("TransText = {0}", transText);
 | |
| 			Match m = Regex.Match(Text, lookFor);
 | |
| 			if (m != null && m.Groups.Count > 1)
 | |
| 			{
 | |
| 				System.Text.RegularExpressions.Group g = m.Groups[1];
 | |
| 				if (g.ToString() != transText)
 | |
| 					Text = Text.Substring(0, g.Index) + transText + Text.Substring(g.Index + g.Length);
 | |
| 			}
 | |
| 			else
 | |
| 				Console.WriteLine("Transition not Found");
 | |
| 
 | |
| 			//VlnFlexGrid grd = new VlnFlexGrid(1, 1);
 | |
| 			//XmlDocument xd = new XmlDocument();
 | |
| 			//xd.LoadXml(Text);
 | |
| 			//grd.ReadXml(xd);
 | |
| 			//grd.FixTableCellsHeightWidth(); // resize the column width/height
 | |
| 			//using (StringWriter sw = new StringWriter())
 | |
| 			//{
 | |
| 			//    grd.WriteXml(sw);
 | |
| 			//    //Console.WriteLine(sw.GetStringBuilder().ToString());
 | |
| 			//    content.MyGrid.Data = sw.GetStringBuilder().ToString();
 | |
| 			//    sw.Close();
 | |
| 			//}
 | |
| 			return Text;
 | |
| 		}
 | |
| 		private string AdjustSizeAndGetSearchString(string strXML, Item itm)
 | |
| 		{
 | |
| 			string rstring = "";
 | |
| 			VlnFlexGrid grd = new VlnFlexGrid(1, 1);
 | |
| 			XmlDocument xd = new XmlDocument();
 | |
| 			xd.LoadXml(strXML);
 | |
| 			grd.ReadXml(xd);
 | |
| 			//using (StringReader sr = new StringReader(strXML))
 | |
| 			//{
 | |
| 			//    grd.ReadXml(sr);
 | |
| 			//    sr.Close();
 | |
| 			//}
 | |
| 			grd.FixTableCellsHeightWidth(); // resize the column width/height
 | |
| 			rstring = grd.GetSearchableText();
 | |
| 			using (StringWriter sw = new StringWriter())
 | |
| 			{
 | |
| 				grd.WriteXml(sw);
 | |
| 				itm.MyContent.MyGrid.Data = sw.GetStringBuilder().ToString();
 | |
| 				sw.Close();
 | |
| 			}
 | |
| 			return rstring;
 | |
| 		}
 | |
| 	}
 | |
| }
 |