510 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			510 lines
		
	
	
		
			19 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 override string ToString()
 | 
						|
		{
 | 
						|
			return string.Format("{0} {1}", Number, Text);
 | 
						|
		}
 | 
						|
		public void FixTransitionText(TransitionInfo tran)
 | 
						|
		{
 | 
						|
			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);
 | 
						|
			}
 | 
						|
			// 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);
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		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)
 | 
						|
		{
 | 
						|
			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);
 | 
						|
      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);
 | 
						|
					System.Text.RegularExpressions.Group g = m.Groups[3];
 | 
						|
					string part1 = newText.Substring(0, mm.Index);
 | 
						|
					string part2 = g.Value;
 | 
						|
					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);
 | 
						|
					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 (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);
 | 
						|
					MatchCollection msg = Regex.Matches(MyGrid.Data, findLinkXml);
 | 
						|
					int nmsg = msg.Count;
 | 
						|
					for (int i = nmsg - 1; i >= 0; i--)
 | 
						|
					{
 | 
						|
						Match mmg = msg[i];
 | 
						|
						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);// Regex.Match(MyGrid.Data, lookForXml);
 | 
						|
						if (mg != null && mg.Groups.Count > 1)
 | 
						|
						{
 | 
						|
							System.Text.RegularExpressions.Group g = mg.Groups[3];
 | 
						|
							if (g.ToString() != newvalue)
 | 
						|
							{
 | 
						|
								retval = g.Value;
 | 
						|
								MyGrid.Data = MyGrid.Data.Substring(0, offset + mmg.Index + g.Index) + newvalue + MyGrid.Data.Substring(offset + mmg.Index + g.Index + g.Length);
 | 
						|
							}
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return retval;
 | 
						|
		}
 | 
						|
		public string FixContentText(RoUsageInfo rousg, string value, int rotype, ROFstInfo origROFstInfo) // string newvalue)
 | 
						|
		{
 | 
						|
			return FixContentText(rousg, value, rotype, origROFstInfo, null);
 | 
						|
		}
 | 
						|
		public string FixContentText(RoUsageInfo rousg, string value, int rotype, ROFstInfo origROFstInfo,string fileNameOnly) // string newvalue)
 | 
						|
		{
 | 
						|
			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);
 | 
						|
      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] != " ")
 | 
						|
          {
 | 
						|
            myIndex = m.Groups[3].Index + mm.Index;
 | 
						|
            myLength += m.Groups[3].Length;
 | 
						|
          }
 | 
						|
  				string gg = Text.Substring(myIndex,myLength);
 | 
						|
          if ((gg.Replace(@"\'b0", @"\'B0") != newvalue.Replace(@"\'b0", @"\'B0")) && ((fileNameOnly == null) || (gg != fileNameOnly)))
 | 
						|
          {
 | 
						|
						retval = gg;
 | 
						|
						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 (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 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);
 | 
						|
          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 = m.Groups[4].Index + mmg.Index;
 | 
						|
              int myLength = m.Groups[4].Length;
 | 
						|
              if (m.Groups[3] != " ")
 | 
						|
              {
 | 
						|
                myIndex = m.Groups[3].Index + mmg.Index;
 | 
						|
                myLength += m.Groups[3].Length;
 | 
						|
              }
 | 
						|
              string gg = Text.Substring(myIndex, myLength);
 | 
						|
              if (gg != newvalue)
 | 
						|
							{
 | 
						|
								retval = gg;
 | 
						|
								MyGrid.Data = MyGrid.Data.Substring(0, myIndex) + newvalue + MyGrid.Data.Substring(myIndex + myLength);
 | 
						|
							}
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return retval;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	public partial class ContentInfo
 | 
						|
	{
 | 
						|
		public void FixTransitionText(TransitionInfo tran)
 | 
						|
		{
 | 
						|
			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);
 | 
						|
			}
 | 
						|
			// 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);
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		public void FixTransitionText(TransitionInfo tran, TransitionLookup tranLookup)
 | 
						|
		{
 | 
						|
			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) // string newvalue)
 | 
						|
		{
 | 
						|
			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);
 | 
						|
			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)
 | 
						|
				{
 | 
						|
					System.Text.RegularExpressions.Group g = m.Groups[3];
 | 
						|
					if (g.ToString() != newvalue)
 | 
						|
					{
 | 
						|
						_Text = Text.Substring(0, offset + g.Index) + newvalue + Text.Substring(offset + g.Index + g.Length);
 | 
						|
						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);
 | 
						|
					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)
 | 
						|
						{
 | 
						|
							System.Text.RegularExpressions.Group g = mg.Groups[3];
 | 
						|
							if (g.ToString() != newvalue)
 | 
						|
							{
 | 
						|
								string prefix1 = MyGrid.Data.Substring(0,mmg.Index);
 | 
						|
								string prefix2 = mmg.Value.Substring(0,g.Index);
 | 
						|
								string suffix1 = MyGrid.Data.Substring(mmg.Index + mmg.Length);
 | 
						|
								string suffix2 = mmg.Value.Substring(g.Index + g.Length);
 | 
						|
								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;
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |