291 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			291 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Text;
 | |
| using VEPROMS.CSLA.Library;
 | |
| using System.Windows.Forms;
 | |
| 
 | |
| namespace DataLoader
 | |
| {
 | |
| 	public delegate void ROFixerEvent(object sender, ROFixerEventArgs args);
 | |
| 	public class ROFixerEventArgs
 | |
| 	{
 | |
| 		private string _MyStatus;
 | |
| 
 | |
| 		public string MyStatus
 | |
| 		{
 | |
| 			get { return _MyStatus; }
 | |
| 			set { _MyStatus = value; }
 | |
| 		}
 | |
| 		public ROFixerEventArgs(string myStatus)
 | |
| 		{
 | |
| 			_MyStatus = myStatus;
 | |
| 		}
 | |
| 	}
 | |
| 	class ROFixer
 | |
| 	{
 | |
| 		public static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 | |
| 		public event ROFixerEvent StatusChanged;
 | |
| 		private void OnStatusChanged(object sender, ROFixerEventArgs args)
 | |
| 		{
 | |
| 			if (StatusChanged != null)
 | |
| 				StatusChanged(sender, args);
 | |
| 		}
 | |
| 		private string _Status;
 | |
| 
 | |
| 		public string Status
 | |
| 		{
 | |
| 			get { return _Status; }
 | |
| 			set
 | |
| 			{
 | |
| 				_Status = value;
 | |
| 				OnStatusChanged(this, new ROFixerEventArgs(_Status));
 | |
| 			}
 | |
| 		}
 | |
| 		private int _ErrorCount = 0;
 | |
| 
 | |
| 		public int ErrorCount
 | |
| 		{
 | |
| 			get { return _ErrorCount; }
 | |
| 			set { _ErrorCount = value; }
 | |
| 		}
 | |
| 		private string _LogPath;
 | |
| 		private frmLoader frmMain;
 | |
| 		public ROFixer(string logpath, frmLoader myfrmMain)
 | |
| 		{
 | |
| 			_LogPath = logpath;
 | |
| 			frmMain = myfrmMain;
 | |
| 		}
 | |
| 		public TimeSpan Process()
 | |
| 		{
 | |
| 			DateTime tstart = DateTime.Now;
 | |
| 			ProcessROs();
 | |
| 			return DateTime.Now - tstart;
 | |
| 		}
 | |
| 		public TimeSpan Process(DocVersionInfo dvi)
 | |
| 		{
 | |
| 			DateTime tstart = DateTime.Now;
 | |
| 			ProcessROs(dvi);
 | |
| 			return DateTime.Now - tstart;
 | |
| 		}
 | |
| 		public TimeSpan Process(ProcedureInfo pi)
 | |
| 		{
 | |
| 			DateTime tstart = DateTime.Now;
 | |
| 			ProcessROs(pi);
 | |
| 			return DateTime.Now - tstart;
 | |
| 		}
 | |
| 		private void ProcessROs()
 | |
| 		{
 | |
| 			Status = "Getting List...";
 | |
| 			RoUsageInfoList myRoUsages = RoUsageInfoList.Get();
 | |
| 			DoProcessROs(myRoUsages);
 | |
| 		}
 | |
| 		//private void ProcessROs(FolderInfo fi)
 | |
| 		//{
 | |
| 		//  Status = "Getting List...";
 | |
| 		//  RoUsageInfoList myRoUsages = RoUsageInfoList.GetByFolder(fi);
 | |
| 		//  DoProcessROs(myRoUsages);
 | |
| 		//}
 | |
| 		private void ProcessROs(DocVersionInfo dvi)
 | |
| 		{
 | |
| 			Status = "Getting List...";
 | |
| 			RoUsageInfoList myRoUsages = RoUsageInfoList.GetByDocVersion(dvi);
 | |
| 			DoProcessROs(myRoUsages);
 | |
| 		}
 | |
| 		private void ProcessROs(ProcedureInfo pi)
 | |
| 		{
 | |
| 			Status = "Getting List...";
 | |
| 			RoUsageInfoList myRoUsages = RoUsageInfoList.GetByProcedure(pi);
 | |
| 			DoProcessROs(myRoUsages);
 | |
| 		}
 | |
| 		private AnnotationType _VolianCommentType = null; // Using this to flag ro value issues with byron to braidwood
 | |
| 		public AnnotationType VolianCommentType
 | |
| 		{
 | |
| 			get
 | |
| 			{
 | |
| 				if (_VolianCommentType == null)
 | |
| 					_VolianCommentType = AnnotationType.GetByName("Volian Comment");
 | |
| 				if (_VolianCommentType == null)
 | |
| 					_VolianCommentType = AnnotationType.MakeAnnotationType("Volian Comment",null);
 | |
| 				return _VolianCommentType; 
 | |
| 			}
 | |
| 		}
 | |
| 		private void DoProcessROs(RoUsageInfoList myRoUsages)
 | |
| 		{
 | |
| 			int changeCount = 0;
 | |
| 			// get list of content records
 | |
| 			List<int> myContentList = new List<int>();
 | |
| 			Dictionary<int, ROFSTLookup> roFstLookups = new Dictionary<int,ROFSTLookup>();
 | |
| 			Dictionary<int, ROFSTLookup> oldRoFstLookups = null;
 | |
| 			ROFstInfo oldRoFst = null;
 | |
| 			if (frmMain.MySettings.SelectedROFst > 0)
 | |
| 			{
 | |
| 				oldRoFst = ROFstInfo.Get(frmMain.MySettings.SelectedROFst);
 | |
| 				oldRoFstLookups = new Dictionary<int, ROFSTLookup>();
 | |
| 			}
 | |
| 			foreach (RoUsageInfo rou in myRoUsages)
 | |
| 			{
 | |
| 				if (!myContentList.Contains(rou.ContentID))
 | |
| 				{
 | |
| 					myContentList.Add(rou.ContentID);
 | |
| 				}
 | |
| 			}
 | |
| 			int i = 0;
 | |
| 			foreach (int cid in myContentList)
 | |
| 			{
 | |
| 				Status = string.Format("Processing {0} of {1} steps", ++i, myContentList.Count);
 | |
| 				ContentInfo myContentInfo = ContentInfo.Get(cid);
 | |
| 				DocVersionInfo dvi = myContentInfo.ContentItems[0].MyProcedure.MyDocVersion;
 | |
| 				int versionId = dvi.VersionID;
 | |
| 				ROFstInfo myRoFst = dvi.DocVersionAssociations[0].MyROFst;
 | |
| 				if (!roFstLookups.ContainsKey(versionId))
 | |
| 				{
 | |
| 					roFstLookups.Add(versionId, myRoFst.GetROFSTLookup(dvi));
 | |
| 				}
 | |
| 				ROFSTLookup myLookup = roFstLookups[versionId];
 | |
| 				if (oldRoFstLookups != null && !oldRoFstLookups.ContainsKey(versionId))
 | |
| 				{
 | |
| 					oldRoFstLookups.Add(versionId, oldRoFst.GetROFSTLookup(dvi));
 | |
| 				}
 | |
| 				ROFSTLookup oldLookup = null;
 | |
| 				if(oldRoFstLookups != null)
 | |
| 					oldLookup = oldRoFstLookups[versionId];
 | |
| 				using (Content ctmp = myContentInfo.Get())
 | |
| 				{
 | |
| 					ItemInfo ii = myContentInfo.ContentItems[0];
 | |
| 					foreach (RoUsageInfo ru in myContentInfo.ContentRoUsages)
 | |
| 					{
 | |
| 						string sameMsg = string.Empty;
 | |
| 						bool theSame = false;
 | |
| 						//if (oldLookup != null)
 | |
| 						//  theSame = CheckIfTheSame(ii, ru.ROID, myLookup, oldLookup, dvi, ref sameMsg);
 | |
| 						ROFSTLookup.rochild rocc = myLookup.GetRoChild12(ru.ROID);
 | |
| 						if (rocc.value == null)
 | |
| 							rocc = myLookup.GetRoChild(ru.ROID);
 | |
| 						int myType = rocc.type;
 | |
| 						string myValue = myLookup.GetTranslatedRoValue(ru.ROID, ii.ActiveFormat.PlantFormat.FormatData.SectData.ConvertCaretToDelta);
 | |
| 						myValue = myValue.Replace(@"\up2 \u8209?", @"\up2\u8209?");// Remove space between superscript command and non-breaking hyphen
 | |
| 						string fileNameOnly = null;
 | |
| 						if (myType == 8 && myValue.Contains("\n"))
 | |
| 						{
 | |
| 							fileNameOnly = myValue.Split("\n".ToCharArray())[0];
 | |
| 							myValue = myValue.Replace("\n", "");// Remove newlines in Figure data
 | |
| 						}
 | |
| 						string textB4 = ctmp.Text;
 | |
| 						myRoFst.ROTableUpdate += new ROFstInfoROTableUpdateEvent(myRoFst_ROTableUpdate);
 | |
| 						string oldval;
 | |
| 						switch (frmMain.MySettings.WhatROsToConvert)
 | |
| 						{
 | |
| 							case ROUpdateMode.None:
 | |
| 								oldval = ctmp.FixContentText(ru, myValue, myType, myRoFst, fileNameOnly);
 | |
| 								if(myValue == "?" && frmMain.MySettings.AnnotateWhenShowingMissingRO)
 | |
| 									Annotation.MakeAnnotation(ctmp.ContentItems[0].MyItem, VolianCommentType, "", string.Format("RO value ({0}) missing", ItemInfo.ConvertToDisplayText(oldval)), null);
 | |
| 								else if (ctmp.Text != textB4 && frmMain.MySettings.AnnotateWhenShowingDifferentRO)
 | |
| 									Annotation.MakeAnnotation(ctmp.ContentItems[0].MyItem, VolianCommentType, "", string.Format("Old RO value ({0}) different than new RO value({1})", ItemInfo.ConvertToDisplayText(oldval), ItemInfo.ConvertToDisplayText(myValue)), null);
 | |
| 								break;
 | |
| 							case ROUpdateMode.All:
 | |
| 								oldval = ctmp.ConvertROToText(ru, myValue, myType, myRoFst);
 | |
| 								if (frmMain.MySettings.AnnotateWhenConvertingToText)
 | |
| 									Annotation.MakeAnnotation(ctmp.ContentItems[0].MyItem, VolianCommentType, "", string.Format("RO value ({0}) converted to text", ItemInfo.ConvertToDisplayText(oldval)), null);
 | |
| 								break;
 | |
| 							default:
 | |
| 								if (myValue == "?")
 | |
| 								{
 | |
| 									oldval = ctmp.ConvertROToText(ru, myValue, myType, myRoFst);
 | |
| 									if (frmMain.MySettings.AnnotateWhenConvertingToText)
 | |
| 										Annotation.MakeAnnotation(ctmp.ContentItems[0].MyItem, VolianCommentType, "", string.Format("RO value ({0}) converted to text" + sameMsg, ItemInfo.ConvertToDisplayText(oldval)), null);
 | |
| 								}
 | |
| 								else
 | |
| 								{
 | |
| 									oldval = ctmp.FixContentText(ru, myValue, myType, myRoFst, fileNameOnly);
 | |
| 									if (ctmp.Text != textB4 && frmMain.MySettings.AnnotateWhenShowingDifferentRO)
 | |
| 										Annotation.MakeAnnotation(ctmp.ContentItems[0].MyItem, VolianCommentType, "", string.Format("Old RO value ({0}) different than new RO value({1})" + sameMsg, ItemInfo.ConvertToDisplayText(oldval), ItemInfo.ConvertToDisplayText(myValue)), null);
 | |
| 								}
 | |
| 								break;
 | |
| 						}
 | |
| 						myRoFst.ROTableUpdate -= new ROFstInfoROTableUpdateEvent(myRoFst_ROTableUpdate);
 | |
| 						if (ctmp.Text != textB4)
 | |
| 						{
 | |
| 								changeCount++;
 | |
| 								//Console.WriteLine("'{0}', '{1}', '{2}', '{3}'", replace(oldval, @"\u8209?", "-"), replace(myValue, @"\u8209?", "-"), ru.ROID, rocc.appid);
 | |
| 							frmMain.AddInfo("'{0}','{1}','{2}','{3}','R{4}','{5}','{6}'", ii.MyDocVersion.MyFolder.Name, ii.ShortPath,
 | |
| 								(oldval ?? "").Replace(@"\u8209?", "-").Replace("'", "''"), myValue.Replace(@"\u8209?", "-").Replace("'", "''"), ru.ROID, myLookup.GetAccPageID(ru.ROID), sameMsg);
 | |
| 						}
 | |
| 						else if (sameMsg != string.Empty && sameMsg != ", Exact Match")
 | |
| 						{
 | |
| 							frmMain.AddInfo("'{0}','{1}','{2}','{3}','R{4}','{5}','{6}'", ii.MyDocVersion.MyFolder.Name, ii.ShortPath,
 | |
| 								(oldval ?? "").Replace(@"\u8209?", "-").Replace("'", "''"), myValue.Replace(@"\u8209?", "-").Replace("'", "''"), ru.ROID, myLookup.GetAccPageID(ru.ROID), sameMsg);
 | |
| 						}
 | |
| 					}
 | |
| 					if (ctmp.IsDirty)
 | |
| 					{
 | |
| 						//ctmp.DTS = DateTime.Now;
 | |
| 						ctmp.Save();
 | |
| 						ContentInfo.Refresh(ctmp);
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 			frmMain.AddInfo("{0} RO Values Updated", changeCount);
 | |
| 			MessageBox.Show(String.Format("{0} RO Values Updated", changeCount), "RO Value Update Complete", MessageBoxButtons.OK, MessageBoxIcon.Information);
 | |
| 		}
 | |
| 
 | |
| 		private bool CheckIfTheSame(ItemInfo ii, string roid, ROFSTLookup myLookup, ROFSTLookup oldLookup, DocVersionInfo dvi, ref string sameMsg)
 | |
| 		{
 | |
| 			/*
 | |
| 									ROFSTLookup.rochild rocc = myLookup.GetRoChild12(ru.ROID);
 | |
| 									if (rocc.value == null)
 | |
| 										rocc = myLookup.GetRoChild(ru.ROID);
 | |
| 									int myType = rocc.type;
 | |
| 			*/
 | |
| 			ROFSTLookup.rochild roc = myLookup.GetRoChild12(roid);
 | |
| 			if (roc.value == null) roc = myLookup.GetRoChild(roid);
 | |
| 			ROFSTLookup.rochild oroc = oldLookup.GetRoChild12(roid);
 | |
| 			if (oroc.value == null) oroc = oldLookup.GetRoChild(roid);
 | |
| 			string myValue = myLookup.GetTranslatedRoValue(roid, ii.ActiveFormat.PlantFormat.FormatData.SectData.ConvertCaretToDelta);
 | |
| 			myValue = myValue.Replace(@"\up2 \u8209?", @"\up2\u8209?");// Remove space between superscript command and non-breaking hyphen
 | |
| 			string oldValue = oldLookup.GetTranslatedRoValue(roid, ii.ActiveFormat.PlantFormat.FormatData.SectData.ConvertCaretToDelta);
 | |
| 			oldValue = oldValue.Replace(@"\up2 \u8209?", @"\up2\u8209?");// Remove space between superscript command and non-breaking hyphen
 | |
| 			string myAccPageID = myLookup.GetAccPageID(roid);
 | |
| 			string oldAccPageID = oldLookup.GetAccPageID(roid);
 | |
| 			if (myValue == oldValue && roc.type == oroc.type && ((myAccPageID ?? "null") == (oldAccPageID ?? "null")))
 | |
| 			{
 | |
| 				sameMsg = ", Exact Match";
 | |
| 				return true;
 | |
| 			}
 | |
| 			if (myValue != oldValue && roc.type == oroc.type && ((myAccPageID ?? "null") == (oldAccPageID ?? "null")))
 | |
| 			{
 | |
| 				sameMsg = ", Different Value, Same RO";
 | |
| 				return false;
 | |
| 			}
 | |
| 			if ((myAccPageID ?? "null") != (oldAccPageID ?? "null"))
 | |
| 			{
 | |
| 				ROFSTLookup.rochild? myroc = myLookup.GetROChildByAccPageID(oldAccPageID, dvi.DocVersionConfig.RODefaults_setpointprefix), dvi.DocVersionConfig.RODefaults_graphicsprefix);
 | |
| 				if (myroc != null)
 | |
| 				{
 | |
| 					string myValueNew = myLookup.GetTranslatedRoValue(((ROFSTLookup.rochild)myroc).roid, ii.ActiveFormat.PlantFormat.FormatData.SectData.ConvertCaretToDelta);
 | |
| 				if(myValueNew == oldValue)
 | |
| 					sameMsg = ", Same Value, Different RO";
 | |
| 				else
 | |
| 					sameMsg = ", Different Value, Different RO";
 | |
| 				}
 | |
| 				else
 | |
| 					sameMsg = ", Missing RO";
 | |
| 				return false;
 | |
| 			}
 | |
| 			sameMsg = ", Unknown";
 | |
| 
 | |
| 			//if (myLookup.GetAccPageID(roid) == oldLookup.GetAccPageID(roid))
 | |
| 			//{
 | |
| 			//  sameMsg = string.Format("ROID: {0}, AccPageID: {1}, OldAccPageID: {2}", roid, myLookup.GetAccPageID(roid), oldLookup.GetAccPageID(roid));
 | |
| 			//  return false;
 | |
| 			//}
 | |
| 			//sameMsg = "Values and AccPageIDs are different for ROID: " + roid;
 | |
| 			return false;
 | |
| 		}
 | |
| 
 | |
| 		private List<string> myRoFst_ROTableUpdate(object sender, ROFstInfoROTableUpdateEventArgs args)
 | |
| 		{
 | |
| 			return Volian.Controls.Library.VlnFlexGrid.ROTableUpdate(sender,args);
 | |
| 		}
 | |
| 	}
 | |
| }
 |