216 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			216 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Drawing;
 | |
| using System.Collections;
 | |
| using System.ComponentModel;
 | |
| using System.Windows.Forms;
 | |
| using System.Data;
 | |
| using System.Data.OleDb;
 | |
| using System.Collections.Specialized;
 | |
| using System.Collections.Generic;
 | |
| using System.Xml;
 | |
| using System.IO;
 | |
| using System.Text;
 | |
| using Volian.MSWord;
 | |
| using vlnObjectLibrary;
 | |
| using vlnServerLibrary;
 | |
| using VEPROMS.CSLA.Library;
 | |
| using Config;
 | |
| 
 | |
| namespace DataLoader
 | |
| {
 | |
| 	public partial class Loader
 | |
| 	{
 | |
| 		#region ClassProperties
 | |
| 		private int wms = 500;
 | |
| 		private static int EDDATA = 0x01;
 | |
| 		private static int PH = 0x02;
 | |
| 		private static int TOC = 0x04;
 | |
| 		private static int AUTOIND = 0x08;
 | |
| 		private static int AUTOGEN = 0x40;
 | |
| 
 | |
| 		private static int STP_MULT_CHGID = 1;
 | |
| 		private static int STP_LNK_SEQ = 2;
 | |
| 		private static int STP_OVR_TAB = 3;
 | |
| 
 | |
| 		private string ProcFileName;
 | |
| 		private string ProcNumber;
 | |
| 		private ROFST rofst;
 | |
| 		private int EditSectId;
 | |
| 		private Dictionary<string, int> dicLibDocRef;
 | |
| 
 | |
| 		// have a few variables for storing the database id record & the system record.
 | |
| 		public Connection dbConn;
 | |
| 		public Folder sysFolder;
 | |
| 		public AnnotationType CommentType;   // this holds the annotationtype of comment for future use
 | |
| 		public AnnotationType MigrationErrorType;   // this holds the annotationtype of Migration Error for future use
 | |
| 		public Document MissingDocument = null;	// make a document if there is a missing rtf file
 | |
| 												//   any missing will use this.
 | |
| 		private Content TransDummyCont;
 | |
| 		// the following two dictionaries are used to handle migration of the 
 | |
| 		// transitions...  dicTrans_ItemDone gets an entry for procnumber, sequence
 | |
| 		// number and the new item id as a step or section is created (transitions
 | |
| 		// can go to steps or sections). When a transition is encountered, check this
 | |
| 		// dictionary to see if the step or section was migrated & use the item
 | |
| 		// for the step or section if it was migrated. When a transition is migrated where 
 | |
| 		// the 'to' has not been migrated yet, check if an entry exists in dicTrans_ItemIds, 
 | |
| 		// if so, use the item listed here. If no entry exists in dicTrans_ItemIds, create 
 | |
| 		// an item table record and use the id as part of the 'to', and add an entry to 
 | |
| 		// dicTrans_ItemIds to flag that the record was already created.  As migrating sections
 | |
| 		// and steps, check  this dicTrans_ItemIds to see if the item record has already 
 | |
| 		// been create, if so use it and remove it from the dicTrans_ItemIds dictionary, 
 | |
| 		// otherwise, create a new item record.
 | |
| 		private Dictionary<string, Item> dicTrans_ItemDone;
 | |
| 		private Dictionary<string, Item> dicTrans_ItemIds;
 | |
| 		private Dictionary<string, List<Item>> dicTrans_MigrationErrors;
 | |
| 		private Dictionary<object, string> dicOldStepSequence;
 | |
| 		private Dictionary<TreeNode, TreeNode> dicNeedToLoad;
 | |
| 		private log4net.ILog log;
 | |
| 		#endregion
 | |
| 		private frmLoader frmMain;
 | |
| 		public Loader(log4net.ILog lg, frmLoader fm)
 | |
| 		{
 | |
| 			dicNeedToLoad = new Dictionary<TreeNode, TreeNode>();
 | |
| 			log = lg;
 | |
| 			frmMain = fm;
 | |
| 		}
 | |
| 		public bool LoadFolders()
 | |
| 		{
 | |
| 			try
 | |
| 			{
 | |
| 				frmMain.Status = "Make Connection";
 | |
| 				// make the initial database connection record, annotation types & top
 | |
| 				// system folder.
 | |
| 				dbConn = Connection.MakeConnection("Default", "Default", "Data Source=.\\SQLEXPRESS;Initial Catalog=VEPROMS;Integrated Security=True", 1, null, DateTime.Now, "Migration");
 | |
| 				ConfigFile cfg = new ConfigFile();
 | |
| 
 | |
| 				frmMain.Status = "Add AnnotationTypes";
 | |
| 				CommentType = AnnotationType.MakeAnnotationType("Comment", null);
 | |
| 				MigrationErrorType = AnnotationType.MakeAnnotationType("Migration Error", null);
 | |
| 
 | |
| 				AnnotationType at = AnnotationType.MakeAnnotationType("Reference", null);
 | |
| 				at = AnnotationType.MakeAnnotationType("Action Items", null);
 | |
| 
 | |
| 				frmMain.Status = "Load veproms.ini";
 | |
| 				XmlDocument d = cfg.LoadSystemIni();
 | |
| 
 | |
| 				frmMain.Status = "Load All Formats";
 | |
| 				LoadAllFormats();
 | |
| 
 | |
| 				Format baseFormat = Format.Get(1);
 | |
| 				sysFolder = Folder.MakeFolder(null, dbConn, "VEPROMS", "VEPROMS", "VEPROMS", baseFormat, d.InnerXml, DateTime.Now, "Migration");
 | |
| 
 | |
| 				// This is to test the vln Libraries
 | |
| 				List<Folder> lfldr = vlnDataPathFolders();
 | |
| 
 | |
| 				List<vlnObject> dp2 = new List<vlnObject>();
 | |
| 				foreach (Folder fldr in lfldr)
 | |
| 				{
 | |
| 					TreeNode tn = frmMain.TV.Nodes.Add(fldr.Name);
 | |
| 					tn.Tag = fldr;
 | |
| 					vlnObject vb = new vlnObject(null, "datapath", fldr.Name, fldr.Title);
 | |
| 					dp2.Add(vb);
 | |
| 					vlnServer vs = new vlnServer();
 | |
| 					frmMain.Status = "Loading " + fldr.Name;
 | |
| 					MigrateChildren(vb, vs, dbConn, fldr, tn);
 | |
| 					tn.Expand();
 | |
| 				}
 | |
| 			}
 | |
| 			catch (Exception ex)
 | |
| 			{
 | |
| 				log.ErrorFormat("Could not load data, error = {0}", ex.Message);
 | |
| 				return false;
 | |
| 			}
 | |
| 			return true;
 | |
| 		}
 | |
| 		public void ClearData()
 | |
| 		{
 | |
| 			Database.PurgeData();
 | |
| 		}
 | |
| 		public static string MakeDate(string src)
 | |
| 		{
 | |
| 			if (src.Trim() == "") return null;
 | |
| 			int[] DateOffset ={ 4, 5, 47, 6, 7, 47, 0, 1, 2, 3 };			// 47 = '/'
 | |
| 			StringBuilder datebuff = new StringBuilder(10);
 | |
| 			for (int i = 0; i < DateOffset.Length; i++)
 | |
| 			{
 | |
| 				if (DateOffset[i] < 9)
 | |
| 					datebuff.Append(src[DateOffset[i]]);
 | |
| 				else
 | |
| 					datebuff.Append(System.Convert.ToChar(DateOffset[i]));
 | |
| 			}
 | |
| 			return datebuff.ToString();
 | |
| 		}
 | |
| 		public DateTime GetDTS(string date, string time)
 | |
| 		{
 | |
| 			// Set the date/time stamp. If there is no 'date', set the date
 | |
| 			// to 1/1/2000 (this can be changed!). If there is not 'time',
 | |
| 			// set the time to 0:0:0 (midnight).
 | |
| 
 | |
| 			DateTime dts = DateTime.Now;
 | |
| 			string month = "01";
 | |
| 			string day = "01";
 | |
| 			string year = "2000";
 | |
| 			string hour = "";
 | |
| 			string minute = "";
 | |
| 			try
 | |
| 			{
 | |
| 				if (date != null && date != "")
 | |
| 				{
 | |
| 					int indx1 = date.IndexOf("/");
 | |
| 					month = date.Substring(0, indx1);
 | |
| 					int indx2 = date.IndexOf("/", indx1 + 1);
 | |
| 					day = date.Substring(indx1 + 1, indx2 - indx1 - 1);
 | |
| 					year = date.Substring(indx2 + 1, 4);
 | |
| 				}
 | |
| 				if (time == null || time == "")
 | |
| 				{
 | |
| 					hour = "0";
 | |
| 					minute = "0";
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 
 | |
| 					hour = time.Substring(0, 2);
 | |
| 					int indxc = time.IndexOfAny(":A-".ToCharArray());
 | |
| 					if (indxc == time.Length - 1)
 | |
| 						minute = time.Substring(2, 2);
 | |
| 					else
 | |
| 						minute = time.Substring(indxc + 1, time.Length - indxc - 1);
 | |
| 				}
 | |
| 				dts = new DateTime(System.Convert.ToInt32(year), System.Convert.ToInt32(month), System.Convert.ToInt32(day),
 | |
| 						System.Convert.ToInt32(hour), System.Convert.ToInt32(minute), 0);
 | |
| 			}
 | |
| 			catch (Exception ex)
 | |
| 			{
 | |
| 				log.ErrorFormat("Bad Date/Time {0}   {1}. Set to NOW.", date, time);
 | |
| 				log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException);
 | |
| 				//log.ErrorFormat(ex.StackTrace);
 | |
| 				return dts;
 | |
| 			}
 | |
| 			return dts;
 | |
| 		}
 | |
| 		
 | |
| 		public bool LoadSecurity(string VeSamPath)
 | |
| 		{
 | |
| 			Security sec = new Security(VeSamPath);
 | |
| 			return sec.Migrate();
 | |
| 		}
 | |
| 		private void WaitMS(int n)
 | |
| 		{
 | |
| 			DateTime dtw = DateTime.Now.AddMilliseconds(n);
 | |
| 			while (DateTime.Now < dtw)
 | |
| 			{
 | |
| 				Application.DoEvents();
 | |
| 			}
 | |
| 		}
 | |
| 		private void Wait(int n)
 | |
| 		{
 | |
| 			DateTime dtw = DateTime.Now.AddSeconds(n);
 | |
| 			while (DateTime.Now < dtw)
 | |
| 			{
 | |
| 				Application.DoEvents();
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 | 
