
Updated how RO values are updated as a result of issues identified by Calvert data Modified code to handle non-standard characters in StepType variable. Chnaged how transitions are updated to utilize methods of Content and ContentInfo classes
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);
|
|
}
|
|
}
|
|
}
|