Better feedback when updating RO values, also save list of updated ROs in text file in Documents\VEPROMS Save the date/time of the last successfully completed RO Values Update Add annotations for updated RO values, better logic in updating RO figures so they are needlessly updated, better logic in determining if an RO needs to be updated Logic to save the date/time of the last successfully completed RO Update Better logic to determine if an RO value needs updated.
1610 lines
64 KiB
C#
1610 lines
64 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using Csla;
|
|
using Csla.Data;
|
|
using System.Xml;
|
|
using System.Data.SqlClient;
|
|
using System.Data;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace VEPROMS.CSLA.Library
|
|
{
|
|
public partial class Content
|
|
{
|
|
public string LastChangedString
|
|
{
|
|
get { return ContentInfo.FormatByteArray(_LastChanged); }
|
|
}
|
|
public override string ToString()
|
|
{
|
|
return string.Format("{0} {1}", Number, Text);
|
|
}
|
|
public void FixTransitionText(TransitionInfo tran)
|
|
{
|
|
FixTransitionText(tran, false);
|
|
}
|
|
public void FixTransitionText(TransitionInfo tran, bool forceConvertToText)
|
|
{
|
|
//string transText = tran.ResolvePathTo();
|
|
//string lookFor = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v \\]+)* ([^#]*?)(\\[^v'? \\]+)*\\v(\\[^v \\]+)* #Link:Transition[^:]*?:{0} {1}( [0-9]*){{1,2}}\[END>", tran.TranType, tran.TransitionID);
|
|
////string lookFor = string.Format(@"<START\]\\v0 ([^#]*?)\\v #Link:Transition[^:]*?:{0} {1} [0-9]*\[END>", tran.TranType, tran.TransitionID);
|
|
//Match m = Regex.Match(Text, lookFor);
|
|
//if (m != null && m.Groups.Count > 1)
|
|
//{
|
|
// System.Text.RegularExpressions.Group g = m.Groups[3];
|
|
// if (g.ToString() != transText)
|
|
// Text = Text.Substring(0, g.Index) + transText + Text.Substring(g.Index + g.Length);
|
|
//}
|
|
string newvalue = tran != null ? tran.ResolvePathTo() : string.Empty;
|
|
if (forceConvertToText)
|
|
newvalue = "?";
|
|
string findLink = @"<START\].*?\[END>";
|
|
MatchCollection ms = Regex.Matches(Text, findLink, RegexOptions.Singleline);
|
|
//string lookFor = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v \\]+)* (.*?)(\\[^v '?\\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>", rousg.ROUsageID);
|
|
string lookFor;
|
|
if (tran == null)
|
|
{
|
|
int loc1 = Text.IndexOf("#Link:Transition:", 0) + ("#Link:Transition:").Length;
|
|
int loc2 = Text.IndexOf(" ", loc1);
|
|
string trantype = Text.Substring(loc1, loc2 - loc1);
|
|
loc1 = loc2 + 1;
|
|
loc2 = Text.IndexOf(" ", loc1);
|
|
string tranid = Text.Substring(loc1, loc2 - loc1);
|
|
lookFor = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}}~ \\]+)*\\v(\\[^v \\]+)* #Link:Transition[^:]*?:{0} {1}( [0-9]*){{1,2}}\[END>", trantype, tranid);
|
|
}
|
|
else
|
|
lookFor = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}}~ \\]+)*\\v(\\[^v \\]+)* #Link:Transition[^:]*?:{0} {1}( [0-9]*){{1,2}}\[END>", tran.TranType, tran.TransitionID);
|
|
foreach (Match mm in ms)
|
|
{
|
|
Match m = Regex.Match(mm.Value, lookFor, RegexOptions.Singleline);
|
|
if (m != null && m.Groups.Count > 1)
|
|
{
|
|
int myIndex = m.Groups[4].Index + mm.Index;
|
|
int myLength = m.Groups[4].Length;
|
|
if (m.Groups[3].Value != " ")
|
|
{
|
|
myIndex = m.Groups[3].Index + mm.Index;
|
|
myLength += m.Groups[3].Length;
|
|
}
|
|
string gg = Text.Substring(myIndex, myLength);
|
|
newvalue = newvalue.Replace("{", @"\{").Replace("}", @"\}");
|
|
if (gg != newvalue && newvalue == "?")
|
|
{
|
|
string rv = ConvertTransitionToText(tran, newvalue);
|
|
//Text = Text.Substring(0, myIndex - 14) + gg + Text.Substring(myIndex + myLength);
|
|
using (Item myitem = this.ContentItems[0].MyItem) // so that myitem does not stay in cache B2016-153
|
|
{
|
|
myitem.DisposeOfContent = false; // don't dispose of the contents may be needed if more than one RO needs processed - part of B2017-060
|
|
// B2016-225 (follow through) added more descriptive Annotation Type when transition is converted to text
|
|
Annotation.MakeAnnotation(myitem, AnnotationType.GetByNameOrCreate("Link Converted To Text"), "", string.Format("Transition ({0}) converted to text", ItemInfo.ConvertToDisplayText(gg)), null);
|
|
}
|
|
if(tran != null)
|
|
Transition.Delete(tran.TransitionID);
|
|
break;
|
|
}
|
|
//else if ((gg.Contains("\\u8209?") ? gg.Replace("\\u8209?", "-") : gg) != (newvalue.Contains("\\u8209?") ? newvalue.Replace("\\u8209?", "-") : newvalue))
|
|
else if ((gg.Replace(@"\u8209?", "-").Replace(@"\u9568?", @"\\")) != (newvalue.Replace(@"\u8209?", "-").Replace(@"\u9568?", @"\\")))
|
|
{
|
|
Text = Text.Substring(0, myIndex) + newvalue + Text.Substring(myIndex + myLength);
|
|
break; // Text has been processed
|
|
}
|
|
}
|
|
}
|
|
// see if there is a grid to update too.
|
|
if (tran != null && tran.MyContent.MyGrid != null)
|
|
{
|
|
//string lookForXml = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v \\]+)* ([^#]*?)(\\[^v'? \\]+)*\\v(\\[^v \\]+)* #Link:Transition[^:]*?:{0} {1}( [0-9]*){{1,2}}\[END>", tran.TranType, tran.TransitionID);
|
|
//Match mg = Regex.Match(MyGrid.Data, lookForXml);
|
|
//if (mg != null && mg.Groups.Count > 1)
|
|
//{
|
|
// System.Text.RegularExpressions.Group g = mg.Groups[3];
|
|
// if (g.ToString() != transText)
|
|
// MyGrid.Data = MyGrid.Data.Substring(0, g.Index) + transText + MyGrid.Data.Substring(g.Index + g.Length);
|
|
//}
|
|
string findLinkXml = @"<START\].*?\[END>";
|
|
//string lookForXml = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v \\]+)* (.*?)(\\[^v '?\\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>", rousg.ROUsageID);
|
|
string lookForXml = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}} \\]+)*\\v(\\[^v \\]+)* #Link:Transition[^:]*?:{0} {1}( [0-9]*){{1,2}}\[END>", tran.TranType, tran.TransitionID);
|
|
MatchCollection msg = Regex.Matches(MyGrid.Data, findLinkXml);
|
|
foreach (Match mmg in msg)
|
|
{
|
|
Match mg = Regex.Match(mmg.Value, lookForXml);// Regex.Match(MyGrid.Data, lookForXml);
|
|
if (mg != null && mg.Groups.Count > 1)
|
|
{
|
|
int myIndex = mg.Groups[4].Index + mmg.Index;
|
|
int myLength = mg.Groups[4].Length;
|
|
if (mg.Groups[3].Value != " ")
|
|
{
|
|
myIndex = mg.Groups[3].Index + mmg.Index;
|
|
myLength += mg.Groups[3].Length;
|
|
}
|
|
string gg = MyGrid.Data.Substring(myIndex, myLength);
|
|
if (newvalue.Contains(@"\u8209?")) // process dash
|
|
newvalue = ProcessSpecChar(gg, newvalue, @"\u8209?","-");
|
|
if (newvalue.Contains(@"\u8593?")) // process carrot/delta
|
|
newvalue = ProcessSpecChar(gg, newvalue, @"\u8593?","^");
|
|
if (newvalue.Contains(@"\u9586?")) // process backslash
|
|
newvalue = ProcessSpecChar(gg, newvalue, @"\u9586?",@"\\");
|
|
if (gg != newvalue)
|
|
{
|
|
if (newvalue == "?")
|
|
ConvertTransitionToTextInGrid(tran, newvalue);
|
|
else
|
|
MyGrid.Data = MyGrid.Data.Substring(0, myIndex) + newvalue + MyGrid.Data.Substring(myIndex + myLength);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private string ProcessSpecChar(string orgText, string newValue, string specChar, string kbChar)
|
|
{
|
|
Match m = Regex.Match(newValue, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
{
|
|
if (m == null)// || (m.Groups[1].Value == "" && m.Groups[3].Value == ""))
|
|
newValue = newValue.Replace(specChar, kbChar);
|
|
else
|
|
{ // look for rtf font command and insert it around the special char (i.e. symbol char)
|
|
int ii = orgText.IndexOf(specChar);
|
|
int fnt1 = -1;
|
|
int fnt2 = -1;
|
|
if (ii > -1)
|
|
{
|
|
fnt1 = orgText.LastIndexOf(@"\f", ii);
|
|
fnt2 = orgText.IndexOf(@"\f", ii);
|
|
if (fnt1 != -1 && fnt2 != -1)
|
|
newValue = newValue.Replace(specChar, orgText.Substring(fnt1, 3) + specChar + orgText.Substring(fnt2, 3) + " ");
|
|
}
|
|
}
|
|
}
|
|
GC.Collect(); // regex has a memory leak
|
|
return newValue; // could not find rtf font spec so just return the newValue as is
|
|
}
|
|
|
|
public void ConvertTransitionToTextInGrid(TransitionInfo tran, string value)
|
|
{
|
|
string newvalue = value;
|
|
string findLink = @"<START\].*?\[END>";
|
|
MatchCollection ms = Regex.Matches(MyGrid.Data, findLink);
|
|
string lookFor;
|
|
if (tran == null)
|
|
{
|
|
int loc1 = MyGrid.Data.IndexOf("#Link:Transition:", 0) + ("#Link:Transition:").Length;
|
|
int loc2 = MyGrid.Data.IndexOf(" ", loc1);
|
|
string trantype = MyGrid.Data.Substring(loc1, loc2 - loc1);
|
|
loc1 = loc2 + 1;
|
|
loc2 = MyGrid.Data.IndexOf(" ", loc1);
|
|
string tranid = MyGrid.Data.Substring(loc1, loc2 - loc1);
|
|
lookFor = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}}~ \\]+)*\\v(\\[^v \\]+)* #Link:Transition[^:]*?:{0} {1}( [0-9]*){{1,2}}\[END>", trantype, tranid);
|
|
}
|
|
else
|
|
lookFor = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}}~ \\]+)*\\v(\\[^v \\]+)* #Link:Transition[^:]*?:{0} {1}( [0-9]*){{1,2}}\[END>", tran.TranType, tran.TransitionID);
|
|
int lastIndex = 0;
|
|
string newText = MyGrid.Data;
|
|
foreach (Match mm in ms)
|
|
{
|
|
int offset = mm.Index;
|
|
Match m = Regex.Match(mm.Value, lookFor, RegexOptions.Singleline);
|
|
if (m != null && m.Groups.Count > 1)
|
|
{
|
|
int myIndex = m.Groups[4].Index + mm.Index;
|
|
int myLength = m.Groups[4].Length;
|
|
if (m.Groups[3].Value != " ")
|
|
{
|
|
myIndex = m.Groups[3].Index + mm.Index;
|
|
myLength += m.Groups[3].Length;
|
|
}
|
|
string ss = MyGrid.Data.Substring(myIndex, myLength);
|
|
if (ss != newvalue)
|
|
{
|
|
int ii = MyGrid.Data.Substring(0, mm.Index).LastIndexOf(@"\v");
|
|
int iil = MyGrid.Data.Substring(mm.Index + m.Value.Length).IndexOf(@"\v0");
|
|
string part1 = MyGrid.Data.Substring(0, ii); // length up to \v
|
|
string part2 = MyGrid.Data.Substring(ii + 2, mm.Index - (ii + 2));
|
|
string part3 = ss;
|
|
string part4 = MyGrid.Data.Substring(mm.Index + m.Value.Length, iil);
|
|
string part5 = MyGrid.Data.Substring(mm.Index + (m.Value.Length + iil + 3));
|
|
MyGrid.Data = part1 + part2 + part3 + part4 + part5;
|
|
}
|
|
break; // Text has been processed
|
|
}
|
|
lastIndex = mm.Index + mm.Length;
|
|
}
|
|
return;
|
|
}
|
|
public string ConvertTransitionToText(TransitionInfo tran, string value)
|
|
{
|
|
string retval = null;
|
|
string newvalue = value;
|
|
string findLink = @"<START\].*?\[END>";
|
|
MatchCollection ms = Regex.Matches(Text, findLink);
|
|
//string lookFor = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v \\]+)* (.*?)(\\[^v '?\\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>", rousg.ROUsageID);
|
|
//string lookFor = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}}~ \\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>$", rousg.ROUsageID);
|
|
string lookFor;
|
|
if (tran == null)
|
|
{
|
|
int loc1 = Text.IndexOf("#Link:Transition:", 0) + ("#Link:Transition:").Length;
|
|
int loc2 = Text.IndexOf(" ", loc1);
|
|
string trantype = Text.Substring(loc1, loc2 - loc1);
|
|
loc1 = loc2 + 1;
|
|
loc2 = Text.IndexOf(" ", loc1);
|
|
string tranid = Text.Substring(loc1, loc2 - loc1);
|
|
lookFor = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}}~ \\]+)*\\v(\\[^v \\]+)* #Link:Transition[^:]*?:{0} {1}( [0-9]*){{1,2}}\[END>", trantype, tranid);
|
|
}
|
|
else
|
|
lookFor = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}}~ \\]+)*\\v(\\[^v \\]+)* #Link:Transition[^:]*?:{0} {1}( [0-9]*){{1,2}}\[END>", tran.TranType, tran.TransitionID);
|
|
int lastIndex = 0;
|
|
string newText = Text;
|
|
foreach (Match mm in ms)
|
|
{
|
|
int offset = mm.Index;
|
|
Match m = Regex.Match(mm.Value, lookFor, RegexOptions.Singleline);
|
|
if (m != null && m.Groups.Count > 1)
|
|
{
|
|
string prefix = GetMyPrefix(mm.Index, lastIndex);
|
|
string suffix = GetMySuffix(mm.Index + mm.Length);
|
|
int myIndex = m.Groups[4].Index + mm.Index;
|
|
int myLength = m.Groups[4].Length;
|
|
if (m.Groups[3].Value != " ")
|
|
{
|
|
myIndex = m.Groups[3].Index + mm.Index;
|
|
myLength += m.Groups[3].Length;
|
|
}
|
|
string gg = newText.Substring(myIndex, myLength);
|
|
retval = gg;
|
|
gg = gg.Replace("{", @"\{").Replace("}", @"\}");
|
|
string part1 = newText.Substring(0, mm.Index);
|
|
string part2 = gg;
|
|
string part3 = newText.Substring(mm.Index + mm.Length);
|
|
//modify part1 based on prefix
|
|
if (prefix == @"\v ")
|
|
part1 = part1.Substring(0, part1.Length - 3);
|
|
else
|
|
part1 = part1.Substring(0, part1.Length - 3) + " ";
|
|
//modify part3 based on suffix
|
|
if (suffix == @"\v0 ")
|
|
part3 = part3.Substring(4);
|
|
else
|
|
part3 = suffix.Replace(@"\v0", "") + part3.Substring(suffix.Length);
|
|
if (gg.Contains(@"\u8209?"))
|
|
{
|
|
Match mmm = Regex.Match(gg, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
if (mmm == null)
|
|
newvalue = newvalue.Replace(@"\u8209?", "-");
|
|
else
|
|
newvalue = newvalue.Replace(@"\u8209?", m.Groups[1].Value + @"\u8209?" + m.Groups[3].Value);
|
|
}
|
|
if (gg.Contains(@"\u9586?")) // process backslash symbol
|
|
{
|
|
Match mmm = Regex.Match(gg, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
if (mmm == null)
|
|
newvalue = newvalue.Replace(@"\u9586?", @"\\");
|
|
else
|
|
newvalue = newvalue.Replace(@"\u9586?", m.Groups[1].Value + @"\u9586?" + m.Groups[3].Value);
|
|
}
|
|
Text = part1 + part2 + part3;
|
|
break; // Text has been processed
|
|
}
|
|
lastIndex = mm.Index + mm.Length;
|
|
}
|
|
//Console.WriteLine("Text: {0} NewText: {1}", Text, newText);
|
|
return retval;
|
|
}
|
|
public string ConvertTransitionToText(int tranID, int tranType, string value)
|
|
{
|
|
string retval = null;
|
|
string newvalue = value;
|
|
string findLink = @"<START\].*?\[END>";
|
|
MatchCollection ms = Regex.Matches(Text, findLink);
|
|
string lookFor = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}}~ \\]+)*\\v(\\[^v \\]+)* #Link:Transition[^:]*?:{0} {1}( [0-9]*){{1,2}}\[END>", tranType, tranID);
|
|
int lastIndex = 0;
|
|
string newText = Text;
|
|
foreach (Match mm in ms)
|
|
{
|
|
int offset = mm.Index;
|
|
Match m = Regex.Match(mm.Value, lookFor, RegexOptions.Singleline);
|
|
if (m != null && m.Groups.Count > 1)
|
|
{
|
|
string prefix = GetMyPrefix(mm.Index, lastIndex);
|
|
string suffix = GetMySuffix(mm.Index + mm.Length);
|
|
int myIndex = m.Groups[4].Index + mm.Index;
|
|
int myLength = m.Groups[4].Length;
|
|
if (m.Groups[3].Value != " ")
|
|
{
|
|
myIndex = m.Groups[3].Index + mm.Index;
|
|
myLength += m.Groups[3].Length;
|
|
}
|
|
string gg = newText.Substring(myIndex, myLength);
|
|
retval = gg;
|
|
gg = gg.Replace("{", @"\{").Replace("}", @"\}");
|
|
string part1 = newText.Substring(0, mm.Index);
|
|
string part2 = gg;
|
|
string part3 = newText.Substring(mm.Index + mm.Length);
|
|
//modify part1 based on prefix
|
|
if (prefix == @"\v ")
|
|
part1 = part1.Substring(0, part1.Length - 3);
|
|
else
|
|
part1 = part1.Substring(0, part1.Length - 3) + " ";
|
|
//modify part3 based on suffix
|
|
if (suffix == @"\v0 ")
|
|
part3 = part3.Substring(4);
|
|
else
|
|
part3 = suffix.Replace(@"\v0", "") + part3.Substring(suffix.Length);
|
|
if (gg.Contains(@"\u8209?"))
|
|
{
|
|
Match mmm = Regex.Match(gg, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
if (mmm == null)
|
|
newvalue = newvalue.Replace(@"\u8209?", "-");
|
|
else
|
|
newvalue = newvalue.Replace(@"\u8209?", m.Groups[1].Value + @"\u8209?" + m.Groups[3].Value);
|
|
}
|
|
if (gg.Contains(@"\u9586?"))
|
|
{
|
|
Match mmm = Regex.Match(gg, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
if (mmm == null)
|
|
newvalue = newvalue.Replace(@"\u9586?", @"\\");
|
|
else
|
|
newvalue = newvalue.Replace(@"\u9586?", m.Groups[1].Value + @"\u9586?" + m.Groups[3].Value);
|
|
}
|
|
Text = part1 + part2 + part3;
|
|
break; // Text has been processed
|
|
}
|
|
lastIndex = mm.Index + mm.Length;
|
|
}
|
|
//Console.WriteLine("Text: {0} NewText: {1}", Text, newText);
|
|
return retval;
|
|
}
|
|
private string GetMySuffix(int start)
|
|
{
|
|
string txt = Text.Substring(start);
|
|
int firstSlashVeeZero = txt.IndexOf(@"\v0");
|
|
if (firstSlashVeeZero == 0 && txt.Length > 3 && txt[3] == ' ') //"\v0 "
|
|
return Text.Substring(start, 4);
|
|
return Text.Substring(start, firstSlashVeeZero + 3); //everything upto \v0"
|
|
}
|
|
private string GetMyPrefix(int start, int lastIndex)
|
|
{
|
|
string defPrefix = Text.Substring(start - 3, 3);
|
|
if (defPrefix != @"\v ") throw new Exception(string.Format("rtf string {0} does not match expected format", defPrefix));
|
|
string txt = Text.Substring(lastIndex, start - lastIndex - 3);
|
|
int lastSlash = txt.LastIndexOf(@"\");
|
|
int lastSpace = txt.LastIndexOf(" ");
|
|
int lastCR = txt.LastIndexOf("\r");
|
|
if (lastSpace < lastCR)
|
|
lastSpace = lastCR;
|
|
if (lastSlash <= lastSpace) //this will return "\v "
|
|
return defPrefix;
|
|
txt = txt.Substring(lastSlash);
|
|
if(txt.StartsWith(@"\'")) //this is a hex
|
|
return defPrefix;
|
|
if (Regex.IsMatch(txt, @"\\u[0-9].*")) //this is unicode
|
|
return defPrefix;
|
|
return @"\v";
|
|
}
|
|
public string ConvertROToText(RoUsageInfo rousg, string value, int rotype, ROFstInfo origROFstInfo)
|
|
{
|
|
return ConvertROToText(rousg, value, rotype, origROFstInfo, "");
|
|
}
|
|
// B2017-060 added roidFrmImportStep to pass in a ROID to use when rousg is null (import procedure uses this)
|
|
public string ConvertROToText(RoUsageInfo rousg, string value, int rotype, ROFstInfo origROFstInfo, string roidFrmImportStep)
|
|
{
|
|
string retval = null;
|
|
string newvalue = value;
|
|
string findLink = @"<START\].*?\[END>";
|
|
MatchCollection ms = Regex.Matches(Text, findLink);
|
|
//string lookFor = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v \\]+)* (.*?)(\\[^v '?\\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>", rousg.ROUsageID);
|
|
//string lookFor = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}}~ \\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>$", rousg.ROUsageID);
|
|
string strROUID = (rousg != null) ? rousg.ROUsageID.ToString() : roidFrmImportStep;
|
|
string lookFor = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}}~ \\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>$", strROUID);
|
|
int lastIndex = 0;
|
|
string newText = Text;
|
|
foreach (Match mm in ms)
|
|
{
|
|
int offset = mm.Index;
|
|
Match m = Regex.Match(mm.Value, lookFor, RegexOptions.Singleline);
|
|
if (m != null && m.Groups.Count > 1)
|
|
{
|
|
string prefix = GetMyPrefix(mm.Index, lastIndex);
|
|
string suffix = GetMySuffix(mm.Index + mm.Length);
|
|
int myIndex = m.Groups[4].Index + mm.Index;
|
|
int myLength = m.Groups[4].Length;
|
|
if (m.Groups[3].Value != " ")
|
|
{
|
|
myIndex = m.Groups[3].Index + mm.Index;
|
|
myLength += m.Groups[3].Length;
|
|
}
|
|
string gg = newText.Substring(myIndex, myLength);
|
|
retval = gg;
|
|
gg = gg.Replace("{", @"\{").Replace("}", @"\}");
|
|
string part1 = newText.Substring(0, mm.Index);
|
|
string part2 = gg;
|
|
string part3 = newText.Substring(mm.Index + mm.Length);
|
|
//modify part1 based on prefix
|
|
if (prefix == @"\v ")
|
|
part1 = part1.Substring(0, part1.Length - 3);
|
|
else
|
|
part1 = part1.Substring(0, part1.Length - 3) + " ";
|
|
//modify part3 based on suffix
|
|
if (suffix == @"\v0 ")
|
|
part3 = part3.Substring(4);
|
|
else
|
|
part3 = suffix.Replace(@"\v0","") + part3.Substring(suffix.Length);
|
|
if (gg.Contains(@"\u8209?"))
|
|
{
|
|
Match mmm = Regex.Match(gg, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
if (mmm == null)
|
|
newvalue = newvalue.Replace(@"\u8209?", "-");
|
|
else
|
|
newvalue = newvalue.Replace(@"\u8209?", m.Groups[1].Value + @"\u8209?" + m.Groups[3].Value);
|
|
}
|
|
if (gg.Contains(@"\u9586?"))
|
|
{
|
|
Match mmm = Regex.Match(gg, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
if (mmm == null)
|
|
newvalue = newvalue.Replace(@"\u9586?", @"\\");
|
|
else
|
|
newvalue = newvalue.Replace(@"\u9586?", m.Groups[1].Value + @"\u9586?" + m.Groups[3].Value);
|
|
}
|
|
//System.Text.RegularExpressions.Group g2 = m.Groups[2];
|
|
//if (g2.Value.StartsWith(@"\u8209?"))
|
|
//{
|
|
// string gg = g2.Value + " " + g.Value;
|
|
// retval = gg;
|
|
// part2 = retval;
|
|
//}
|
|
//else
|
|
////else if (g.ToString() != newvalue)
|
|
//{
|
|
// retval = g.Value;
|
|
// part2 = retval;
|
|
//}
|
|
Text = part1 + part2 + part3;
|
|
break; // Text has been processed
|
|
}
|
|
lastIndex = mm.Index + mm.Length;
|
|
}
|
|
//Console.WriteLine("Text: {0} NewText: {1}", Text, newText);
|
|
// see if there is a grid to update too.
|
|
if (_MyGrid != null) //(rousg.MyContent.MyGrid != null)
|
|
{
|
|
if (rotype == (int)E_ROValueType.Table) // if change in rotable data...
|
|
{
|
|
if (origROFstInfo != null)
|
|
{
|
|
List<string> retlist = origROFstInfo.OnROTableUpdate(this, new ROFstInfoROTableUpdateEventArgs(newvalue, MyGrid.Data));
|
|
if (MyGrid.Data != retlist[1])
|
|
{
|
|
MyGrid.Data = retlist[1];
|
|
retval = Text;
|
|
if (Text != retlist[0])
|
|
Text = retlist[0];
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// if it's an ro within a table, need to process into an flex grid to save the grid data:
|
|
string findLinkXml = @"<START\].*?\[END>";
|
|
//string lookForXml = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v \\]+)* (.*?)(\\[^v '?\\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>", rousg.ROUsageID);
|
|
string lookForXml = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}} \\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>$", strROUID);
|
|
MatchCollection msg = Regex.Matches(MyGrid.Data, findLinkXml);
|
|
int nmsg = msg.Count;
|
|
for (int i = nmsg - 1; i >= 0; i--)
|
|
{
|
|
Match mmg = msg[i];
|
|
Match mg = Regex.Match(mmg.Value, lookForXml);// Regex.Match(MyGrid.Data, lookForXml);
|
|
if (mg != null && mg.Groups.Count > 1)
|
|
{
|
|
int myIndex = mg.Groups[4].Index + mmg.Index;
|
|
int myLength = mg.Groups[4].Length;
|
|
if (mg.Groups[3].Value != " ")
|
|
{
|
|
myIndex = mg.Groups[3].Index + mmg.Index;
|
|
myLength += mg.Groups[3].Length;
|
|
}
|
|
string gg = MyGrid.Data.Substring(myIndex, myLength);
|
|
if (value == "?")
|
|
newvalue = gg; // B2017-060 the text part of the RO link
|
|
if (newvalue.Contains(@"\u8209?"))
|
|
{
|
|
Match m = Regex.Match(newvalue, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
if (m == null)
|
|
newvalue = newvalue.Replace(@"\u8209?", "-");
|
|
else
|
|
newvalue = newvalue.Replace(@"\u8209?", m.Groups[1].Value + @"\u8209?" + m.Groups[3].Value);
|
|
}
|
|
if (newvalue.Contains(@"\u9586?"))
|
|
{
|
|
Match m = Regex.Match(newvalue, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
if (m == null)
|
|
newvalue = newvalue.Replace(@"\u9586?", @"\\");
|
|
else
|
|
newvalue = newvalue.Replace(@"\u9586?", m.Groups[1].Value + @"\u9586?" + m.Groups[3].Value);
|
|
}
|
|
if (value == "?" || gg != newvalue)
|
|
{
|
|
MyGrid.Data = Content.ConvertGridROsToText(MyGrid.Data, mmg, mg, newvalue); // B2017-060 convert the RO in the grid (table) to text
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return retval == null ? "" : retval;
|
|
}
|
|
// B2017-060 logic pulled from dlgExportImport to covert a RO in a table (grid) to text
|
|
public static string ConvertGridROsToText(string data, Match mmg, Match mg, string ss)
|
|
{
|
|
int ii = data.Substring(0, mmg.Index).LastIndexOf(@"\v");
|
|
int iil = data.Substring(mmg.Index + mg.Value.Length).IndexOf(@"\v0");
|
|
string part1 = data.Substring(0, ii); // length up to \v
|
|
string part2 = data.Substring(ii + 2, mmg.Index - (ii + 2));
|
|
string part3 = ss;
|
|
string part4 = data.Substring(mmg.Index + mg.Value.Length, iil);
|
|
string part5 = data.Substring(mmg.Index + (mg.Value.Length + iil + 3));
|
|
data = part1 + part2 + part3 + part4 + part5;
|
|
return data;
|
|
}
|
|
public string FixContentText(RoUsageInfo rousg, string value, int rotype, ROFstInfo origROFstInfo, bool saveAnnotation)
|
|
{
|
|
return FixContentText(rousg, value, rotype, origROFstInfo, null, "", saveAnnotation);
|
|
}
|
|
public string FixContentText(RoUsageInfo rousg, string value, int rotype, ROFstInfo origROFstInfo)
|
|
{
|
|
string filenameonly = null;
|
|
if (Text != null && Text.Length > 0)
|
|
{
|
|
if (ContentItems[0].MyItem.MyItemInfo.IsFigure)
|
|
filenameonly = value.Substring(0, value.IndexOf("\n"));
|
|
}
|
|
return FixContentText(rousg, value, rotype, origROFstInfo, filenameonly, "", false);
|
|
}
|
|
// B2017-060 added roidFrmImportStep to pass in a ROID to use when rousg is null (import procedure uses this)
|
|
public string FixContentText(RoUsageInfo rousg, string value, int rotype, ROFstInfo origROFstInfo, string fileNameOnly, string roidFrmImportStep)
|
|
{
|
|
return FixContentText(rousg, value, rotype, origROFstInfo, fileNameOnly, roidFrmImportStep, false);
|
|
}
|
|
public string FixContentText(RoUsageInfo rousg, string value, int rotype, ROFstInfo origROFstInfo, string fileNameOnly, string roidFrmImportStep, bool saveAnnotation)
|
|
{
|
|
string retval = null;
|
|
if (value == "?")
|
|
{
|
|
retval = this.ConvertROToText(rousg, value, rotype, origROFstInfo, roidFrmImportStep);
|
|
using (Item myitem = this.ContentItems[0].MyItem) // so that myitem does not stay in cache B2016-153
|
|
{
|
|
myitem.DisposeOfContent = false; // don't dispose of the contents may be needed if more than one RO needs processed - part of B2017-060
|
|
// B2016-225 (follow through) added more descriptive Annotation Type when RO is converted to text
|
|
Annotation.MakeAnnotation(myitem, AnnotationType.GetByNameOrCreate("Link Converted To Text"), "", string.Format("RO value ({0}) converted to text", ItemInfo.ConvertToDisplayText(retval)), null);
|
|
}
|
|
if (rousg != null)
|
|
RoUsage.Delete(rousg.ROUsageID);
|
|
return retval;
|
|
}
|
|
string newvalue = value;
|
|
newvalue = newvalue.Replace("{", @"\{").Replace("}", @"\}");
|
|
string findLink = @"<START\].*?\[END>";
|
|
MatchCollection ms = Regex.Matches(Text, findLink);
|
|
//string lookFor = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v \\]+)* (.*?)(\\[^v '?\\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>", rousg.ROUsageID);
|
|
string lookFor = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}}~ \\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>$", rousg.ROUsageID);
|
|
foreach (Match mm in ms)
|
|
{
|
|
Match m = Regex.Match(mm.Value, lookFor, RegexOptions.Singleline);
|
|
if (m != null && m.Groups.Count > 1)
|
|
{
|
|
int myIndex = m.Groups[4].Index + mm.Index;
|
|
int myLength = m.Groups[4].Length;
|
|
if(m.Groups[3].Value != " ")
|
|
{
|
|
myIndex = m.Groups[3].Index + mm.Index;
|
|
myLength += m.Groups[3].Length;
|
|
}
|
|
string gg = Text.Substring(myIndex,myLength);
|
|
if (((fileNameOnly == null) && (MakeConsistentFormat(gg) != MakeConsistentFormat(newvalue))) || ((fileNameOnly != null) && !(gg.Replace(@"\u8209?", "-").StartsWith(fileNameOnly) && newvalue.Replace(@"\u8209?", "-").StartsWith(fileNameOnly))))
|
|
{
|
|
retval = gg;
|
|
Text = Text.Substring(0, myIndex) + newvalue + Text.Substring(myIndex + myLength);
|
|
if (!saveAnnotation)
|
|
{
|
|
using (Item myitem = this.ContentItems[0].MyItem) // so that myitem does not stay in cache B2016-153
|
|
{
|
|
myitem.DisposeOfContent = false; // don't dispose of the contents may be needed if more than one RO needs processed - part of B2017-060
|
|
// B2016-225 (follow through) added more descriptive Annotation Type when RO is converted to text
|
|
Annotation.MakeAnnotation(myitem, AnnotationType.GetByNameOrCreate("Verification Required"), "",
|
|
string.Format("Referenced Object (Change in RO Values: Old value = {0}, New value = {1}) Changed", FixValue(gg), FixValue(newvalue)), null);
|
|
}
|
|
}
|
|
break; // Text has been processed
|
|
}
|
|
}
|
|
}
|
|
// see if there is a grid to update too.
|
|
if (rousg.MyContent.MyGrid != null)
|
|
{
|
|
if (rotype == (int)E_ROValueType.Table) // if change in rotable data...
|
|
{
|
|
if (origROFstInfo != null)
|
|
{
|
|
List<string> retlist = origROFstInfo.OnROTableUpdate(this, new ROFstInfoROTableUpdateEventArgs(newvalue, MyGrid.Data));
|
|
if (MyGrid.Data != retlist[1])
|
|
{
|
|
MyGrid.Data = retlist[1];
|
|
retval = Text;
|
|
if (Text != retlist[0])
|
|
Text = retlist[0];
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// if it's an ro within a table, need to process into an flex grid to save the grid data:
|
|
string findLinkXml = @"<START\].*?\[END>";
|
|
//string lookForXml = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v \\]+)* (.*?)(\\[^v '?\\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>", rousg.ROUsageID);
|
|
string lookForXml = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}} \\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>$", rousg.ROUsageID);
|
|
MatchCollection msg = Regex.Matches(MyGrid.Data, findLinkXml);
|
|
foreach (Match mmg in msg)
|
|
{
|
|
Match mg = Regex.Match(mmg.Value, lookForXml);// Regex.Match(MyGrid.Data, lookForXml);
|
|
if (mg != null && mg.Groups.Count > 1)
|
|
{
|
|
int myIndex = mg.Groups[4].Index + mmg.Index;
|
|
int myLength = mg.Groups[4].Length;
|
|
if (mg.Groups[3].Value != " ")
|
|
{
|
|
myIndex = mg.Groups[3].Index + mmg.Index;
|
|
myLength += mg.Groups[3].Length;
|
|
}
|
|
string gg = MyGrid.Data.Substring(myIndex, myLength);
|
|
if (newvalue.Contains(@"\u8209?"))
|
|
{
|
|
Match m = Regex.Match(newvalue, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
if (m == null)
|
|
newvalue = newvalue.Replace(@"\u8209?", "-");
|
|
else
|
|
newvalue = newvalue.Replace(@"\u8209?", m.Groups[1].Value + @"\u8209?" + m.Groups[3].Value);
|
|
}
|
|
if (newvalue.Contains(@"\u8593?"))
|
|
{
|
|
Match m = Regex.Match(newvalue, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
if (m == null)
|
|
newvalue = newvalue.Replace(@"\u8593?", "^");
|
|
else
|
|
newvalue = newvalue.Replace(@"\u8593?", m.Groups[1].Value + @"\u8593?" + m.Groups[3].Value);
|
|
}
|
|
if (newvalue.Contains(@"\u9586?"))
|
|
{
|
|
Match m = Regex.Match(newvalue, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
if (m == null)
|
|
newvalue = newvalue.Replace(@"\u9586?", @"\\");
|
|
else
|
|
newvalue = newvalue.Replace(@"\u9586?", m.Groups[1].Value + @"\u9586?" + m.Groups[3].Value);
|
|
}
|
|
if (gg != newvalue)
|
|
{
|
|
retval = gg;
|
|
MyGrid.Data = MyGrid.Data.Substring(0, myIndex) + newvalue + MyGrid.Data.Substring(myIndex + myLength);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return retval;
|
|
}
|
|
|
|
public static string MakeConsistentFormat(string gg)
|
|
{
|
|
// replace degree, bullet dash, hardspace
|
|
return ROFSTLookup.ConvertFortranFormatToScienctificNotation(gg).Replace("`", @"\'B0").Replace(@"\'b0", @"\'B0").Replace(@"\u8209?", "-").Replace(@"\u160?", " ").Replace("\xA0", " ").Replace(@"\'a0", " ").Replace(@"\'A0", " ");
|
|
}
|
|
private string FixValue(string str)
|
|
{
|
|
return str.Replace(@"\u8209?", "-").Replace(@"\u160?", " "); //dash and hard space
|
|
}
|
|
}
|
|
public delegate void StaticContentInfoEvent(object sender, StaticContentInfoEventArgs args);
|
|
public class StaticContentInfoEventArgs
|
|
{
|
|
string _OldValue;
|
|
public string OldValue
|
|
{
|
|
get { return _OldValue; }
|
|
set { _OldValue = value; }
|
|
}
|
|
string _NewValue;
|
|
public string NewValue
|
|
{
|
|
get { return _NewValue; }
|
|
set { _NewValue = value; }
|
|
}
|
|
string _Type;
|
|
public string Type
|
|
{
|
|
get { return _Type; }
|
|
set { _Type = value; }
|
|
}
|
|
public StaticContentInfoEventArgs(string oldValue, string newValue, string type)
|
|
{
|
|
_OldValue = oldValue;
|
|
_NewValue = newValue;
|
|
_Type = type;
|
|
}
|
|
}
|
|
public partial class ContentInfo
|
|
{
|
|
public static string FormatByteArray(byte[] myArray)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
for (int i = 0; i < myArray.Length; i++)
|
|
{
|
|
sb.Append(string.Format("{0:x2}", myArray[i]));
|
|
}
|
|
return sb.ToString();
|
|
}
|
|
public string LastChangedString
|
|
{
|
|
get { return ContentInfo.FormatByteArray(_LastChanged); }
|
|
}
|
|
//Convert.ToInt64( ByteArrayToHexString(_ts), 16 ) )
|
|
public Int64 LastChangedInt64
|
|
{
|
|
get { return Convert.ToInt64(LastChangedString, 16); }
|
|
}
|
|
public static bool IsInCache(int contentID)
|
|
{
|
|
return _CacheByPrimaryKey.ContainsKey(contentID.ToString());
|
|
}
|
|
public static event StaticContentInfoEvent StaticContentInfoChange;
|
|
private static void OnStaticContentInfoChange(object sender, StaticContentInfoEventArgs args)
|
|
{
|
|
if (StaticContentInfoChange != null)
|
|
StaticContentInfoChange(sender, args);
|
|
}
|
|
public string MyContentMessage = string.Empty;
|
|
public string MyGridMessage = string.Empty;
|
|
public bool InList(params int[] IDs)
|
|
{
|
|
foreach (int id in IDs)
|
|
if (id == ContentID) return true;
|
|
return false;
|
|
}
|
|
public void FixTransitionText(TransitionInfo tran, TransitionLookup tranLookup, ItemInfo ii)
|
|
{
|
|
FixTransitionText(tran, tranLookup, ii, "");
|
|
}
|
|
public void FixTransitionText(TransitionInfo tran, TransitionLookup tranLookup, ItemInfo ii, string forceConvertToText)
|
|
{
|
|
//string transText = tran.ResolvePathTo();
|
|
//string lookFor = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v \\]+)* ([^#]*?)(\\[^v'? \\]+)*\\v(\\[^v \\]+)* #Link:Transition[^:]*?:{0} {1}( [0-9]*){{1,2}}\[END>", tran.TranType, tran.TransitionID);
|
|
////string lookFor = string.Format(@"<START\]\\v0 ([^#]*?)\\v #Link:Transition[^:]*?:{0} {1} [0-9]*\[END>", tran.TranType, tran.TransitionID);
|
|
//Match m = Regex.Match(Text, lookFor);
|
|
//if (m != null && m.Groups.Count > 1)
|
|
//{
|
|
// System.Text.RegularExpressions.Group g = m.Groups[3];
|
|
// if (g.ToString() != transText)
|
|
// _Text = Text.Substring(0, g.Index) + transText + Text.Substring(g.Index + g.Length);
|
|
//}
|
|
string newvalue;
|
|
MyContentMessage = string.Empty;
|
|
if (tranLookup == null)
|
|
newvalue = tran.ResolvePathTo();
|
|
else
|
|
newvalue = tran.ResolvePathTo(tranLookup);
|
|
if (forceConvertToText != string.Empty)
|
|
newvalue = "?";
|
|
string findLink = @"<START\].*?\[END>";
|
|
MatchCollection ms = Regex.Matches(Text, findLink);
|
|
//string lookFor = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v \\]+)* (.*?)(\\[^v '?\\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>", rousg.ROUsageID);
|
|
string lookFor = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\line ?|\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}}~ \\]+)*\\v(\\[^v \\]+)* #Link:Transition[^:]*?:{0} {1}( [0-9]*){{1,2}}\[END>", tran.TranType, tran.TransitionID);
|
|
foreach (Match mm in ms)
|
|
{
|
|
Match m = Regex.Match(mm.Value, lookFor, RegexOptions.Singleline);
|
|
if (m != null && m.Groups.Count > 1)
|
|
{
|
|
int myIndex = m.Groups[4].Index + mm.Index;
|
|
int myLength = m.Groups[4].Length;
|
|
if (m.Groups[3].Value != " ")
|
|
{
|
|
myIndex = m.Groups[3].Index + mm.Index;
|
|
myLength += m.Groups[3].Length;
|
|
}
|
|
string gg = Text.Substring(myIndex, myLength);
|
|
MyContentMessage = string.Format("ContentExt.ContentInfo:Content:{0}, {1}, {2}", this.ContentID, tran.TransitionID, gg);
|
|
newvalue = newvalue.Replace("{", @"\{").Replace("}", @"\}");
|
|
//if ((gg.Contains("\\u8209?") ? gg.Replace("\\u8209?", "-") : gg) != (newvalue.Contains("\\u8209?") ? newvalue.Replace("\\u8209?", "-") : newvalue))
|
|
if ((gg.Replace(@"\u8209?", "-").Replace(@"\u9586?",@"\\")) != (newvalue.Replace("\\u8209?", "-").Replace(@"\u9586?",@"\\")))
|
|
{
|
|
_Text = Text.Substring(0, myIndex) + newvalue + Text.Substring(myIndex + myLength);
|
|
if (newvalue == "?")
|
|
{
|
|
gg = ItemInfo.ConvertToDisplayText(gg);
|
|
newvalue = forceConvertToText;
|
|
OnStaticContentInfoChange(ii, new StaticContentInfoEventArgs(gg, newvalue, "TX"));
|
|
break;
|
|
}
|
|
if (newvalue.StartsWith(gg) && (newvalue.ToUpper().Contains("BMP") || newvalue.ToUpper().Contains("GIF") || newvalue.ToUpper().Contains("TIF")))
|
|
{
|
|
break; // Text has been processed
|
|
}
|
|
else
|
|
{
|
|
gg = ItemInfo.ConvertToDisplayText(gg);
|
|
newvalue = ItemInfo.ConvertToDisplayText(newvalue);
|
|
OnStaticContentInfoChange(ii, new StaticContentInfoEventArgs(gg, newvalue, "TX"));
|
|
break; // Text has been processed
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// see if there is a grid to update too.
|
|
if (tran.MyContent.MyGrid != null)
|
|
{
|
|
//string lookForXml = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v \\]+)* ([^#]*?)(\\[^v'? \\]+)*\\v(\\[^v \\]+)* #Link:Transition[^:]*?:{0} {1}( [0-9]*){{1,2}}\[END>", tran.TranType, tran.TransitionID);
|
|
//Match mg = Regex.Match(MyGrid.Data, lookForXml);
|
|
//if (mg != null && mg.Groups.Count > 1)
|
|
//{
|
|
// System.Text.RegularExpressions.Group g = mg.Groups[3];
|
|
// //if (g.ToString() != transText)
|
|
// // MyGrid.Data = MyGrid.Data.Substring(0, g.Index) + transText + MyGrid.Data.Substring(g.Index + g.Length);
|
|
//}
|
|
MyGridMessage = string.Empty;
|
|
string findLinkXml = @"<START\].*?\[END>";
|
|
//string lookForXml = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v \\]+)* (.*?)(\\[^v '?\\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>", rousg.ROUsageID);
|
|
string lookForXml = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}} \\]+)*\\v(\\[^v \\]+)* #Link:Transition[^:]*?:{0} {1}( [0-9]*){{1,2}}\[END>", tran.TranType, tran.TransitionID);
|
|
MatchCollection msg = Regex.Matches(MyGrid.Data, findLinkXml);
|
|
foreach (Match mmg in msg)
|
|
{
|
|
Match mg = Regex.Match(mmg.Value, lookForXml);// Regex.Match(MyGrid.Data, lookForXml);
|
|
if (mg != null && mg.Groups.Count > 1)
|
|
{
|
|
int myIndex = mg.Groups[4].Index + mmg.Index;
|
|
int myLength = mg.Groups[4].Length;
|
|
if (mg.Groups[3].Value != " ")
|
|
{
|
|
myIndex = mg.Groups[3].Index + mmg.Index;
|
|
myLength += mg.Groups[3].Length;
|
|
}
|
|
string gg = MyGrid.Data.Substring(myIndex, myLength);
|
|
if (newvalue.Contains(@"\u8209?"))
|
|
{
|
|
Match m = Regex.Match(newvalue, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
if (m == null)
|
|
newvalue = newvalue.Replace(@"\u8209?", "-");
|
|
else
|
|
newvalue = newvalue.Replace(@"\u8209?", m.Groups[1].Value + @"\u8209?" + m.Groups[3].Value);
|
|
}
|
|
if (newvalue.Contains(@"\u8593?"))
|
|
{
|
|
Match m = Regex.Match(newvalue, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
if (m == null)
|
|
newvalue = newvalue.Replace(@"\u8593?", "^");
|
|
else
|
|
newvalue = newvalue.Replace(@"\u8593?", m.Groups[1].Value + @"\u8593?" + m.Groups[3].Value);
|
|
}
|
|
if (newvalue.Contains(@"\u9586?"))
|
|
{
|
|
Match m = Regex.Match(newvalue, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
if (m == null)
|
|
newvalue = newvalue.Replace(@"\u9586?", @"\\");
|
|
else
|
|
newvalue = newvalue.Replace(@"\u9586?", m.Groups[1].Value + @"\u9586?" + m.Groups[3].Value);
|
|
}
|
|
MyGridMessage = string.Format("ContentExt.ContentInfo:Grid:{0}, {1}, {2}", this.ContentID, tran.TransitionID, gg);
|
|
if (gg != newvalue)
|
|
{
|
|
MyGrid.SetData(MyGrid.Data.Substring(0, myIndex) + newvalue + MyGrid.Data.Substring(myIndex + myLength));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
public void FixTransitionText(TransitionInfo tran, ItemInfo ii)
|
|
{
|
|
FixTransitionText(tran, ii, "");
|
|
}
|
|
public void FixTransitionText(TransitionInfo tran, ItemInfo ii, string forceConvertToText)
|
|
{
|
|
FixTransitionText(tran, null, ii, forceConvertToText);
|
|
//string transText = tran.ResolvePathTo(tranLookup);
|
|
//string lookFor = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v \\]+)* ([^#]*?)(\\[^v'? \\]+)*\\v(\\[^v \\]+)* #Link:Transition[^:]*?:{0} {1}( [0-9]*){{1,2}}\[END>", tran.TranType, tran.TransitionID);
|
|
////string lookFor = string.Format(@"<START\]\\v0 ([^#]*?)\\v #Link:Transition[^:]*?:{0} {1} [0-9]*\[END>", tran.TranType, tran.TransitionID);
|
|
//Match m = Regex.Match(Text, lookFor);
|
|
//if (m != null && m.Groups.Count > 1)
|
|
//{
|
|
// System.Text.RegularExpressions.Group g = m.Groups[3];
|
|
// if (g.ToString() != transText)
|
|
// _Text = Text.Substring(0, g.Index) + transText + Text.Substring(g.Index + g.Length);
|
|
//}
|
|
//// see if there is a grid to update too.
|
|
//if (MyGrid != null)
|
|
//{
|
|
// string lookForXml = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v \\]+)* ([^#]*?)(\\[^v'? \\]+)*\\v(\\[^v \\]+)* #Link:Transition[^:]*?:{0} {1}( [0-9]*){{1,2}}\[END>", tran.TranType, tran.TransitionID);
|
|
// Match mg = Regex.Match(MyGrid.Data, lookForXml);
|
|
// if (mg != null && mg.Groups.Count > 1)
|
|
// {
|
|
// System.Text.RegularExpressions.Group g = mg.Groups[3];
|
|
// if (g.ToString() != transText)
|
|
// MyGrid.SetData(MyGrid.Data.Substring(0, g.Index) + transText + MyGrid.Data.Substring(g.Index + g.Length));
|
|
// }
|
|
//}
|
|
}
|
|
public void FixContentText(RoUsageInfo rousg, string value, int rotype, ROFstInfo origROFstInfo, ItemInfo ii) // string newvalue)
|
|
{
|
|
string fileNameOnly = null;
|
|
if (ii.IsFigure && Text != null && Text.Length > 0)
|
|
fileNameOnly = value.Substring(0,value.IndexOf("\n")).Replace(@"\u8209?","-"); // check only the file name of the RO figure
|
|
string newvalue = value;
|
|
newvalue = newvalue.Replace("{", @"\{").Replace("}", @"\}");
|
|
string findLink = @"<START\].*?\[END>";
|
|
MatchCollection ms = Regex.Matches(Text, findLink);
|
|
//string lookFor = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v \\]+)* (.*?)(\\[^v '?\\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>", rousg.ROUsageID);
|
|
string lookFor = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}~\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}}~ \\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>$", rousg.ROUsageID);
|
|
foreach (Match mm in ms)
|
|
{
|
|
int offset = mm.Index;
|
|
Match m = Regex.Match(mm.Value, lookFor, RegexOptions.Singleline);
|
|
if (m != null && m.Groups.Count > 1)
|
|
{
|
|
int myIndex = m.Groups[4].Index + mm.Index;
|
|
int myLength = m.Groups[4].Length;
|
|
if (m.Groups[3].Value != " ")
|
|
{
|
|
myIndex = m.Groups[3].Index + mm.Index;
|
|
myLength += m.Groups[3].Length;
|
|
}
|
|
string gg = Text.Substring(myIndex, myLength);
|
|
if (((fileNameOnly == null) && (Content.MakeConsistentFormat(gg) != Content.MakeConsistentFormat(newvalue))) || ((fileNameOnly != null) && !(gg.Replace(@"\u8209?", "-").StartsWith(fileNameOnly) && newvalue.Replace(@"\u8209?", "-").StartsWith(fileNameOnly))))
|
|
{
|
|
// Debug - jsj 5-19-2017 - left in for initial check-in
|
|
//string gg_org = gg;
|
|
//string newval_org = newvalue;
|
|
_Text = Text.Substring(0, myIndex) + newvalue + _Text.Substring(myIndex + myLength);
|
|
if (newvalue == "?")
|
|
{
|
|
gg = ItemInfo.ConvertToDisplayText(gg);
|
|
newvalue = "Deleted RO";
|
|
OnStaticContentInfoChange(ii, new StaticContentInfoEventArgs(gg, newvalue, "RO"));
|
|
break;
|
|
}
|
|
if (newvalue.StartsWith(gg) && (newvalue.ToUpper().Contains("BMP") || newvalue.ToUpper().Contains("GIF") || newvalue.ToUpper().Contains("TIF")))
|
|
{
|
|
break; // Text has been processed
|
|
}
|
|
else
|
|
{
|
|
gg = ItemInfo.ConvertToDisplayText(gg);
|
|
newvalue = ItemInfo.ConvertToDisplayText(newvalue);
|
|
// Debug - jsj 5-19-2017 - left in for initial check-in
|
|
//string xx_gg = gg_org.Replace(@"\'b0", @"\'B0").Replace(@"\u8209?", "-").Replace(@"\u160?", " ").Replace("\xA0", " ");
|
|
//string xx_nv = newval_org.Replace(@"\'b0", @"\'B0").Replace(@"\u8209?", "-").Replace(@"\u160?", " ").Replace("\xA0", " ");
|
|
//Console.WriteLine(xx_gg.CompareTo(xx_nv));
|
|
OnStaticContentInfoChange(ii, new StaticContentInfoEventArgs(gg, newvalue, "RO"));
|
|
break; // Text has been processed
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// see if there is a grid to update too.
|
|
if (MyGrid != null)
|
|
{
|
|
if (rotype == (int)E_ROValueType.Table) // if change in rotable data...
|
|
{
|
|
List<string> retlist = origROFstInfo.OnROTableUpdate(this, new ROFstInfoROTableUpdateEventArgs(newvalue, MyGrid.Data));
|
|
if (Text != retlist[0]) _Text = retlist[0];
|
|
//if (MyGrid.Data != retlist[1]) MyGrid.Data = retlist[1];
|
|
}
|
|
else
|
|
{
|
|
// if it's an ro within a table, need to process into an flex grid to save the grid data:
|
|
string findLinkXml = @"<START\].*?\[END>";
|
|
//string lookForXml = string.Format(@"<START\](\\[^v \\]+)*\\v0(\\[^v \\]+)* (.*?)(\\[^v '?\\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>", rousg.ROUsageID);
|
|
string lookForXml = string.Format(@"^<START\](\\[^v \\]+)*\\v0(\\[^v '?{{}}\\]+)*( |\\u[0-9]{{1,4}}?|\\'[0-9a-fA-F]{{2}}|\\[{{}}~])(.*?)(\\[^v'?{{}} \\]+)*\\v(\\[^v \\]+)* #Link:ReferencedObject:{0} .*?\[END>$", rousg.ROUsageID);
|
|
MatchCollection msg = Regex.Matches(MyGrid.Data, findLinkXml);
|
|
foreach (Match mmg in msg)
|
|
{
|
|
//int offset = 0; // crashed in substring line below if using mmg.Index; Set to 0 and it worked - KBR.
|
|
Match mg = Regex.Match(mmg.Value, lookForXml);
|
|
if (mg != null && mg.Groups.Count > 1)
|
|
{
|
|
int myIndex = mg.Groups[4].Index;
|
|
int myLength = mg.Groups[4].Length;
|
|
if (mg.Groups[3].Value != " ")
|
|
{
|
|
myIndex = mg.Groups[3].Index ;
|
|
myLength += mg.Groups[3].Length;
|
|
}
|
|
string gg = MyGrid.Data.Substring(myIndex+ mmg.Index, myLength);
|
|
if (newvalue.Contains(@"\u8209?"))
|
|
{
|
|
Match m = Regex.Match(gg, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
if (m.Groups.Count < 3)
|
|
newvalue = newvalue.Replace(@"\u8209?", "-");
|
|
else
|
|
newvalue = newvalue.Replace(@"\u8209?", m.Groups[1].Value + @"\u8209?" + m.Groups[3].Value);
|
|
}
|
|
if (newvalue.Contains(@"\u8593?"))
|
|
{
|
|
Match m = Regex.Match(newvalue, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
if (m.Groups.Count < 3)
|
|
newvalue = newvalue.Replace(@"\u8593?", "^");
|
|
else
|
|
newvalue = newvalue.Replace(@"\u8593?", m.Groups[1].Value + @"\u8593?" + m.Groups[3].Value);
|
|
}
|
|
if (newvalue.Contains(@"\u9586?"))
|
|
{
|
|
Match m = Regex.Match(newvalue, @"(\\f[0-9]+)(\\u[0-9]{1,4}\?)(\\f[0-9]+ ?)");
|
|
if (m.Groups.Count < 3)
|
|
newvalue = newvalue.Replace(@"\u9586?", @"\\");
|
|
else
|
|
newvalue = newvalue.Replace(@"\u9586?", m.Groups[1].Value + @"\u9586?" + m.Groups[3].Value);
|
|
}
|
|
if (gg != newvalue)
|
|
{
|
|
string prefix1 = MyGrid.Data.Substring(0,mmg.Index);
|
|
string prefix2 = mmg.Value.Substring(0,myIndex);
|
|
string suffix1 = MyGrid.Data.Substring(mmg.Index + mmg.Length);
|
|
string suffix2 = mmg.Value.Substring(myIndex + myLength);
|
|
MyGrid.SetData(prefix1 + prefix2 + newvalue + suffix2 + suffix1);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (_Text == string.Empty)
|
|
_Text = "?";
|
|
}
|
|
public void LoadNonCachedGrid()
|
|
{
|
|
_MyGrid = GridInfo.GetNonCached(ContentID);
|
|
//Console.WriteLine("LoadNonCachedGrid {0},{1},{2}",ContentID,_MyGrid==null,_MyContentInfoUnique);
|
|
}
|
|
public PartInfoList LocalContentParts
|
|
{
|
|
get { return _ContentParts; }
|
|
}
|
|
public void AddPart(SafeDataReader dr, ItemInfo itemInfo)
|
|
{
|
|
if (_ContentParts == null)
|
|
_ContentParts = new PartInfoList(dr, itemInfo);
|
|
else
|
|
_ContentParts.AddPartInfo(dr, itemInfo);
|
|
}
|
|
public override string ToString()
|
|
{
|
|
return string.Format("{0} {1}", Number, Text);
|
|
}
|
|
public void ShowChange()
|
|
{
|
|
OnChange();
|
|
}
|
|
//public XmlNode ToXml(XmlNode xn)
|
|
//{
|
|
// XmlNode nd = xn.OwnerDocument.CreateElement("Content");
|
|
// xn.AppendChild(nd);
|
|
// AddAttribute(nd, "Number", _Number);
|
|
// AddAttribute(nd, "Text", _Text);
|
|
// AddAttribute(nd, "FormatID", _FormatID);
|
|
// AddAttribute(nd, "Config", _Config);
|
|
// return nd;
|
|
//}
|
|
//public void AddAttribute(XmlNode xn, string name, object o)
|
|
//{
|
|
// if (o != null && o.ToString() != "")
|
|
// {
|
|
// XmlAttribute xa = xn.OwnerDocument.CreateAttribute(name);
|
|
// xa.Value = o.ToString();
|
|
// xn.Attributes.Append(xa);
|
|
// }
|
|
//}
|
|
internal ContentInfo(SafeDataReader dr,bool ForItem)
|
|
{
|
|
if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] ContentInfo.Constructor", GetHashCode());
|
|
try
|
|
{
|
|
ReadDataItemList(dr);
|
|
_CacheList.Add(this);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (_MyLog.IsErrorEnabled) _MyLog.Error("ContentInfo.Constructor", ex);
|
|
throw new DbCslaException("ContentInfo.Constructor", ex);
|
|
}
|
|
}
|
|
private void ReadDataItemList(SafeDataReader dr)
|
|
{
|
|
if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] ContentInfo.ReadDataItemList", GetHashCode());
|
|
try
|
|
{
|
|
_ContentID = dr.GetInt32("ContentID");
|
|
_Number = dr.GetString("Number");
|
|
_Text = dr.GetString("Text");
|
|
_Type = (int?)dr.GetValue("Type");
|
|
_FormatID = (int?)dr.GetValue("FormatID");
|
|
_Config = dr.GetString("Config");
|
|
_DTS = dr.GetDateTime("cDTS");
|
|
_UserID = dr.GetString("cUserID");
|
|
_ContentDetailCount = dr.GetInt32("DetailCount");
|
|
_ContentEntryCount = dr.GetInt32("EntryCount");
|
|
_ContentGridCount = dr.GetInt32("GridCount");
|
|
_ContentImageCount = dr.GetInt32("ImageCount");
|
|
_ContentItemCount = dr.GetInt32("ItemCount");
|
|
_ContentPartCount = dr.GetInt32("cPartCount");
|
|
_ContentRoUsageCount = dr.GetInt32("RoUsageCount");
|
|
_ContentTransitionCount = dr.GetInt32("TransitionCount");
|
|
_ContentZContentCount = dr.GetInt32("ZContentCount");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (_MyLog.IsErrorEnabled) _MyLog.Error("ContentInfo.ReadData", ex);
|
|
_ErrorMessage = ex.Message;
|
|
throw new DbCslaException("ContentInfo.ReadData", ex);
|
|
}
|
|
}
|
|
|
|
}
|
|
public partial class ContentInfoList
|
|
{
|
|
public static ContentInfoList GetList(int? itemID)
|
|
{
|
|
try
|
|
{
|
|
ContentInfoList tmp = DataPortal.Fetch<ContentInfoList>(new ContentListCriteria(itemID));
|
|
ContentInfo.AddList(tmp);
|
|
tmp.AddEvents();
|
|
return tmp;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new DbCslaException("Error on ItemInfoList.GetChildren", ex);
|
|
}
|
|
}
|
|
[Serializable()]
|
|
private class ContentListCriteria
|
|
{
|
|
public ContentListCriteria(int? itemID)
|
|
{
|
|
_ItemID = itemID;
|
|
}
|
|
private int? _ItemID;
|
|
public int? ItemID
|
|
{
|
|
get { return _ItemID; }
|
|
set { _ItemID = value; }
|
|
}
|
|
}
|
|
private void DataPortal_Fetch(ContentListCriteria criteria)
|
|
{
|
|
this.RaiseListChangedEvents = false;
|
|
try
|
|
{
|
|
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
|
{
|
|
using (SqlCommand cm = cn.CreateCommand())
|
|
{
|
|
cm.CommandType = CommandType.StoredProcedure;
|
|
cm.CommandText = "vesp_ListContentsByItemID";
|
|
cm.Parameters.AddWithValue("@ItemID", criteria.ItemID);
|
|
cm.CommandTimeout = Database.DefaultTimeout;
|
|
using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
|
|
{
|
|
IsReadOnly = false;
|
|
while (dr.Read())
|
|
{
|
|
ContentInfo contentInfo = new ContentInfo(dr);
|
|
this.Add(contentInfo);
|
|
}
|
|
IsReadOnly = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Database.LogException("ContentInfoList.DataPortal_Fetch", ex);
|
|
throw new DbCslaException("ContentInfoList.DataPortal_Fetch", ex);
|
|
}
|
|
this.RaiseListChangedEvents = true;
|
|
}
|
|
public static ContentInfoList GetChangedList(byte[] lastChanged)
|
|
{
|
|
try
|
|
{
|
|
ContentInfoList tmp = DataPortal.Fetch<ContentInfoList>(new ChangeListCriteria(lastChanged));
|
|
// ContentInfo.AddList(tmp);
|
|
tmp.AddEvents();
|
|
return tmp;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new DbCslaException("Error on ContentInfoList.GetChangedList", ex);
|
|
}
|
|
}
|
|
[Serializable()]
|
|
private class ChangeListCriteria
|
|
{
|
|
private byte[] _LastChanged;
|
|
public byte[] LastChanged
|
|
{
|
|
get { return _LastChanged; }
|
|
set { _LastChanged = value; }
|
|
}
|
|
public ChangeListCriteria(byte[] lastChanged)
|
|
{
|
|
_LastChanged = lastChanged;
|
|
}
|
|
}
|
|
private void DataPortal_Fetch(ChangeListCriteria criteria)
|
|
{
|
|
this.RaiseListChangedEvents = false;
|
|
try
|
|
{
|
|
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
|
{
|
|
using (SqlCommand cm = cn.CreateCommand())
|
|
{
|
|
cm.CommandType = CommandType.StoredProcedure;
|
|
cm.CommandText = "vesp_ListContentsAfterLastChanged";
|
|
cm.Parameters.AddWithValue("@LastChanged", criteria.LastChanged);
|
|
cm.CommandTimeout = Database.DefaultTimeout;
|
|
using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
|
|
{
|
|
IsReadOnly = false;
|
|
while (dr.Read())
|
|
{
|
|
ContentInfo contentInfo = new ContentInfo(dr);
|
|
this.Add(contentInfo);
|
|
}
|
|
IsReadOnly = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Database.LogException("ContentInfoList.DataPortal_Fetch", ex);
|
|
throw new DbCslaException("ContentInfoList.DataPortal_Fetch", ex);
|
|
}
|
|
this.RaiseListChangedEvents = true;
|
|
}
|
|
#region ClearCBOverride
|
|
// B2015-039 fix:
|
|
// the following code clears the change bar override attribute from the step config, using the
|
|
// sql stored procedure 'ClearCBOverrideForProcedure'. The stored procedure returns
|
|
// a list of content records whose config was updated - so that this list can be used
|
|
// to refresh config data (caching) and refresh content (caching & User Interface)
|
|
[Serializable()]
|
|
private class ClearCBOverrideCriteria
|
|
{
|
|
public ClearCBOverrideCriteria(int? itemID)
|
|
{
|
|
_ItemID = itemID;
|
|
}
|
|
private int? _ItemID;
|
|
public int? ItemID
|
|
{
|
|
get { return _ItemID; }
|
|
set { _ItemID = value; }
|
|
}
|
|
}
|
|
private void DataPortal_Fetch(ClearCBOverrideCriteria criteria)
|
|
{
|
|
try
|
|
{
|
|
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
|
{
|
|
using (SqlCommand cm = cn.CreateCommand())
|
|
{
|
|
cm.CommandType = CommandType.StoredProcedure;
|
|
cm.CommandText = "ClearCBOverrideForProcedure";
|
|
cm.Parameters.AddWithValue("@ItemID", criteria.ItemID);
|
|
cm.CommandTimeout = Database.DefaultTimeout;
|
|
using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
|
|
{
|
|
while (dr.Read())
|
|
{
|
|
IsReadOnly = false;
|
|
while (dr.Read())
|
|
{
|
|
ContentInfo contentInfo = new ContentInfo(dr);
|
|
this.Add(contentInfo);
|
|
}
|
|
IsReadOnly = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Database.LogException("ClearCBOverrideCriteria.DataPortal_Fetch", ex);
|
|
throw new DbCslaException("ClearCBOverrideCriteria.DataPortal_Fetch", ex);
|
|
}
|
|
}
|
|
public static ContentInfoList GetClearedCBOverrides(int itemID)
|
|
{
|
|
try
|
|
{
|
|
ContentInfoList tmp = DataPortal.Fetch<ContentInfoList>(new ClearCBOverrideCriteria(itemID));
|
|
return tmp;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new DbCslaException("Error on ContentInfoList.GetClearedCBOverrides", ex);
|
|
}
|
|
}
|
|
#endregion
|
|
#region Enhanced
|
|
#region Enhanced_UnlinkItems
|
|
[Serializable()]
|
|
private class EnhancedUnlinkCriteria
|
|
{
|
|
public EnhancedUnlinkCriteria(int? enhancedID)
|
|
{
|
|
_EnhancedID = enhancedID;
|
|
}
|
|
private int? _EnhancedID;
|
|
public int? EnhancedID
|
|
{
|
|
get { return _EnhancedID; }
|
|
set { _EnhancedID = value; }
|
|
}
|
|
}
|
|
private void DataPortal_Fetch(EnhancedUnlinkCriteria criteria)
|
|
{
|
|
try
|
|
{
|
|
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
|
{
|
|
using (SqlCommand cm = cn.CreateCommand())
|
|
{
|
|
cm.CommandType = CommandType.StoredProcedure;
|
|
cm.CommandText = "vesp_PurgeEnhancedItemsAndChildren";
|
|
cm.Parameters.AddWithValue("@EnhanceID", criteria.EnhancedID); // note query had 'EnhanceID', not 'EnhancedID'
|
|
cm.CommandTimeout = Database.DefaultTimeout;
|
|
using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
|
|
{
|
|
IsReadOnly = false;
|
|
while (dr.Read())
|
|
{
|
|
ContentInfo contentInfo = new ContentInfo(dr);
|
|
this.Add(contentInfo);
|
|
}
|
|
IsReadOnly = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Database.LogException("EnhancedUnlinkCriteria.DataPortal_Fetch", ex);
|
|
throw new DbCslaException("EnhancedUnlinkCriteria.DataPortal_Fetch", ex);
|
|
}
|
|
}
|
|
public static ContentInfoList DoEnhancedUnlink(int enhancedID)
|
|
{
|
|
try
|
|
{
|
|
ContentInfoList tmp = DataPortal.Fetch<ContentInfoList>(new EnhancedUnlinkCriteria(enhancedID));
|
|
return tmp;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new DbCslaException("Error on ContentInfoList.DoEnhancedUnlink", ex);
|
|
}
|
|
}
|
|
#endregion Enhanced_UnlinkItems
|
|
#region Enhanced_UnlinkDocVersionAndItems
|
|
//////
|
|
[Serializable()]
|
|
private class EnhancedDocVersionUnlinkCriteria
|
|
{
|
|
public EnhancedDocVersionUnlinkCriteria(int? enhancedDocVersionID)
|
|
{
|
|
_EnhancedDocVersionID = enhancedDocVersionID;
|
|
}
|
|
private int? _EnhancedDocVersionID;
|
|
public int? EnhancedDocVersionID
|
|
{
|
|
get { return _EnhancedDocVersionID; }
|
|
set { _EnhancedDocVersionID = value; }
|
|
}
|
|
}
|
|
private void DataPortal_Fetch(EnhancedDocVersionUnlinkCriteria criteria)
|
|
{
|
|
try
|
|
{
|
|
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
|
{
|
|
using (SqlCommand cm = cn.CreateCommand())
|
|
{
|
|
cm.CommandType = CommandType.StoredProcedure;
|
|
cm.CommandText = "vesp_PurgeEnhancedDocVersionsAndChildren";
|
|
cm.Parameters.AddWithValue("@EnhanceID", criteria.EnhancedDocVersionID); // note query has 'EnhanceID'
|
|
cm.CommandTimeout = Database.DefaultTimeout;
|
|
using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
|
|
{
|
|
IsReadOnly = false;
|
|
while (dr.Read())
|
|
{
|
|
ContentInfo contentInfo = new ContentInfo(dr);
|
|
this.Add(contentInfo);
|
|
}
|
|
IsReadOnly = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Database.LogException("EnhancedDocVersionUnlinkCriteria.DataPortal_Fetch", ex);
|
|
throw new DbCslaException("EnhancedDocVersionUnlinkCriteria.DataPortal_Fetch", ex);
|
|
}
|
|
}
|
|
public static ContentInfoList DoEnhancedDocVersionUnlink(int enhancedDocVersionID)
|
|
{
|
|
try
|
|
{
|
|
ContentInfoList tmp = DataPortal.Fetch<ContentInfoList>(new EnhancedDocVersionUnlinkCriteria(enhancedDocVersionID));
|
|
return tmp;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new DbCslaException("Error on ContentInfoList.DoEnhancedDocVersionUnlink", ex);
|
|
}
|
|
}
|
|
#endregion Enhanced_UnlinkDocVersionAndItems
|
|
#region Enhanced_Convert16To32
|
|
//////
|
|
[Serializable()]
|
|
private class GetEnhanced16To32ContentsCriteria
|
|
{
|
|
public GetEnhanced16To32ContentsCriteria(int? srcProcID, int? enhancedProcID, int enhType)
|
|
{
|
|
_SrcProcID = srcProcID;
|
|
_EnhancedProcID = enhancedProcID;
|
|
_EnhType = enhType;
|
|
}
|
|
private int? _SrcProcID;
|
|
public int? SrcProcID
|
|
{
|
|
get { return _SrcProcID; }
|
|
set { _SrcProcID = value; }
|
|
}
|
|
private int? _EnhancedProcID;
|
|
public int? EnhancedProcID
|
|
{
|
|
get { return _EnhancedProcID; }
|
|
set { _EnhancedProcID = value; }
|
|
}
|
|
private int? _EnhType;
|
|
public int? EnhType
|
|
{
|
|
get { return _EnhType; }
|
|
set { _EnhType = value; }
|
|
}
|
|
}
|
|
private void DataPortal_Fetch(GetEnhanced16To32ContentsCriteria criteria)
|
|
{
|
|
try
|
|
{
|
|
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
|
{
|
|
using (SqlCommand cm = cn.CreateCommand())
|
|
{
|
|
cm.CommandType = CommandType.StoredProcedure;
|
|
cm.CommandText = "vesp_Get16BitEnhancedContents";
|
|
cm.Parameters.AddWithValue("@SourceID", criteria.SrcProcID);
|
|
cm.Parameters.AddWithValue("@EnhanceID", criteria.EnhancedProcID);
|
|
cm.Parameters.AddWithValue("@EnhType", criteria.EnhType);
|
|
cm.CommandTimeout = Database.DefaultTimeout;
|
|
using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
|
|
{
|
|
IsReadOnly = false;
|
|
while (dr.Read())
|
|
{
|
|
ContentInfo contentInfo = new ContentInfo(dr);
|
|
this.Add(contentInfo);
|
|
}
|
|
IsReadOnly = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Database.LogException("GetEnhanced16To32ContentsCriteria.DataPortal_Fetch", ex);
|
|
}
|
|
}
|
|
public static ContentInfoList Get16BitEnhancedContents(int srcProcID, int enhProcID, int enhType)
|
|
{
|
|
// query returns a list of items that were found to have compatible 16bit data to set link to enhanced
|
|
// from the input source. Caller can check if there are non-procedure items, then procedures can be
|
|
// linked using 16bit data in the config field
|
|
try
|
|
{
|
|
ContentInfoList tmp = DataPortal.Fetch<ContentInfoList>(new GetEnhanced16To32ContentsCriteria(srcProcID, enhProcID, enhType));
|
|
return tmp;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new DbCslaException("Error on ContentInfoList.Get16BitEnhancedContents", ex);
|
|
}
|
|
}
|
|
//////
|
|
[Serializable()]
|
|
private class ConvertEnhanced16To32ContentsCriteria
|
|
{
|
|
public ConvertEnhanced16To32ContentsCriteria(int? srcProcID, int? enhancedProcID, int enhType)
|
|
{
|
|
_SrcProcID = srcProcID;
|
|
_EnhancedProcID = enhancedProcID;
|
|
_EnhType = enhType;
|
|
}
|
|
private int? _SrcProcID;
|
|
public int? SrcProcID
|
|
{
|
|
get { return _SrcProcID; }
|
|
set { _SrcProcID = value; }
|
|
}
|
|
private int? _EnhancedProcID;
|
|
public int? EnhancedProcID
|
|
{
|
|
get { return _EnhancedProcID; }
|
|
set { _EnhancedProcID = value; }
|
|
}
|
|
private int? _EnhType;
|
|
public int? EnhType
|
|
{
|
|
get { return _EnhType; }
|
|
set { _EnhType = value; }
|
|
}
|
|
}
|
|
private void DataPortal_Fetch(ConvertEnhanced16To32ContentsCriteria criteria)
|
|
{
|
|
try
|
|
{
|
|
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
|
{
|
|
using (SqlCommand cm = cn.CreateCommand())
|
|
{
|
|
cm.CommandType = CommandType.StoredProcedure;
|
|
cm.CommandText = "vesp_Convert16to32EnhancedContents";
|
|
cm.Parameters.AddWithValue("@SourceID", criteria.SrcProcID);
|
|
cm.Parameters.AddWithValue("@EnhanceID", criteria.EnhancedProcID);
|
|
cm.Parameters.AddWithValue("@EnhType", criteria.EnhType);
|
|
cm.CommandTimeout = Database.DefaultTimeout;
|
|
using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
|
|
{
|
|
IsReadOnly = false;
|
|
while (dr.Read())
|
|
{
|
|
ContentInfo contentInfo = new ContentInfo(dr);
|
|
this.Add(contentInfo);
|
|
}
|
|
IsReadOnly = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Database.LogException("ConvertEnhanced16To32ContentsCriteria.DataPortal_Fetch", ex);
|
|
}
|
|
}
|
|
public static ContentInfoList Convert16To32EnhancedContents(int srcProcID, int enhProcID, int enhType)
|
|
{
|
|
// query links the 2 procedures (source and enhanced) setting the Enhanced type to 'enhType'
|
|
try
|
|
{
|
|
ContentInfoList tmp = DataPortal.Fetch<ContentInfoList>(new ConvertEnhanced16To32ContentsCriteria(srcProcID, enhProcID, enhType));
|
|
return tmp;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new DbCslaException("Error on ContentInfoList.Convert16To32EnhancedContents", ex);
|
|
}
|
|
}
|
|
#endregion Enhanced_Convert16To32
|
|
#endregion Enhanced
|
|
}
|
|
}
|