299 lines
11 KiB
C#
299 lines
11 KiB
C#
// ========================================================================
|
|
// Copyright 2006 - Volian Enterprises, Inc. All rights reserved.
|
|
// Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
|
// ------------------------------------------------------------------------
|
|
// $Workfile: $ $Revision: $
|
|
// $Author: $ $Date: $
|
|
//
|
|
// $History: $
|
|
// ========================================================================
|
|
|
|
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 VEPROMS.CSLA.Library;
|
|
|
|
namespace DataLoader
|
|
{
|
|
public partial class Loader
|
|
{
|
|
Dictionary<int, List<string>> _ContentMigrationErrors = new Dictionary<int,List<string>>();
|
|
List<string> _TransitionMigrationErrors = null;
|
|
//private void AddContentMigrationError(Content fromCon,string errorMsg)
|
|
//{
|
|
// if (!_ContentMigrationErrors.ContainsKey(fromCon.ContentID))
|
|
// _ContentMigrationErrors.Add(fromCon.ContentID,new List<string>());
|
|
// _ContentMigrationErrors[fromCon.ContentID].Add(errorMsg);
|
|
//}
|
|
|
|
private string AddTrans(OleDbConnection cn, Content fromCon, DataRow dr, DataRow dr2, string pth)
|
|
{
|
|
List<string> migrationErrors = new List<string>();
|
|
string thekey = dr["TONUMBER"].ToString() + "|" + dr["TOSEQUENCE"].ToString();
|
|
string dti = dr["DTI"].ToString().PadRight(18, ' ');
|
|
string userid = dti.Substring(13, 5).Trim();
|
|
int itype = 0;
|
|
ConfigInfo ci = null;
|
|
//string otranskey = null;
|
|
// The transition type was stored as a character & also, when read in thru
|
|
// ado.net may have been converted into unicode. So in order to get the
|
|
// correct type, first, use the TextConvert to eliminate the conversion done
|
|
// by ado.net. Then convert to a number. The 'anding of 0x80' flags that it
|
|
// is a formatted transition (i.e. this was done for byron/braidwood to
|
|
// show the transition with a page number or not). The 'anding of 0x7f' gets
|
|
// the actual number when subtracted from 0x30 (the value of the 0 character).
|
|
try
|
|
{
|
|
char typech = TextConvert.ConvertSeq(dr["TYPE"].ToString())[0];
|
|
int tmpitype = Convert.ToInt32(typech);
|
|
if ((tmpitype & 0x80) > 0)
|
|
{
|
|
ci = new ConfigInfo(null);
|
|
ci.AddItem("Transition", "Formatted", "True");
|
|
}
|
|
itype = (tmpitype&0x7F) - 0x30;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error("Error converting transition type");
|
|
log.ErrorFormat("type from database = {0}", dr["TYPE"].ToString());
|
|
log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException);
|
|
itype = -1;
|
|
}
|
|
DateTime dts = GetDTS(MakeDate(dti.Substring(0, 8).Trim()), dti.Substring(8, 5).Trim());
|
|
|
|
// if it's in the dictionary of structure elements already migrated, just use this
|
|
// structure id, or if it's in the dictionary of structure elements that have
|
|
// not been migrated but a record was created from this code, use it. Otherwise
|
|
// create a new structure record and use its id, its data will be updated later.
|
|
// a structure record.
|
|
Item toItem = null;
|
|
Item toItem2 = null;
|
|
if (itype == 6) // Outside Transition
|
|
{
|
|
ItemInfo tmp = _OutTran.GetItem(thekey);
|
|
if (tmp != null)
|
|
toItem = tmp.Get();
|
|
else
|
|
{
|
|
toItem = Item.New(null, TransDummyCont, DateTime.Now, "Migration");
|
|
migrationErrors.Add("Transition Error: Missing Data - "+_OutTran.GetDescription(thekey));
|
|
}
|
|
toItem2 = toItem;
|
|
// the 32-bit program will no longer have a special type for outside transitions - make it a
|
|
// type of 0 (procedure with optional step).
|
|
itype = 0;
|
|
}
|
|
else
|
|
{
|
|
if (dicTrans_ItemDone.ContainsKey(thekey))
|
|
{
|
|
toItem = dicTrans_ItemDone[thekey];
|
|
}
|
|
else
|
|
{
|
|
if (dicTrans_ItemIds.ContainsKey(thekey))
|
|
{
|
|
toItem = dicTrans_ItemIds[thekey];
|
|
}
|
|
else
|
|
{
|
|
// note that parent is null right now - it will be filled in later.
|
|
//toItem = Item.MakeItem(null, fromCon, DateTime.Now, "Migration");
|
|
toItem = Item.New(null, TransDummyCont, DateTime.Now, "Migration");
|
|
dicTrans_ItemIds.Add(thekey, toItem);
|
|
_TransitionMigrationErrors.Add(thekey);
|
|
}
|
|
}
|
|
|
|
// if there is data in dr2, it means that it is a range transition. Get its item
|
|
// data too.
|
|
toItem2 = toItem;
|
|
if (dr2 != null)
|
|
{
|
|
string thekey2 = dr2["TONUMBER"].ToString() + "|" + dr2["TOSEQUENCE"].ToString();
|
|
if (dicTrans_ItemDone.ContainsKey(thekey2))
|
|
{
|
|
toItem2 = dicTrans_ItemDone[thekey2];
|
|
}
|
|
else
|
|
{
|
|
if (dicTrans_ItemIds.ContainsKey(thekey2))
|
|
{
|
|
toItem2 = dicTrans_ItemIds[thekey2];
|
|
}
|
|
else
|
|
{
|
|
toItem2 = Item.MakeItem(null, TransDummyCont, DateTime.Now, "Migration");
|
|
dicTrans_ItemIds.Add(thekey2, toItem2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (userid == null || userid == "") userid = "Migration";
|
|
Transition tr = null;
|
|
try
|
|
{
|
|
tr = Transition.New(fromCon, toItem, toItem2, itype, ci!=null?ci.ToString():null, dts, userid);
|
|
//if (otranskey != null)
|
|
// tr.MyZTransition.Oldto = otranskey; // info to finish outside transition processing later
|
|
//else
|
|
tr.MyZTransition.Oldto = dr["OLDTO"].ToString();
|
|
if (!tr.IsSavable) ErrorRpt.ErrorReport(tr);
|
|
tr.Save();
|
|
if (migrationErrors.Count > 0)
|
|
_ContentMigrationErrors.Add(fromCon.ContentID, migrationErrors);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error("Error addition transition record");
|
|
log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException);
|
|
}
|
|
string results = null;
|
|
if (toItem.ItemID == toItem2.ItemID)
|
|
results = string.Format(@"\v <START]\v0 (Resolved Transition Text)\v #Link:Transition:{0} {1} {2}\v0 \v [END>\v0 ", tr.TranType, tr.TransitionID, tr.ToID);
|
|
else
|
|
results = string.Format(@"\v <START]\v0 (Resolved Transition Text)\v #Link:TransitionRange:{0} {1} {2} {3}\v0 \v [END>\v0 ", tr.TranType, tr.TransitionID, tr.ToID, tr.RangeID);
|
|
return results;
|
|
}
|
|
|
|
private string MigrateTrans(OleDbConnection cn, string textm, string seqcvt, Content content, string pth)
|
|
{
|
|
// TODO: BYRON DATA WILL GENERATE A TRANSITION ERROR WHEN IT IS USED IN PROMS 2010
|
|
StringBuilder trtxt = new StringBuilder();
|
|
int instance = 0;
|
|
int beg = 0;
|
|
DataTable dt = null;
|
|
DataSet ds = null;
|
|
OleDbDataAdapter da = null;
|
|
|
|
char[] chrtrn = { '\x252C', '\x2566' };
|
|
int tok = textm.IndexOfAny(chrtrn);
|
|
if (tok > -1)
|
|
{
|
|
string cmd = "SELECT * FROM [tran] WHERE [FROMNUMBER]='" + ProcNumber.Replace("'", "''") + "' AND [FROMSEQUEN] ='" + seqcvt + "' ORDER BY [FROMINSTAN]";
|
|
da = new OleDbDataAdapter(cmd, cn);
|
|
// get transition records for this step.
|
|
ds = new DataSet();
|
|
try
|
|
{
|
|
da.Fill(ds);
|
|
dt = ds.Tables[0];
|
|
dt.CaseSensitive = true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
log.Error("Error getting transitions");
|
|
log.ErrorFormat("from number = {0} oldstepsequence = {1}", ProcNumber, seqcvt);
|
|
log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException);
|
|
return textm;
|
|
}
|
|
}
|
|
while (tok > -1)
|
|
{
|
|
// found a transition token, add the token and transition id into the string and
|
|
// add an transition record for it. Later there may be text added.
|
|
trtxt.Append(textm.Substring(beg, tok - beg));
|
|
// we have too many tokens and not enough usage records - report an error...
|
|
if (instance >= dt.Rows.Count)
|
|
{
|
|
log.ErrorFormat("Error - ran out of transition records for step, check data ");
|
|
log.ErrorFormat("from number = {0} oldstepsequence = {1}", ProcNumber, seqcvt);
|
|
}
|
|
else
|
|
{
|
|
DataRow dr = dt.Rows[instance];
|
|
|
|
// if type is 2 or 3, this is a range transition, need to get the next
|
|
// record too
|
|
bool trange = false;
|
|
if (dr["Type"].ToString() == "2" || dr["Type"].ToString() == "3")
|
|
trange = true;
|
|
|
|
string rectxt = null;
|
|
if (trange)
|
|
{
|
|
instance++;
|
|
DataRow dr2 = dt.Rows[instance];
|
|
rectxt = AddTrans(cn, content, dr, dr2, pth);
|
|
}
|
|
else
|
|
rectxt = AddTrans(cn, content, dr, null, pth);
|
|
//trtxt.Append(textm[tok]);
|
|
trtxt.Append(rectxt);
|
|
}
|
|
instance++;
|
|
beg = tok + 1;
|
|
if (beg > textm.Length)
|
|
{
|
|
tok = -1;
|
|
da.Dispose();
|
|
}
|
|
else
|
|
tok = textm.IndexOfAny(chrtrn, beg);
|
|
}
|
|
if (beg < textm.Length - 1)
|
|
trtxt.Append(textm.Substring(beg, textm.Length - beg));
|
|
if (dt.Rows.Count > instance + 1)
|
|
{
|
|
log.ErrorFormat("Error - extra transition records for step, check data ");
|
|
log.ErrorFormat("from number = {0} oldstepsequence = {1}", ProcNumber, seqcvt);
|
|
}
|
|
return trtxt.ToString();
|
|
}
|
|
private void ShowMissingTransitions()
|
|
{
|
|
if (dicTrans_ItemIds.Keys.Count > 0)
|
|
log.Warn("Missing Transitions from Dictionary");
|
|
foreach (string s in dicTrans_ItemIds.Keys)
|
|
{
|
|
log.WarnFormat("{0} - {1}", s, dicTrans_ItemIds[s]);
|
|
//AddItemAnnotation(dicTrans_ItemIds[s]);
|
|
}
|
|
foreach (string s in dicTrans_MigrationErrors.Keys)
|
|
{
|
|
foreach (Item itm in dicTrans_MigrationErrors[s])
|
|
{
|
|
ItemAnnotation ia = itm.ItemAnnotations.Add(MigrationErrorType);
|
|
ia.SearchText = "Transition Error: Destination Missing - " + s;
|
|
ia.UserID = "Migration";
|
|
itm.Save();
|
|
}
|
|
}
|
|
|
|
if (TransDummyCont.ContentItemCount > 0)
|
|
log.Warn("Bad transitions to 'dummy' content");
|
|
foreach (ContentItem itm in TransDummyCont.ContentItems)
|
|
{
|
|
log.WarnFormat("ItemID = {0}", itm.ItemID);
|
|
//AddItemAnnotation(itm.MyItem);
|
|
}
|
|
|
|
log.Info("End of Missing Transitions");
|
|
}
|
|
|
|
private void AddItemAnnotation(Item itm)
|
|
{
|
|
foreach (ItemTransition_ToID tmp in itm.ItemTransitions_ToID)
|
|
{
|
|
foreach (ContentItem ci in tmp.MyContent.ContentItems)
|
|
{
|
|
ItemAnnotation ia = ci.MyItem.ItemAnnotations.Add(MigrationErrorType);
|
|
ia.SearchText = "Transition Error: Missing end point";
|
|
ia.UserID = "Migration";
|
|
ci.MyItem.Save();
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
} |