|
|
|
@@ -43,18 +43,15 @@ using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.ComponentModel;
|
|
|
|
|
using System.Data;
|
|
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
using System.Collections.Specialized;
|
|
|
|
|
using System.IO;
|
|
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
|
using System.Xml.Serialization;
|
|
|
|
|
using System.Xml.Schema;
|
|
|
|
|
using System.Xml;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Runtime.InteropServices;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Text.RegularExpressions;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
using System.Xml;
|
|
|
|
|
using System.Xml.Schema;
|
|
|
|
|
using System.Xml.Serialization;
|
|
|
|
|
|
|
|
|
|
namespace Baseline
|
|
|
|
|
{
|
|
|
|
@@ -70,15 +67,10 @@ namespace Baseline
|
|
|
|
|
StartsWith,
|
|
|
|
|
EndsWith,
|
|
|
|
|
Regex
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public partial class frmBaseline : Form
|
|
|
|
|
{
|
|
|
|
|
private IgnoreLines _MyIgnore = new IgnoreLines();
|
|
|
|
|
public IgnoreLines MyIgnore
|
|
|
|
|
{
|
|
|
|
|
get { return _MyIgnore; }
|
|
|
|
|
set { _MyIgnore = value; }
|
|
|
|
|
}
|
|
|
|
|
public IgnoreLines MyIgnore { get; set; } = new IgnoreLines();
|
|
|
|
|
private LastWas myLast = LastWas.Search;
|
|
|
|
|
private Settings MySettings;
|
|
|
|
|
public string MyStatus
|
|
|
|
@@ -149,10 +141,12 @@ namespace Baseline
|
|
|
|
|
this.Location = Properties.Settings.Default.Location;
|
|
|
|
|
this.Size = Properties.Settings.Default.Size;
|
|
|
|
|
this.WindowState = Properties.Settings.Default.WidnowState;
|
|
|
|
|
if(Properties.Settings.Default.Ignore != null && Properties.Settings.Default.Ignore != "")
|
|
|
|
|
if (Properties.Settings.Default.Ignore != null && Properties.Settings.Default.Ignore != "")
|
|
|
|
|
MyIgnore = IgnoreLines.Get(Properties.Settings.Default.Ignore);
|
|
|
|
|
MySettings= new Settings();
|
|
|
|
|
MySettings.IgnoreLines = new BindingList<string>();
|
|
|
|
|
MySettings = new Settings
|
|
|
|
|
{
|
|
|
|
|
IgnoreLines = new BindingList<string>()
|
|
|
|
|
};
|
|
|
|
|
splitContainer1.SplitterDistance = Properties.Settings.Default.Split1;
|
|
|
|
|
splitContainer2.SplitterDistance = Properties.Settings.Default.Split2;
|
|
|
|
|
splitContainer3.SplitterDistance = Properties.Settings.Default.Split3;
|
|
|
|
@@ -224,7 +218,7 @@ namespace Baseline
|
|
|
|
|
lbResults2.Items.Clear();
|
|
|
|
|
MyStatus = "Searching...";
|
|
|
|
|
// Perform DebugPagination Comparison
|
|
|
|
|
FindFiles fnd = new FindFiles(cbFile1.Text, cbFile2.Text, "DebugPagination.txt",MyIgnore);
|
|
|
|
|
FindFiles fnd = new FindFiles(cbFile1.Text, cbFile2.Text, "DebugPagination.txt",MyIgnore, cbUseTruncatedData.Checked);
|
|
|
|
|
lbDifferent.DataSource = fnd;
|
|
|
|
|
lbDifferent.DisplayMember = "File1";
|
|
|
|
|
MyStatus = string.Format("{0} Differences Found", fnd.Count);
|
|
|
|
@@ -240,28 +234,27 @@ namespace Baseline
|
|
|
|
|
lbProcedures.Items.Clear();
|
|
|
|
|
lbResults1.Items.Clear();
|
|
|
|
|
lbResults2.Items.Clear();
|
|
|
|
|
FindFile ff = lbDifferent.SelectedItem as FindFile;
|
|
|
|
|
if (ff != null)
|
|
|
|
|
{
|
|
|
|
|
// Fill Procedure or Result ListBoxes
|
|
|
|
|
switch (myLast)
|
|
|
|
|
{
|
|
|
|
|
case LastWas.Pagination:
|
|
|
|
|
CompareContent(ff.File1, ff.File2);// Compare DebugPagination
|
|
|
|
|
break;
|
|
|
|
|
case LastWas.Baseline:
|
|
|
|
|
CompareContent3(ff.File1, ff.File2);// Compare DebugMeta
|
|
|
|
|
break;
|
|
|
|
|
case LastWas.Search:
|
|
|
|
|
ShowSearchResults(ff.File1, ff.File2);// Perform search on DebugMeta
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
CompareContent(ff.File1, ff.File2);//Default DebugPagination
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//CompareOneFile(ff.File1, ff.File2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (lbDifferent.SelectedItem is FindFile ff)
|
|
|
|
|
{
|
|
|
|
|
// Fill Procedure or Result ListBoxes
|
|
|
|
|
switch (myLast)
|
|
|
|
|
{
|
|
|
|
|
case LastWas.Pagination:
|
|
|
|
|
CompareContent(ff.File1, ff.File2);// Compare DebugPagination
|
|
|
|
|
break;
|
|
|
|
|
case LastWas.Baseline:
|
|
|
|
|
CompareContent3(ff.File1, ff.File2);// Compare DebugMeta
|
|
|
|
|
break;
|
|
|
|
|
case LastWas.Search:
|
|
|
|
|
ShowSearchResults(ff.File1, ff.File2);// Perform search on DebugMeta
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
CompareContent(ff.File1, ff.File2);//Default DebugPagination
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//CompareOneFile(ff.File1, ff.File2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Procedures MyProcs1;
|
|
|
|
|
Procedures MyProcs2;
|
|
|
|
|
/// <summary>
|
|
|
|
@@ -361,13 +354,6 @@ namespace Baseline
|
|
|
|
|
lines1 = list1.AsEnumerable<string>();// Convert back to Enumerable to work with LINQ
|
|
|
|
|
return lines1;
|
|
|
|
|
}
|
|
|
|
|
private string GetProcNum(string line)
|
|
|
|
|
{
|
|
|
|
|
string retval = line.Substring(3, line.IndexOf(" | ") - 3);
|
|
|
|
|
if (retval.Contains("_"))
|
|
|
|
|
retval = retval.Substring(0, retval.IndexOf("_") - 1);
|
|
|
|
|
return retval;
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Include lines for Procedure or Page or Search is true
|
|
|
|
|
/// Account for Case Insensitive CheckBox
|
|
|
|
@@ -450,8 +436,8 @@ namespace Baseline
|
|
|
|
|
private void lbResults1_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
string line=null;
|
|
|
|
|
if (lbResults1.SelectedItem is string)
|
|
|
|
|
line = (string)lbResults1.SelectedItem;
|
|
|
|
|
if (lbResults1.SelectedItem is string v)
|
|
|
|
|
line = v;
|
|
|
|
|
Line myLine = lbResults1.SelectedItem as Line;
|
|
|
|
|
switch (myLast)
|
|
|
|
|
{
|
|
|
|
@@ -472,8 +458,8 @@ namespace Baseline
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
string line=null;
|
|
|
|
|
if(lbResults2.SelectedItem is string)
|
|
|
|
|
line = (string)lbResults2.SelectedItem;
|
|
|
|
|
if(lbResults2.SelectedItem is string v)
|
|
|
|
|
line = v;
|
|
|
|
|
Line myLine = lbResults2.SelectedItem as Line;
|
|
|
|
|
|
|
|
|
|
switch (myLast)
|
|
|
|
@@ -515,16 +501,10 @@ namespace Baseline
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
private string ParseOutProcedureNumberFromLine(string txt)
|
|
|
|
|
{
|
|
|
|
|
// old logic was looking for the first occurence of ".S" in the txt string as the ending point of the procedure nuumber
|
|
|
|
|
// Beaver Valley has a procedure number "1.SBGEN" in which the old logic would not work
|
|
|
|
|
// 1.SBGEN.SC. ==> short path of attachment section "C"
|
|
|
|
|
// 1.SBGEN.SC..S1. ==> short path of Step 1 in attachment section "C"
|
|
|
|
|
string rtnstr = null;
|
|
|
|
|
int lidx = -1;
|
|
|
|
|
// if the item is to a high levels step or sub-step the short path as "..S" for each part of the step
|
|
|
|
|
// so look for the last occurence of ".." which will be the end of the section information
|
|
|
|
|
lidx = txt.LastIndexOf("..");
|
|
|
|
|
if (lidx > 0)
|
|
|
|
|
// if the item is to a high levels step or sub-step the short path as "..S" for each part of the step
|
|
|
|
|
// so look for the last occurence of ".." which will be the end of the section information
|
|
|
|
|
int lidx = txt.LastIndexOf("..");
|
|
|
|
|
if (lidx > 0)
|
|
|
|
|
{
|
|
|
|
|
lidx = txt.LastIndexOf(".S", lidx); // this will position us to the end of the procedure number
|
|
|
|
|
}
|
|
|
|
@@ -532,9 +512,13 @@ namespace Baseline
|
|
|
|
|
{
|
|
|
|
|
lidx = txt.LastIndexOf(".S"); // this will position us to the end of the procedure number if there was no step information
|
|
|
|
|
}
|
|
|
|
|
// B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file.
|
|
|
|
|
rtnstr = txt.Substring(8, lidx - 8).Replace("/", "_").Replace("\\", "_");
|
|
|
|
|
return rtnstr;
|
|
|
|
|
// old logic was looking for the first occurence of ".S" in the txt string as the ending point of the procedure nuumber
|
|
|
|
|
// Beaver Valley has a procedure number "1.SBGEN" in which the old logic would not work
|
|
|
|
|
// 1.SBGEN.SC. ==> short path of attachment section "C"
|
|
|
|
|
// 1.SBGEN.SC..S1. ==> short path of Step 1 in attachment section "C"
|
|
|
|
|
// B2018-113 - Replace slashes and backslashes with underscores just as PROMS does when creating a PDF file.
|
|
|
|
|
string rtnstr = txt.Substring(8, lidx - 8).Replace("/", "_").Replace("\\", "_");
|
|
|
|
|
return rtnstr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
string exePath;
|
|
|
|
@@ -616,10 +600,10 @@ namespace Baseline
|
|
|
|
|
progname = @"C:\Program Files (x86)\IDM Computer Solutions\UltraCompare\UC.exe";
|
|
|
|
|
System.Diagnostics.ProcessStartInfo psi =
|
|
|
|
|
new System.Diagnostics.ProcessStartInfo(progname, string.Format(@" -t ""{0}"" ""{1}""", compareFile, baseFile));
|
|
|
|
|
System.Diagnostics.Process prc = System.Diagnostics.Process.Start(psi);
|
|
|
|
|
}
|
|
|
|
|
_ = System.Diagnostics.Process.Start(psi);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private ProcessLocationQueue myQueue= new ProcessLocationQueue();
|
|
|
|
|
private readonly ProcessLocationQueue myQueue= new ProcessLocationQueue();
|
|
|
|
|
private Timer queueTimer = null;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Move a Process to a specific screen location - This is done with a timer so
|
|
|
|
@@ -632,9 +616,11 @@ namespace Baseline
|
|
|
|
|
{
|
|
|
|
|
if (queueTimer == null)
|
|
|
|
|
{
|
|
|
|
|
queueTimer = new Timer();
|
|
|
|
|
queueTimer.Enabled = false;
|
|
|
|
|
queueTimer.Tick += queueTimer_Tick;
|
|
|
|
|
queueTimer = new Timer
|
|
|
|
|
{
|
|
|
|
|
Enabled = false
|
|
|
|
|
};
|
|
|
|
|
queueTimer.Tick += queueTimer_Tick;
|
|
|
|
|
queueTimer.Interval = 1000;
|
|
|
|
|
}
|
|
|
|
|
myQueue.Add(proc, x, y);
|
|
|
|
@@ -669,8 +655,8 @@ namespace Baseline
|
|
|
|
|
string procPatern = string.Format("*{0}*.pdf", proc == string.Empty ? "noProcNumber" : proc);
|
|
|
|
|
int pagenum = myLine.MyPage.Number;
|
|
|
|
|
FindFile ff = lbDifferent.SelectedItem as FindFile;
|
|
|
|
|
string PDFfileName = null;
|
|
|
|
|
if (list == 1)
|
|
|
|
|
string PDFfileName;
|
|
|
|
|
if (list == 1)
|
|
|
|
|
{
|
|
|
|
|
FileInfo fi1 = new FileInfo(ff.File1);
|
|
|
|
|
PDFfileName = GetPFDFileAndPath(fi1, procPatern);
|
|
|
|
@@ -701,11 +687,13 @@ namespace Baseline
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// open the PDF and jump to the page number
|
|
|
|
|
System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A \"page={0}\" \"{1}\" ", pagenum,PDFfileName));
|
|
|
|
|
psi1.UseShellExecute = false;
|
|
|
|
|
System.Diagnostics.Process p1 = System.Diagnostics.Process.Start(psi1);
|
|
|
|
|
}
|
|
|
|
|
// open the PDF and jump to the page number
|
|
|
|
|
System.Diagnostics.ProcessStartInfo psi1 = new System.Diagnostics.ProcessStartInfo(exePath, string.Format("/A \"page={0}\" \"{1}\" ", pagenum, PDFfileName))
|
|
|
|
|
{
|
|
|
|
|
UseShellExecute = false
|
|
|
|
|
};
|
|
|
|
|
_ = System.Diagnostics.Process.Start(psi1);
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Perform Debug Meta file comparison for all of the folders within the automated testing folders
|
|
|
|
|
/// </summary>
|
|
|
|
@@ -720,8 +708,9 @@ namespace Baseline
|
|
|
|
|
lbResults1.Items.Clear();
|
|
|
|
|
lbResults2.Items.Clear();
|
|
|
|
|
MyStatus = "Searching...";
|
|
|
|
|
// Perform code to find DebugMeta files with diffences
|
|
|
|
|
FindFiles fnd = new FindFiles(cbFile1.Text, cbFile2.Text, "DebugMeta.txt",MyIgnore);
|
|
|
|
|
|
|
|
|
|
FindFiles fnd = new FindFiles(cbFile1.Text, cbFile2.Text, "DebugMeta.txt", MyIgnore, cbUseTruncatedData.Checked);
|
|
|
|
|
|
|
|
|
|
lbDifferent.DataSource = fnd;
|
|
|
|
|
lbDifferent.DisplayMember = "File1";
|
|
|
|
|
MyStatus = string.Format("{0} Differences Found", fnd.Count);
|
|
|
|
@@ -744,7 +733,7 @@ namespace Baseline
|
|
|
|
|
lbResults2.Items.Clear();
|
|
|
|
|
MyStatus = "Searching...";
|
|
|
|
|
//Perform Search
|
|
|
|
|
FindFiles fnd = new FindFiles(cbFile1.Text, cbFile2.Text, "DebugMeta.txt", tbSearch.Text, SearchType.Contains, cbCaseSensitive.Checked);
|
|
|
|
|
FindFiles fnd = new FindFiles(cbFile1.Text, cbFile2.Text, "DebugMeta.txt", tbSearch.Text, SearchType.Contains, cbCaseSensitive.Checked, cbUseTruncatedData.Checked);
|
|
|
|
|
lbDifferent.DataSource = fnd;
|
|
|
|
|
lbDifferent.DisplayMember = "File1";
|
|
|
|
|
MyStatus = string.Format("{0} Differences Found", fnd.Count);
|
|
|
|
@@ -785,11 +774,10 @@ namespace Baseline
|
|
|
|
|
}
|
|
|
|
|
private void lbProcedures_SelectedIndexChanged(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
//Initialize Results List Box
|
|
|
|
|
Procedure myProc = lbProcedures.SelectedItem as Procedure;
|
|
|
|
|
if (myProc == null) return; // clicked on the white space (blank line) in the list of different procedures
|
|
|
|
|
//TODO: May need to consider if there are duplicate procedure numers and titles
|
|
|
|
|
Procedure myProc1 = MyProcs1.Find(x => x.Number == myProc.Number && x.Title == myProc.Title);
|
|
|
|
|
//Initialize Results List Box
|
|
|
|
|
if (!(lbProcedures.SelectedItem is Procedure myProc)) return; // clicked on the white space (blank line) in the list of different procedures
|
|
|
|
|
//TODO: May need to consider if there are duplicate procedure numers and titles
|
|
|
|
|
Procedure myProc1 = MyProcs1.Find(x => x.Number == myProc.Number && x.Title == myProc.Title);
|
|
|
|
|
// Build the results ListBox for the left window
|
|
|
|
|
lbResults1.Items.Clear();
|
|
|
|
|
if (myProc1 != null)
|
|
|
|
@@ -827,6 +815,7 @@ namespace Baseline
|
|
|
|
|
CompareOneFile(ff.File1, ff.File2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
public enum SearchType
|
|
|
|
|
{
|
|
|
|
@@ -836,28 +825,13 @@ namespace Baseline
|
|
|
|
|
};
|
|
|
|
|
public class Settings
|
|
|
|
|
{
|
|
|
|
|
private BindingList<string> _IgnoreLines;
|
|
|
|
|
public BindingList<string> IgnoreLines
|
|
|
|
|
{
|
|
|
|
|
get { return _IgnoreLines; }
|
|
|
|
|
set { _IgnoreLines = value; }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public BindingList<string> IgnoreLines { get; set; }
|
|
|
|
|
}
|
|
|
|
|
public partial class FindFile
|
|
|
|
|
{
|
|
|
|
|
private string _File1;
|
|
|
|
|
public string File1
|
|
|
|
|
{
|
|
|
|
|
get { return _File1; }
|
|
|
|
|
set { _File1 = value; }
|
|
|
|
|
}
|
|
|
|
|
private string _File2;
|
|
|
|
|
public string File2
|
|
|
|
|
{
|
|
|
|
|
get { return _File2; }
|
|
|
|
|
set { _File2 = value; }
|
|
|
|
|
}
|
|
|
|
|
public FindFile(string file1, string file2)
|
|
|
|
|
public string File1 { get; set; }
|
|
|
|
|
public string File2 { get; set; }
|
|
|
|
|
public FindFile(string file1, string file2)
|
|
|
|
|
{
|
|
|
|
|
File1 = file1;
|
|
|
|
|
File2 = file2;
|
|
|
|
@@ -865,24 +839,23 @@ namespace Baseline
|
|
|
|
|
}
|
|
|
|
|
public partial class FindFiles : List<FindFile>
|
|
|
|
|
{
|
|
|
|
|
private string _FileName;
|
|
|
|
|
public string FileName
|
|
|
|
|
{
|
|
|
|
|
get { return _FileName; }
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Build list of DocVersion Folders with differences
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="path1">Base path</param>
|
|
|
|
|
/// <param name="path2">Compare path</param>
|
|
|
|
|
/// <param name="fileName">filename</param>
|
|
|
|
|
/// <param name="myIgnore">Ignore list</param>
|
|
|
|
|
public FindFiles(string path1, string path2, string fileName,IgnoreLines myIgnore)
|
|
|
|
|
private readonly string _FileName;
|
|
|
|
|
|
|
|
|
|
public string FileName => _FileName;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Build list of DocVersion Folders with differences
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="path1">Base path</param>
|
|
|
|
|
/// <param name="path2">Compare path</param>
|
|
|
|
|
/// <param name="fileName">filename</param>
|
|
|
|
|
/// <param name="myIgnore">Ignore list</param>
|
|
|
|
|
public FindFiles(string path1, string path2, string fileName,IgnoreLines myIgnore, bool TruncatedDataFg)
|
|
|
|
|
{
|
|
|
|
|
DirectoryInfo di1 = new DirectoryInfo(path1);
|
|
|
|
|
DirectoryInfo di2 = new DirectoryInfo(path2);
|
|
|
|
|
_FileName = fileName;
|
|
|
|
|
FillByCompare(di1, di2, fileName, myIgnore);
|
|
|
|
|
FillByCompare(di1, di2, fileName, myIgnore, TruncatedDataFg);
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Fill for a search
|
|
|
|
@@ -893,12 +866,12 @@ namespace Baseline
|
|
|
|
|
/// <param name="searchText"></param>
|
|
|
|
|
/// <param name="searchType"></param>
|
|
|
|
|
/// <param name="caseSensitive"></param>
|
|
|
|
|
public FindFiles(string path1, string path2, string fileName, string searchText, SearchType searchType, bool caseSensitive)
|
|
|
|
|
public FindFiles(string path1, string path2, string fileName, string searchText, SearchType searchType, bool caseSensitive, bool useTruncatedData)
|
|
|
|
|
{
|
|
|
|
|
DirectoryInfo di1 = new DirectoryInfo(path1);
|
|
|
|
|
DirectoryInfo di2 = new DirectoryInfo(path2);
|
|
|
|
|
_FileName = fileName;
|
|
|
|
|
FillByCompare(di1, di2, fileName,searchText,searchType, caseSensitive);
|
|
|
|
|
FillByCompare(di1, di2, fileName,searchText,searchType, caseSensitive, useTruncatedData);
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Fill results by search
|
|
|
|
@@ -909,13 +882,13 @@ namespace Baseline
|
|
|
|
|
/// <param name="searchText"></param>
|
|
|
|
|
/// <param name="searchType"></param>
|
|
|
|
|
/// <param name="caseSensitive"></param>
|
|
|
|
|
private void FillByCompare(DirectoryInfo di1, DirectoryInfo di2, string fileName, string searchText, SearchType searchType, bool caseSensitive)
|
|
|
|
|
private void FillByCompare(DirectoryInfo di1, DirectoryInfo di2, string fileName, string searchText, SearchType searchType, bool caseSensitive, bool UseTruncatedData)
|
|
|
|
|
{
|
|
|
|
|
foreach (DirectoryInfo diChild1 in di1.GetDirectories())
|
|
|
|
|
{
|
|
|
|
|
DirectoryInfo diChild2 = new DirectoryInfo(di2.FullName + "\\" + diChild1.Name);
|
|
|
|
|
if (diChild2.Exists)
|
|
|
|
|
FillByCompare(diChild1, diChild2, fileName,searchText,searchType,caseSensitive);
|
|
|
|
|
FillByCompare(diChild1, diChild2, fileName,searchText,searchType,caseSensitive, UseTruncatedData);
|
|
|
|
|
}
|
|
|
|
|
foreach (FileInfo fiChild1 in di1.GetFiles(fileName))
|
|
|
|
|
{
|
|
|
|
@@ -989,27 +962,49 @@ namespace Baseline
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
private void FillByCompare(DirectoryInfo di1, DirectoryInfo di2, string fileName, IgnoreLines myIgnore)
|
|
|
|
|
private void FillByCompare(DirectoryInfo di1, DirectoryInfo di2, string fileName, IgnoreLines myIgnore, bool isTruncatedChecked = false)
|
|
|
|
|
{
|
|
|
|
|
foreach (DirectoryInfo diChild1 in di1.GetDirectories())
|
|
|
|
|
foreach (DirectoryInfo diChild1 in di1.GetDirectories())
|
|
|
|
|
{
|
|
|
|
|
DirectoryInfo diChild2 = new DirectoryInfo(di2.FullName + "\\" + diChild1.Name);
|
|
|
|
|
DirectoryInfo diChild2 = new DirectoryInfo(Path.Combine(di2.FullName, diChild1.Name));
|
|
|
|
|
if (diChild2.Exists)
|
|
|
|
|
FillByCompare(diChild1, diChild2, fileName,myIgnore);// Recursively work on Sub-Folders
|
|
|
|
|
FillByCompare(diChild1, diChild2, fileName,myIgnore, isTruncatedChecked);// Recursively work on Sub-Folders
|
|
|
|
|
}
|
|
|
|
|
foreach (FileInfo fiChild1 in di1.GetFiles(fileName))
|
|
|
|
|
{
|
|
|
|
|
FileInfo fiChild2 = new FileInfo(di2.FullName + "\\" + fiChild1.Name);
|
|
|
|
|
if (fiChild2.Exists)
|
|
|
|
|
FileInfo fiChild2 = new FileInfo(Path.Combine(di2.FullName, fiChild1.Name));
|
|
|
|
|
FileInfo fiChild1_truncated = new FileInfo(fiChild1.FullName.Replace(".txt", "_Truncated.txt"));
|
|
|
|
|
FileInfo fiChild2_truncated = new FileInfo(fiChild2.FullName.Replace(".txt", "_Truncated.txt"));
|
|
|
|
|
|
|
|
|
|
//truncate checked and both files exist
|
|
|
|
|
if (isTruncatedChecked && fiChild1_truncated.Exists && fiChild2_truncated.Exists)
|
|
|
|
|
{
|
|
|
|
|
if (CompareFile(fiChild1, fiChild2,myIgnore))
|
|
|
|
|
Add(new FindFile(fiChild1.FullName, fiChild2.FullName));// Process Each File
|
|
|
|
|
if (CompareFile(fiChild1_truncated, fiChild2_truncated, myIgnore))
|
|
|
|
|
Add(new FindFile(fiChild1_truncated.FullName, fiChild2_truncated.FullName));
|
|
|
|
|
}
|
|
|
|
|
//truncate checked and only file 1 truncate files exist
|
|
|
|
|
else if (isTruncatedChecked && fiChild1_truncated.Exists && fiChild2.Exists)
|
|
|
|
|
{
|
|
|
|
|
if (CompareFile(fiChild1_truncated, fiChild2, myIgnore))
|
|
|
|
|
Add(new FindFile(fiChild1_truncated.FullName, fiChild2.FullName));
|
|
|
|
|
}
|
|
|
|
|
//truncate checked and only file 2 truncate files exist
|
|
|
|
|
else if (isTruncatedChecked && fiChild2_truncated.Exists)
|
|
|
|
|
{
|
|
|
|
|
if (CompareFile(fiChild1, fiChild2_truncated, myIgnore))
|
|
|
|
|
Add(new FindFile(fiChild1.FullName, fiChild2_truncated.FullName));
|
|
|
|
|
}
|
|
|
|
|
//truncated not checked or truncate files dont exist
|
|
|
|
|
else if (fiChild2.Exists)
|
|
|
|
|
{
|
|
|
|
|
if (CompareFile(fiChild1, fiChild2, myIgnore))
|
|
|
|
|
Add(new FindFile(fiChild1.FullName, fiChild2.FullName));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private bool CompareFile(FileInfo fiChild1, FileInfo fiChild2,IgnoreLines myIgnore)
|
|
|
|
|
{
|
|
|
|
|
if (fiChild1.Name == "DebugMeta.txt")
|
|
|
|
|
if (fiChild1.Name == "DebugMeta.txt" || fiChild1.Name == "DebugMeta_Truncated.txt")
|
|
|
|
|
{
|
|
|
|
|
IEnumerable<string> lines1 = ReadFilteredLines(fiChild1.FullName, false, myIgnore);//LINQ Read lines without ignored lines
|
|
|
|
|
IEnumerable<string> lines2 = ReadFilteredLines(fiChild2.FullName, false, myIgnore);//LINQ Read lines without ignored lines
|
|
|
|
@@ -1103,34 +1098,16 @@ namespace Baseline
|
|
|
|
|
// Text - the line of text
|
|
|
|
|
public partial class Procedure
|
|
|
|
|
{
|
|
|
|
|
private string _Number;
|
|
|
|
|
public string Number
|
|
|
|
|
public string Number { get; set; }
|
|
|
|
|
public string Title { get; set; }
|
|
|
|
|
public Pages MyPages { get; set; } = new Pages();
|
|
|
|
|
public Procedure(string number, string title)
|
|
|
|
|
{
|
|
|
|
|
get { return _Number; }
|
|
|
|
|
set { _Number = value; }
|
|
|
|
|
Number = number;
|
|
|
|
|
Title = title;
|
|
|
|
|
}
|
|
|
|
|
private string _Title;
|
|
|
|
|
public string Title
|
|
|
|
|
{
|
|
|
|
|
get { return _Title; }
|
|
|
|
|
set { _Title = value; }
|
|
|
|
|
}
|
|
|
|
|
private Pages _MyPages = new Pages();
|
|
|
|
|
public Pages MyPages
|
|
|
|
|
{
|
|
|
|
|
get { return _MyPages; }
|
|
|
|
|
set { _MyPages = value; }
|
|
|
|
|
}
|
|
|
|
|
public Procedure(string number, string title)
|
|
|
|
|
{
|
|
|
|
|
_Number = number;
|
|
|
|
|
_Title = title;
|
|
|
|
|
}
|
|
|
|
|
public override string ToString()
|
|
|
|
|
{
|
|
|
|
|
return string.Format("{0} - {1}", Number, Title);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public override string ToString() => string.Format("{0} - {1}", Number, Title);
|
|
|
|
|
}
|
|
|
|
|
public partial class Procedures : List<Procedure>
|
|
|
|
|
{
|
|
|
|
|
// Sample data for a Procedure Number line
|
|
|
|
@@ -1161,77 +1138,34 @@ namespace Baseline
|
|
|
|
|
}
|
|
|
|
|
public partial class Page
|
|
|
|
|
{
|
|
|
|
|
private int _Number;
|
|
|
|
|
public int Number
|
|
|
|
|
{
|
|
|
|
|
get { return _Number; }
|
|
|
|
|
set { _Number = value; }
|
|
|
|
|
}
|
|
|
|
|
private Lines _MyLines = new Lines();
|
|
|
|
|
public int Number { get; set; }
|
|
|
|
|
|
|
|
|
|
public Lines MyLines
|
|
|
|
|
{
|
|
|
|
|
get { return _MyLines; }
|
|
|
|
|
set { _MyLines = value; }
|
|
|
|
|
}
|
|
|
|
|
public Page(int number)
|
|
|
|
|
{
|
|
|
|
|
_Number = number;
|
|
|
|
|
}
|
|
|
|
|
public override string ToString()
|
|
|
|
|
{
|
|
|
|
|
return string.Format("Page {0}", Number);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public Lines MyLines { get; set; } = new Lines();
|
|
|
|
|
public Page(int number) => Number = number;
|
|
|
|
|
public override string ToString() => string.Format("Page {0}", Number);
|
|
|
|
|
}
|
|
|
|
|
public partial class Pages : List<Page>
|
|
|
|
|
{
|
|
|
|
|
public void Add(int number)
|
|
|
|
|
{
|
|
|
|
|
Add(new Page(number));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public void Add(int number) => Add(new Page(number));
|
|
|
|
|
}
|
|
|
|
|
public partial class Line
|
|
|
|
|
{
|
|
|
|
|
private Procedure _MyProc;
|
|
|
|
|
public Procedure MyProc
|
|
|
|
|
public Procedure MyProc { get; set; }
|
|
|
|
|
public Page MyPage { get; set; }
|
|
|
|
|
public string Text { get; set; }
|
|
|
|
|
public Line(string text) => Text = text;
|
|
|
|
|
public Line(string text, Procedure myProc, Page myPage)
|
|
|
|
|
{
|
|
|
|
|
get { return _MyProc; }
|
|
|
|
|
set { _MyProc = value; }
|
|
|
|
|
Text = text;
|
|
|
|
|
MyProc = myProc;
|
|
|
|
|
MyPage = myPage;
|
|
|
|
|
}
|
|
|
|
|
private Page _MyPage;
|
|
|
|
|
public Page MyPage
|
|
|
|
|
{
|
|
|
|
|
get { return _MyPage; }
|
|
|
|
|
set { _MyPage = value; }
|
|
|
|
|
}
|
|
|
|
|
private string _Text;
|
|
|
|
|
public string Text
|
|
|
|
|
{
|
|
|
|
|
get { return _Text; }
|
|
|
|
|
set { _Text = value; }
|
|
|
|
|
}
|
|
|
|
|
public Line(string text)
|
|
|
|
|
{
|
|
|
|
|
_Text = text;
|
|
|
|
|
}
|
|
|
|
|
public Line(string text, Procedure myProc, Page myPage)
|
|
|
|
|
{
|
|
|
|
|
_Text = text;
|
|
|
|
|
_MyProc = myProc;
|
|
|
|
|
_MyPage = myPage;
|
|
|
|
|
}
|
|
|
|
|
public override string ToString()
|
|
|
|
|
{
|
|
|
|
|
return Text;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public override string ToString() => Text;
|
|
|
|
|
}
|
|
|
|
|
public partial class Lines : List<Line>
|
|
|
|
|
{
|
|
|
|
|
public void Add(string text)
|
|
|
|
|
{
|
|
|
|
|
Add(new Line(text));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public void Add(string text) => Add(new Line(text));
|
|
|
|
|
}
|
|
|
|
|
[Serializable]
|
|
|
|
|
public partial class IgnoreLine
|
|
|
|
|
{
|
|
|
|
@@ -1269,21 +1203,12 @@ namespace Baseline
|
|
|
|
|
public IgnoreLines()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
public void Add(string text, Relation searchType, bool active)
|
|
|
|
|
{
|
|
|
|
|
Add(new IgnoreLine(text, searchType, active));
|
|
|
|
|
}
|
|
|
|
|
// Convert IgnoreLines to string (XML)
|
|
|
|
|
public override string ToString()
|
|
|
|
|
{
|
|
|
|
|
return GenericSerializer<IgnoreLines>.StringSerialize(this);
|
|
|
|
|
}
|
|
|
|
|
// Convert string to IgnoreLines
|
|
|
|
|
public static IgnoreLines Get(string xml)
|
|
|
|
|
{
|
|
|
|
|
return GenericSerializer<IgnoreLines>.StringDeserialize(xml);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public void Add(string text, Relation searchType, bool active) => Add(new IgnoreLine(text, searchType, active));
|
|
|
|
|
// Convert IgnoreLines to string (XML)
|
|
|
|
|
public override string ToString() => GenericSerializer<IgnoreLines>.StringSerialize(this);
|
|
|
|
|
// Convert string to IgnoreLines
|
|
|
|
|
public static IgnoreLines Get(string xml) => GenericSerializer<IgnoreLines>.StringDeserialize(xml);
|
|
|
|
|
}
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// This is a simple serializer that takes a class and converts it to and from string (XML)
|
|
|
|
|
/// </summary>
|
|
|
|
@@ -1311,7 +1236,7 @@ namespace Baseline
|
|
|
|
|
string ss = s.Replace("encoding=\"utf-16\"", "");
|
|
|
|
|
XmlSerializer xs = new XmlSerializer(typeof(T));
|
|
|
|
|
UTF8Encoding enc = new UTF8Encoding();
|
|
|
|
|
Byte[] arrBytData = enc.GetBytes(ss);
|
|
|
|
|
byte[] arrBytData = enc.GetBytes(ss);
|
|
|
|
|
using (MemoryStream ms = new MemoryStream(arrBytData))
|
|
|
|
|
{
|
|
|
|
|
t = (T)xs.Deserialize(ms);
|
|
|
|
@@ -1325,12 +1250,9 @@ namespace Baseline
|
|
|
|
|
public class NonXsiTextWriter : XmlTextWriter
|
|
|
|
|
{
|
|
|
|
|
public NonXsiTextWriter(TextWriter w) : base(w) { }
|
|
|
|
|
public NonXsiTextWriter(Stream w, Encoding encoding)
|
|
|
|
|
: base(w, encoding)
|
|
|
|
|
{
|
|
|
|
|
this.Formatting = Formatting.Indented;
|
|
|
|
|
}
|
|
|
|
|
public NonXsiTextWriter(string filename, Encoding encoding) : base(filename, encoding) { }
|
|
|
|
|
public NonXsiTextWriter(Stream w, Encoding encoding)
|
|
|
|
|
: base(w, encoding) => Formatting = Formatting.Indented;
|
|
|
|
|
public NonXsiTextWriter(string filename, Encoding encoding) : base(filename, encoding) { }
|
|
|
|
|
bool _skip = false;
|
|
|
|
|
public override void WriteStartAttribute(string prefix, string localName, string ns)
|
|
|
|
|
{
|
|
|
|
@@ -1372,32 +1294,16 @@ namespace Baseline
|
|
|
|
|
public const short SWP_NOZORDER = 0X4;
|
|
|
|
|
public const int SWP_SHOWWINDOW = 0x0040;
|
|
|
|
|
|
|
|
|
|
private System.Diagnostics.Process _Process;
|
|
|
|
|
|
|
|
|
|
public System.Diagnostics.Process Process
|
|
|
|
|
{
|
|
|
|
|
get { return _Process; }
|
|
|
|
|
set { _Process = value; }
|
|
|
|
|
}
|
|
|
|
|
private int _X;
|
|
|
|
|
public int X
|
|
|
|
|
{
|
|
|
|
|
get { return _X; }
|
|
|
|
|
set { _X = value; }
|
|
|
|
|
}
|
|
|
|
|
private int _Y;
|
|
|
|
|
public int Y
|
|
|
|
|
{
|
|
|
|
|
get { return _Y; }
|
|
|
|
|
set { _Y = value; }
|
|
|
|
|
}
|
|
|
|
|
public ProcessLocation(System.Diagnostics.Process process, int x, int y)
|
|
|
|
|
public System.Diagnostics.Process Process { get; set; }
|
|
|
|
|
public int X { get; set; }
|
|
|
|
|
public int Y { get; set; }
|
|
|
|
|
public ProcessLocation(System.Diagnostics.Process process, int x, int y)
|
|
|
|
|
{
|
|
|
|
|
Process = process;
|
|
|
|
|
X = x;
|
|
|
|
|
Y = y;
|
|
|
|
|
}
|
|
|
|
|
private static Boolean FoxitSettingInfo = true;
|
|
|
|
|
private static bool FoxitSettingInfo = true;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// MoveIt() moves the window containing the PDF viewer to the right so the two pdf viewer windows will not overlap.
|
|
|
|
@@ -1418,11 +1324,8 @@ namespace Baseline
|
|
|
|
|
}
|
|
|
|
|
public class ProcessLocationQueue: Queue<ProcessLocation>
|
|
|
|
|
{
|
|
|
|
|
public void Add(System.Diagnostics.Process process, int x, int y)
|
|
|
|
|
{
|
|
|
|
|
Enqueue(new ProcessLocation(process,x,y));
|
|
|
|
|
}
|
|
|
|
|
public void ProcessNext()
|
|
|
|
|
public void Add(System.Diagnostics.Process process, int x, int y) => Enqueue(new ProcessLocation(process, x, y));
|
|
|
|
|
public void ProcessNext()
|
|
|
|
|
{
|
|
|
|
|
ProcessLocation pl = Dequeue();
|
|
|
|
|
pl.MoveIt();
|
|
|
|
|