This commit is contained in:
153
PROMS/DataLoader/LibDoc.cs
Normal file
153
PROMS/DataLoader/LibDoc.cs
Normal file
@@ -0,0 +1,153 @@
|
||||
// ========================================================================
|
||||
// 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 Volian.MSWord;
|
||||
using vlnObjectLibrary;
|
||||
using vlnServerLibrary;
|
||||
using Org.Mentalis.Files;
|
||||
|
||||
namespace DataLoader
|
||||
{
|
||||
public partial class frmLoader : Form
|
||||
{
|
||||
private void UpdateLabelsLibDocs(int incLib, int incUsages)
|
||||
{
|
||||
if (incLib == 0 && incUsages == 0)//Reset
|
||||
{
|
||||
lblTime.Tag = DateTime.Now;
|
||||
pbProc.Value = 0;
|
||||
pbSect.Value = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
pbProc.Value += incLib;
|
||||
pbSect.Value += incUsages;
|
||||
}
|
||||
lblProc.Text = string.Format("{0} Lib Docs", pbProc.Value);
|
||||
lblSection.Text = string.Format("{0} Usages", pbSect.Value);
|
||||
lblStep.Text = "";
|
||||
TimeSpan ts = new TimeSpan(DateTime.Now.Ticks - ((DateTime)lblTime.Tag).Ticks);
|
||||
lblTime.Text = string.Format("{0:D2}:{1:D2}:{2:D2} Elapsed", ts.Hours, ts.Minutes, ts.Seconds);
|
||||
Application.DoEvents();
|
||||
}
|
||||
private void MigrateLibDocs(OleDbConnection cn, string pth)
|
||||
{
|
||||
// Get all of the library documents - the first list has the entire list of files
|
||||
// found within the rtffiles folder, the second list contains usages from the 'tran'
|
||||
// file. During processing for procedures/sections occurs, the used library documents
|
||||
// will be migrated. After that, any remaining library documents will be added to
|
||||
// the section table without a reference from the structuretbl.
|
||||
Dictionary<string, int> dicLibDocSect = new Dictionary<string, int>();
|
||||
UpdateLabelsLibDocs(0, 0);
|
||||
if (Directory.Exists(pth + "\\rtffiles"))
|
||||
{
|
||||
DirectoryInfo di = new DirectoryInfo(pth + "\\RTFFILES");
|
||||
FileInfo[] fis = di.GetFiles("DOC_*.LIB");
|
||||
pbProc.Maximum = fis.Length;
|
||||
foreach (FileInfo fi in fis)
|
||||
{
|
||||
UpdateLabelsLibDocs(1, 0);
|
||||
dicLibDocSect[fi.Name.Substring(0, 8).ToUpper()] = MigrateLibDoc(fi);
|
||||
}
|
||||
}
|
||||
dicLibDocRef = new Dictionary<string, int>();
|
||||
OleDbDataAdapter da_doc = new OleDbDataAdapter("select [FROMNUMBER], [FROMSEQUEN], [TONUMBER] from [tran] where [TONUMBER] LIKE 'doc_%' or [TONUMBER] like 'DOC_%'", cn);
|
||||
DataSet ds_doc = new DataSet();
|
||||
da_doc.Fill(ds_doc);
|
||||
pbSect.Maximum = ds_doc.Tables[0].Rows.Count;
|
||||
foreach (DataRow dr_doc in ds_doc.Tables[0].Rows)
|
||||
{
|
||||
UpdateLabelsLibDocs(0, 1);
|
||||
string key = dr_doc["FROMNUMBER"].ToString().PadRight(20) + dr_doc["FROMSEQUEN"].ToString().PadRight(10);
|
||||
if (!dicLibDocSect.ContainsKey(dr_doc["TONUMBER"].ToString().ToUpper()))
|
||||
log.ErrorFormat("Error setting library document references: {0}", dr_doc["TONUMBER"].ToString().ToUpper());
|
||||
else
|
||||
dicLibDocRef[key] = dicLibDocSect[dr_doc["TONUMBER"].ToString().ToUpper()];
|
||||
}
|
||||
da_doc.Dispose();
|
||||
}
|
||||
private int MigrateLibDoc(FileInfo fi)
|
||||
{
|
||||
ConfigInfo ci = new ConfigInfo(null);
|
||||
string title = null; // for docname, remove the '.lib', i.e. substring(0,8)
|
||||
DateTime dts = DateTime.Now;
|
||||
string tmpRtfFileName = GetLibDocData(fi, ci, ref title);
|
||||
int Docid = SaveWordDoc(tmpRtfFileName, title, ci);
|
||||
File.Delete(tmpRtfFileName);
|
||||
return Docid;
|
||||
}
|
||||
private string LoadFromLib(BinaryReader br)
|
||||
{
|
||||
int nchar = br.ReadInt16();
|
||||
if (nchar > 0)
|
||||
{
|
||||
string tmp = new string(br.ReadChars(nchar));
|
||||
return tmp.Substring(0, tmp.Length - 1); // remove null at end.
|
||||
}
|
||||
return null;
|
||||
}
|
||||
private string GetLibDocData(FileInfo fi, ConfigInfo ci, ref string title)
|
||||
{
|
||||
title = null;
|
||||
// get the number, title, etc from the file.
|
||||
// use the path to open the file & read the title & comment
|
||||
DateTime dts = fi.LastWriteTime;
|
||||
FileStream fs = fi.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
|
||||
BinaryReader br = new BinaryReader(fs, System.Text.ASCIIEncoding.ASCII);
|
||||
string tmpRtfFileName = Path.GetTempFileName();
|
||||
FileStream tmpfile = new FileStream(tmpRtfFileName, FileMode.Create);
|
||||
BinaryWriter bw = new BinaryWriter(tmpfile, System.Text.Encoding.ASCII);
|
||||
int cntPage = br.ReadInt16();
|
||||
if (cntPage != -1)
|
||||
{ // Not End of File
|
||||
ci.AddItem("Section", "NumPages", cntPage.ToString());
|
||||
string ldtitle = LoadFromLib(br);
|
||||
if (ldtitle != null && ldtitle != "") title = ldtitle;
|
||||
ci.AddItem("LibDoc", "Comment", LoadFromLib(br));
|
||||
long l = br.BaseStream.Length - br.BaseStream.Position;
|
||||
byte[] buf = new byte[l];
|
||||
br.Read(buf, 0, (int)l);
|
||||
bw.Write(buf, 0, (int)l);
|
||||
// TODO: Check with KBR to see if she needed read/write this way
|
||||
// I can't remember.
|
||||
//byte ac;
|
||||
//bool done = false;
|
||||
//while (done == false)
|
||||
//{
|
||||
// if (br.PeekChar() > 0)
|
||||
// {
|
||||
// ac = br.ReadByte();
|
||||
// bw.Write(ac);
|
||||
// }
|
||||
// else
|
||||
// done = true;
|
||||
//}
|
||||
br.Close();
|
||||
fs.Close();
|
||||
bw.Close();
|
||||
tmpfile.Close();
|
||||
WaitMS(wms); // give it some time to close the tempfile before adding section
|
||||
File.SetLastWriteTime(tmpRtfFileName, dts);
|
||||
}
|
||||
return tmpRtfFileName;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user