302 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			302 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Data;
 | 
						|
using System.Drawing;
 | 
						|
using System.Text;
 | 
						|
using System.Windows.Forms;
 | 
						|
using VEPROMS.CSLA.Library;
 | 
						|
 | 
						|
namespace TestFullLoad
 | 
						|
{
 | 
						|
	public partial class frmLoadAtOnce : Form
 | 
						|
	{
 | 
						|
		public frmLoadAtOnce()
 | 
						|
		{
 | 
						|
			InitializeComponent();
 | 
						|
		}
 | 
						|
		private ItemInfoList _Procedures;
 | 
						|
		private bool _IsMultiUnit = false;
 | 
						|
		private void frmLoadAtOnce_Load(object sender, EventArgs e)
 | 
						|
		{
 | 
						|
			LoadSettings();
 | 
						|
			// Set these events after loading settings - otherwise the settings will be updated to the defaults
 | 
						|
			Move+=new EventHandler(frmLoadAtOnce_Move);
 | 
						|
			Resize+=new EventHandler(frmLoadAtOnce_Resize);
 | 
						|
			try
 | 
						|
			{
 | 
						|
				DocVersionInfo docVersion = GetDocVersionWithContent();
 | 
						|
				if (docVersion.MultiUnitCount > 1)
 | 
						|
				{
 | 
						|
					foreach (string s in docVersion.UnitNames)
 | 
						|
						cbUnits.Items.Add(s.Trim());
 | 
						|
					cbUnits.SelectedIndex = 0;
 | 
						|
					cbUnits.Enabled = true;
 | 
						|
					_IsMultiUnit = true;
 | 
						|
				}
 | 
						|
				_Procedures = docVersion.Procedures;
 | 
						|
				lbProcedures.DataSource = _Procedures;
 | 
						|
				lbProcedures.SelectedIndex = -1;
 | 
						|
				lbProcedures.SelectedValueChanged+=new EventHandler(lbProcedures_SelectedValueChanged);
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				Console.WriteLine("ex - {0}", ex);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		private void LoadSettings()
 | 
						|
		{
 | 
						|
			if (GetPropertyString("Location") != "")
 | 
						|
				this.Location = Properties.Settings.Default.Location;
 | 
						|
			if ((Properties.Settings.Default["Size"] ?? "") != "")
 | 
						|
				this.Size = Properties.Settings.Default.Size;
 | 
						|
			this.WindowState = Properties.Settings.Default.WindowState;
 | 
						|
			Database.ConnectionName = "VEPROMS_BODINE_DEBUG";
 | 
						|
			if (Properties.Settings.Default.LastDatabase != string.Empty)
 | 
						|
			{
 | 
						|
				if (MessageBox.Show(string.Format("use database {0}?", Properties.Settings.Default.LastDatabase), "use database", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
 | 
						|
					Database.SelectedDatabase = Properties.Settings.Default.LastDatabase;
 | 
						|
			}
 | 
						|
			Properties.Settings.Default.LastDatabase = Database.SelectedDatabase;
 | 
						|
			Properties.Settings.Default.Save();
 | 
						|
		}
 | 
						|
		private string GetPropertyString(string propertyName)
 | 
						|
		{
 | 
						|
			object prop = Properties.Settings.Default[propertyName];
 | 
						|
			return prop == null ? "" : prop.ToString();
 | 
						|
		}
 | 
						|
		private DocVersionInfo GetDocVersionWithContent()
 | 
						|
		{
 | 
						|
			DocVersionInfoList dvList = DocVersionInfoList.Get();
 | 
						|
			foreach (DocVersionInfo docVersion in dvList)
 | 
						|
				if (docVersion.Procedures != null)
 | 
						|
					if (docVersion.Procedures[0].ItemID != 0)
 | 
						|
						return docVersion;
 | 
						|
			return null;
 | 
						|
		}
 | 
						|
		private int WalkThroughChildren(ItemInfo itemInfo)
 | 
						|
		{
 | 
						|
			Console.WriteLine(itemInfo.ItemID);
 | 
						|
			if (itemInfo.ItemID == 284)
 | 
						|
				Console.WriteLine("stop or spot");
 | 
						|
			int retval = 0;
 | 
						|
			// Look at siblings and look at children
 | 
						|
			if (itemInfo != null)
 | 
						|
			{
 | 
						|
				if (itemInfo.MyContent.ContentPartCount > 0)
 | 
						|
				{
 | 
						|
					foreach (PartInfo pi in itemInfo.MyContent.ContentParts)
 | 
						|
					{
 | 
						|
						foreach (ItemInfo ii in pi.MyItems)
 | 
						|
						{
 | 
						|
							//retval += WalkThroughSiblings(ii);
 | 
						|
							retval++;
 | 
						|
							retval += WalkThroughChildren(ii);
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return retval;
 | 
						|
		}
 | 
						|
		private string ChildList(ItemInfo itm, int level)
 | 
						|
		{
 | 
						|
			StringBuilder retval = new StringBuilder();
 | 
						|
			// Look at siblings and look at children
 | 
						|
			//if (itm.MyContent.ContentPartCount > 0 && itm.ItemID != 4078 && itm.ItemID != 4192 && itm.ItemID != 4194 &&
 | 
						|
			//  itm.ItemID != 4330 && itm.ItemID != 4452)
 | 
						|
				if (itm.MyContent.ContentPartCount > 0 )
 | 
						|
				{
 | 
						|
				//retval.Append(string.Format("\r\n{0}(", "".PadLeft(level, '\t')));
 | 
						|
					retval.Append(ShowItem(itm));
 | 
						|
				foreach (PartInfo pi in itm.MyContent.ContentParts)
 | 
						|
				{
 | 
						|
					retval.Append(string.Format("\r\n{0}({1} ", "".PadLeft(level + 1, '\t'), Enum.GetName(typeof(E_FromTypes), pi.FromType)));
 | 
						|
					foreach (ItemInfo ii in pi.MyItems)
 | 
						|
					{
 | 
						|
						//retval += WalkThroughSiblings(ii);
 | 
						|
						if (retval.ToString().EndsWith(")"))
 | 
						|
							retval.Append(string.Format("\r\n{0}", "".PadLeft(level + 2, '\t')));
 | 
						|
						retval.Append(ChildList(ii, level + 1));
 | 
						|
					}
 | 
						|
					retval.Append(string.Format(")", "".PadLeft(level, '\t')));
 | 
						|
				}
 | 
						|
				//retval.Append(string.Format("\r\n{0})", "".PadLeft(level, '\t')));
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				retval.Append(ShowItem(itm));
 | 
						|
			}
 | 
						|
			return retval.ToString();
 | 
						|
		}
 | 
						|
		private string ShowItem(ItemInfo itm)
 | 
						|
		{
 | 
						|
			return string.Format("{0}{1} ", itm.ItemID, ActiveSection(itm));
 | 
						|
			//return string.Format("{0}{1} ", itm.ItemID, ActiveParent(itm));
 | 
						|
		}
 | 
						|
		private string ActiveParent(ItemInfo itm)
 | 
						|
		{
 | 
						|
			if (itm == null || itm.MyActiveParent == null) return string.Empty;
 | 
						|
			return string.Format("({0})", itm.MyActiveParent);
 | 
						|
		}
 | 
						|
		private string ActiveSection(ItemInfo itm)
 | 
						|
		{
 | 
						|
			if (itm == null  || itm.MyActiveSection == null) return "";
 | 
						|
			return string.Format("({0})", itm.MyActiveSection);
 | 
						|
		}
 | 
						|
		//private int WalkThroughSiblings(ItemInfo itemInfo)
 | 
						|
		//{
 | 
						|
		//  int retval = 0;
 | 
						|
		//  if (itemInfo.NextItemCount > 0)
 | 
						|
		//  {
 | 
						|
		//    foreach (ItemInfo itm in itemInfo.NextItems)
 | 
						|
		//    {
 | 
						|
		//      retval++;
 | 
						|
		//      retval += WalkThroughChildren(itm);
 | 
						|
		//    }
 | 
						|
		//  }
 | 
						|
		//  return retval;
 | 
						|
		//}
 | 
						|
		private void lbProcedures_SelectedValueChanged(object sender, EventArgs e)
 | 
						|
		{
 | 
						|
			ItemInfo itemInfo = lbProcedures.SelectedValue as ItemInfo;
 | 
						|
			if (itemInfo != null)
 | 
						|
			{
 | 
						|
				LoadEntireProcedure(itemInfo.ItemID);
 | 
						|
				pg.SelectedObject = MyItemInfo;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		private ItemInfo _MyItemInfo;
 | 
						|
		public ItemInfo MyItemInfo
 | 
						|
		{
 | 
						|
			get { return _MyItemInfo; }
 | 
						|
			set { _MyItemInfo = value; }
 | 
						|
		}
 | 
						|
		private int LoadEntireProcedure(int itemID)
 | 
						|
		{
 | 
						|
			DateTime dtStart = DateTime.Now;// Record the start time 
 | 
						|
			MyItemInfo = GetItem(itemID);// Load an item
 | 
						|
			DateTime dtLoad = DateTime.Now;// Record the time to this point
 | 
						|
			int cnt = WalkThroughChildren(MyItemInfo);// Scan the item counting it's nodes
 | 
						|
			DateTime dtEnd = DateTime.Now; // Record the end time
 | 
						|
			RecordResults(dtStart,dtLoad,dtEnd,cnt);// Place results on Status Line
 | 
						|
			//pg.SelectedObject = itemInfo; // Set the propertygrid to point to the loaded object
 | 
						|
			return cnt;
 | 
						|
		}
 | 
						|
		private ItemInfo GetItem(int itemID)
 | 
						|
		{
 | 
						|
			switch (cbType.Text as string)
 | 
						|
			{
 | 
						|
				case("One at a time")://
 | 
						|
					return ItemInfo.Get(itemID);
 | 
						|
				case ("CSLA - All at Once - Spin Through Children")://
 | 
						|
					return ItemInfo.GetItemAndChildren2(itemID);
 | 
						|
				case ("SQL - All at Once - Query")://
 | 
						|
					if (_IsMultiUnit)
 | 
						|
						return ProcedureInfo.GetItemAndChildrenByUnit(itemID, 0, cbUnits.SelectedIndex + 1);
 | 
						|
					else
 | 
						|
						return ItemInfo.GetItemAndChildren(itemID, 0);
 | 
						|
				default:
 | 
						|
					return null;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		private TimeSpan _TsLoad;
 | 
						|
		private TimeSpan _TsWalk;
 | 
						|
		private TimeSpan _TsTotal;
 | 
						|
		private int _Count;
 | 
						|
		private void ResetResults()
 | 
						|
		{
 | 
						|
			_TsLoad = _TsWalk = _TsTotal = new TimeSpan(0);
 | 
						|
			_Count = 0;
 | 
						|
		}
 | 
						|
		private void RecordResults(DateTime dtStart, DateTime dtLoad, DateTime dtEnd, int count)
 | 
						|
		{
 | 
						|
			TimeSpan tsLoad = dtLoad - dtStart;
 | 
						|
			TimeSpan tsWalk = dtEnd - dtLoad;
 | 
						|
			TimeSpan tsTotal = dtEnd - dtStart;
 | 
						|
			_TsLoad += tsLoad;
 | 
						|
			_TsWalk += tsWalk;
 | 
						|
			_TsTotal += tsTotal;
 | 
						|
			_Count += count;
 | 
						|
			tsslStatus.Text = string.Format("Load {0}, Check {1}, Total {2}, Items {3}",
 | 
						|
				tsLoad.TotalSeconds, tsWalk.TotalSeconds, tsTotal.TotalSeconds, count);
 | 
						|
			//Application.DoEvents();
 | 
						|
			//Console.WriteLine("{0}\t{1}\t{2}\t{3}", tsLoad.TotalSeconds,tsWalk.TotalSeconds,tsTotal.TotalSeconds, cnt);
 | 
						|
		}
 | 
						|
		private void DisplaySummary()
 | 
						|
		{
 | 
						|
			tsslStatus.Text = string.Format("Load {0}, Check {1}, Total {2}, Items {3}",
 | 
						|
				_TsLoad.TotalSeconds, _TsWalk.TotalSeconds, _TsTotal.TotalSeconds, _Count);
 | 
						|
			Console.WriteLine("{0},{1},{2},{3}",
 | 
						|
				_TsLoad.TotalSeconds, _TsWalk.TotalSeconds, _TsTotal.TotalSeconds, _Count);
 | 
						|
		}
 | 
						|
		private string _MyTitle;
 | 
						|
		public string MyTitle
 | 
						|
		{
 | 
						|
			get { return _MyTitle; }
 | 
						|
			set 
 | 
						|
			{
 | 
						|
				if (_MyTitle == value) return;
 | 
						|
				_MyTitle = value;
 | 
						|
				Console.WriteLine(MyTitle);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		private void btnRunAll_Click(object sender, EventArgs e)
 | 
						|
		{
 | 
						|
			Cursor tmp = this.Cursor;
 | 
						|
			this.Cursor = Cursors.WaitCursor;
 | 
						|
			//DateTime dtStart = DateTime.Now;
 | 
						|
			MyTitle = cbType.Text;
 | 
						|
			ResetResults();
 | 
						|
			int cnt = 0;
 | 
						|
			foreach(ItemInfo itemInfo in _Procedures)
 | 
						|
				cnt += LoadEntireProcedure(itemInfo.ItemID);
 | 
						|
			//DateTime dtEnd = DateTime.Now;
 | 
						|
			//tsslStatus.Text = string.Format("Total {0} Count {1}",
 | 
						|
			//	TimeSpan.FromTicks(dtEnd.Ticks - dtStart.Ticks).TotalSeconds,cnt);
 | 
						|
			DisplaySummary();
 | 
						|
			this.Cursor = tmp;
 | 
						|
		}
 | 
						|
		private void btnRunOne_Click(object sender, EventArgs e)
 | 
						|
		{
 | 
						|
			// Run the Gets for 
 | 
						|
			int itemID = int.Parse(tbItemID.Text);
 | 
						|
			//for(int i=1;i<5;i++)
 | 
						|
			//  ShowItem(ItemInfo.GetItemAndChildren(itemID, 0), string.Format("XX All at Once Query({0})",i));
 | 
						|
			//ShowItem(ItemInfo.Get(itemID),"One at a time");
 | 
						|
			//ShowItem(ItemInfo.GetItemAndChildren2(itemID),"All at Once");
 | 
						|
			ShowItem(ItemInfo.GetItemAndChildren(itemID, 0), "XX All at Once Query");
 | 
						|
		}
 | 
						|
		private void ShowItem(ItemInfo itemInfo, string title)
 | 
						|
		{
 | 
						|
			Console.WriteLine("{0}\r\n{1}", title, ChildList(itemInfo, 0));
 | 
						|
		}
 | 
						|
		private void frmLoadAtOnce_FormClosing(object sender, FormClosingEventArgs e)
 | 
						|
		{
 | 
						|
			SaveSettings();
 | 
						|
		}
 | 
						|
		private void SaveSettings()
 | 
						|
		{
 | 
						|
			Properties.Settings.Default.LastDatabase = Database.SelectedDatabase;
 | 
						|
			Properties.Settings.Default.WindowState = this.WindowState;
 | 
						|
			Properties.Settings.Default.Save();
 | 
						|
		}
 | 
						|
		private void frmLoadAtOnce_Move(object sender, EventArgs e)
 | 
						|
		{
 | 
						|
			if (this.WindowState == FormWindowState.Normal)
 | 
						|
			{
 | 
						|
				Properties.Settings.Default.Location = this.Location;
 | 
						|
				Properties.Settings.Default.Size = this.Size;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		private void frmLoadAtOnce_Resize(object sender, EventArgs e)
 | 
						|
		{
 | 
						|
			if (this.WindowState == FormWindowState.Normal)
 | 
						|
			{
 | 
						|
				Properties.Settings.Default.Location = this.Location;
 | 
						|
				Properties.Settings.Default.Size = this.Size;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
	}
 | 
						|
} |