2009-07-24 11:45:48 +00:00

218 lines
7.1 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 ROFstInfo rofstinfo;
private RODb rodb;
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(string vepromspath)
{
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);
at = AnnotationType.MakeAnnotationType("Verification Required", null);
frmMain.Status = "Load veproms.ini";
XmlDocument d = cfg.LoadSystemIni(vepromspath);
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, string VePromsPath)
{
Security sec = new Security(VeSamPath, VePromsPath);
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();
}
}
}
}