This commit is contained in:
Kathy Ruffing 2006-11-14 15:58:03 +00:00
parent 4caceedd65
commit ad3f77a360
30 changed files with 5182 additions and 0 deletions

View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<param name="File" value="Log4Net.txt" />
<param name="AppendToFile" value="false" />
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="[Header]\r\n" />
<param name="Footer" value="[Footer]\r\n" />
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="--> %date [%thread] %-5level %logger (%property{log4net:HostName}) [%ndc] - %message%newline" />
</layout>
</appender>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<threshold value="WARN" />
<mapping>
<level value="DEBUG" />
<eventLogEntryType value="Information" />
</mapping>
<mapping>
<level value="INFO" />
<eventLogEntryType value="Information" />
</mapping>
<mapping>
<level value="WARN" />
<eventLogEntryType value="Warning" />
</mapping>
<mapping>
<level value="ERROR" />
<eventLogEntryType value="Error" />
</mapping>
<mapping>
<level value="FATAL" />
<eventLogEntryType value="Error" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="---> %d [%t] %-5p %c - %m%n" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="EventLogAppender" />
</root>
<logger name="Volian.CSLA.Library">
<level value="WARN" />
</logger>
</log4net>
<appSettings>
<add key="CslaAuthentication" value="Windows" />
<!-- Active Connection -->
<!-- Inactive Connections
-->
</appSettings>
<connectionStrings>
<!--<add name="VEPROMS"
connectionString="Data Source=rhmdesktop\SQLEXPRESS;AttachDbFilename=&quot;C:\VS2005Projects\VEPROMS_USERS\VEPROMS_Users.mdf&quot;;Integrated Security=True;User Instance=True"
providerName="System.Data.SqlClient" />-->
<add name="VEPROMS"
connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=VEPROMS;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,79 @@
// ========================================================================
// 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.Collections.Generic;
using System.Text;
using System.Xml;
namespace DataLoader
{
class ConfigInfo
{
private XmlDocument xmldoc;
public ConfigInfo(string xml)
{
xmldoc = new XmlDocument();
if (xml == null)
xmldoc.LoadXml("<config/>");
else
xmldoc.LoadXml(xml);
}
public ConfigInfo(string xml, string ename, string aname, string avalue)
{
xmldoc = new XmlDocument();
if (xml == null)
xmldoc.LoadXml("<config/>");
else
xmldoc.LoadXml(xml);
AddItem(ename, aname.Replace(' ','_'), avalue);
}
public bool AddItem(string ename, string aname, string avalue)
{
if (aname != null && aname != "")
{
//if (xmldoc == null)
//{
// xmldoc = new XmlDocument();
// xmldoc.AppendChild(xmldoc.CreateElement("ConfigInfo"));
//}
// see if ename element exists, use it to add attributes,
// otherwise, create the element.
XmlNode nxml = null;
XmlNodeList xl = xmldoc.DocumentElement.SelectNodes(string.Format("//{0}", ename));
switch (xl.Count)
{
case 0: // No nodes found
nxml = xmldoc.DocumentElement.AppendChild(xmldoc.CreateElement(ename));
break;
default: // Found the node
nxml = xl[0];
if (nxml.GetType() != typeof(XmlElement))
{
frmLoader.log.ErrorFormat("Invalid xml element type when migrating config data - element = {0}, name = {1} , value = {2}", ename, aname, avalue);
return false;
}
break;
}
XmlAttribute xa = nxml.Attributes.Append(xmldoc.CreateAttribute(aname.Replace(' ', '_')));
xa.Value = avalue;
return true;
}
return false;
}
public override string ToString()
{
if (xmldoc != null) return xmldoc.InnerXml;
else return null;
}
}
}

110
PROMS/DataLoader/CurSet.cs Normal file
View File

@ -0,0 +1,110 @@
// ========================================================================
// 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.IO;
using System.Collections;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Serialization;
using Volian.CSLA.Library;
namespace Utils
{
/// <summary>
/// Summary description for CurSet.
/// </summary>
public class CurSet
{
private int NUMCBTEXTYPE = 5; // number of changebar text types.
public string PathName;
public CurSet(string pname)
{
PathName = pname;
}
private string ReadTheString(BinaryReader bw, int maxlen)
{
StringBuilder retStr = new StringBuilder(maxlen+1);
// read a series of characters until a null is found.
char ac;
bool done = false;
while(done==false)
{
ac = bw.ReadChar();
if (ac=='\0')
done=true;
else
retStr.Append(ac);
}
return retStr.ToString();
}
public FolderConfig Convert(FolderConfig cfg)
{
BinaryReader br;
ArrayList DefaultUserCBMsg = new ArrayList(2);
FileStream fs;
FileInfo fi = new FileInfo(PathName);
try
{
fs = fi.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite );
br = new BinaryReader(fs,System.Text.ASCIIEncoding.ASCII);
}
catch (Exception e)
{
DataLoader.frmLoader.log.ErrorFormat("Error migrating Curset.dat, error = {0}", e.Message);
return cfg;
}
try
{
sbyte tmpsbyte;
string tmpstring;
tmpsbyte=br.ReadSByte(); // DefaultDestination not used
// the next byte has three settings embedded in it, the type of change
// bar (Print_ChangeBar), the change bar location and its text.
tmpsbyte= br.ReadSByte();
cfg.Print_ChangeBar = (FolderConfig.PrintChangeBar)((int)tmpsbyte > 2 ? 3 : (int)tmpsbyte);
cfg.Print_ChangeBarLoc = (FolderConfig.PrintChangeBarLoc)((tmpsbyte-3)/NUMCBTEXTYPE);
int ts = (tmpsbyte-3)%NUMCBTEXTYPE;
cfg.Print_ChangeBarText = (FolderConfig.PrintChangeBarText)((tmpsbyte-3)%NUMCBTEXTYPE);
cfg.Print_NumCopies=br.ReadSByte();
cfg.Print_Pagination=(FolderConfig.PrintPagination) br.ReadSByte();
tmpstring = ReadTheString(br,4); // DefaultPrinter not used
cfg.Format_Plant = ReadTheString(br,10);
tmpstring = ReadTheString(br, 128); // DefaultDestFName not used
tmpsbyte = br.ReadSByte(); // DefaultPlotterType not used
tmpsbyte = br.ReadSByte(); // DefaultPlotterPort not used
tmpsbyte = br.ReadSByte(); // DefaultCIEType not used.
for (int i=0;i<8;i++) // DefPenColors[8] not used
tmpsbyte = br.ReadSByte();
cfg.Print_Watermark = (FolderConfig.PrintWatermark)br.ReadSByte();
cfg.Print_UserCBMess1 = ReadTheString(br, 10);
cfg.Print_UserCBMess2 = ReadTheString(br, 10);
tmpsbyte = br.ReadSByte(); // DontPrintStatusTree not used
cfg.Print_UserFormat = ReadTheString(br, 10);
tmpsbyte = br.ReadSByte();
cfg.Print_DisableDuplex = tmpsbyte == 0 ? false : true;
br.Close();
}
catch(Exception e)
{
if(br!=null) br.Close();
DataLoader.frmLoader.log.ErrorFormat("Error migrating Curset.dat, error = {0}", e.Message);
}
fs.Close();
return cfg;
}
}
}

View File

@ -0,0 +1,166 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{8E239A2B-B38C-4CD5-BA0D-A41A88BD2AEE}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>DataLoader</RootNamespace>
<AssemblyName>DataLoader</AssemblyName>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\..\..\veproms\bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Csla, Version=2.0.3.0, Culture=neutral, PublicKeyToken=93be5fdc093e4c30, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\veproms\bin\Csla.dll</HintPath>
</Reference>
<Reference Include="IniReader, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\veproms\bin\IniReader.dll</HintPath>
</Reference>
<Reference Include="log4net, Version=1.2.9.0, Culture=neutral, PublicKeyToken=b32731d11ce58905">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\veproms\bin\log4net.dll</HintPath>
</Reference>
<Reference Include="MSWord, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\veproms\bin\MSWord.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="vlnObject, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\veproms\bin\vlnObject.dll</HintPath>
</Reference>
<Reference Include="vlnServerLibrary, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\veproms\bin\vlnServerLibrary.dll</HintPath>
</Reference>
<Reference Include="Volian.CSLA.Library, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\veproms\bin\Volian.CSLA.Library.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="ConfigInfo.cs" />
<Compile Include="CurSet.cs" />
<Compile Include="FolderTreeNode.cs" />
<Compile Include="Documents.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmLoader.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmLoader.Designer.cs">
<DependentUpon>frmLoader.cs</DependentUpon>
</Compile>
<Compile Include="GroupProp.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="GroupProp.Designer.cs">
<DependentUpon>GroupProp.cs</DependentUpon>
</Compile>
<Compile Include="LibDoc.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LoadConfig.cs">
</Compile>
<Compile Include="LoadTreeNh.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="PrivateProfile.cs" />
<Compile Include="Procedures.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="frmLoader.resx">
<SubType>Designer</SubType>
<DependentUpon>frmLoader.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="GroupProp.resx">
<SubType>Designer</SubType>
<DependentUpon>GroupProp.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="App.config" />
<None Include="ClassDiagram1.cd" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<Compile Include="RefObjs.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ROFST.cs" />
<Compile Include="SecObj.cs">
</Compile>
<Compile Include="Sections.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Steps.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Structures.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="TextConvert.cs" />
<Compile Include="Transitions.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="LoadTreeDB.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="DocVersions.cs">
<SubType>Form</SubType>
</Compile>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@ -0,0 +1,10 @@
""
{
"FILE_VERSION" = "9237"
"ENLISTMENT_CHOICE" = "NEVER"
"PROJECT_FILE_RELATIVE_PATH" = "relative:DataLoader"
"NUMBER_OF_EXCLUDED_FILES" = "0"
"ORIGINAL_PROJECT_FILE_PATH" = ""
"NUMBER_OF_NESTED_PROJECTS" = "0"
"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
}

View File

@ -0,0 +1,61 @@
// ========================================================================
// 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.CSLA.Library;
namespace DataLoader
{
public partial class frmLoader : Form
{
private Int32 MigrateDocVersion(string pth)
{
Int32 iStructureID = 0;
// Open connection
OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pth + ";Extended Properties=dBase III;Persist Security Info=False");
// load rofst (use it later)....
rofst = new ROFST(pth + "\\ro.fst");
// Migrate library documents
MigrateLibDocs(cn, pth);
// Initialize Dictionaries
dicTrans_StrDone = new Dictionary<string, int>();
dicTrans_StrIds = new Dictionary<string, int>();
// Process Procedures
iStructureID = MigrateProcedures(cn,pth);
// Show any Missing Transtitons (i.e. Transitions which have not been processed)
ShowMissingTransitions();
log.InfoFormat("Completed Migration of {0}",pth);
MessageBox.Show("Completed Migration of " + pth);
rofst.Close();
cn.Close();
dicTrans_StrDone.Clear();
dicTrans_StrDone = null;
return iStructureID;
}
private Volian.CSLA.Library.VersionTypeEnum DocVersionType(string s)
{
if (s.EndsWith("approved")) return Volian.CSLA.Library.VersionTypeEnum.Approved;
if (s.EndsWith("chgsht")) return Volian.CSLA.Library.VersionTypeEnum.Revision;
if (s.EndsWith("tmpchg")) return Volian.CSLA.Library.VersionTypeEnum.Temporary;
return Volian.CSLA.Library.VersionTypeEnum.WorkingDraft;
}
}
}

View File

@ -0,0 +1,114 @@
// ========================================================================
// 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 Volian.CSLA.Library;
namespace DataLoader
{
public partial class frmLoader : Form
{
private void SaveSectionDocument(string fname, string stpseq, ref byte ctype, ref int cid)
{
int docid = SaveWordDoc(fname);
switch (docid)
{
case 0:
// could add the following back in - but many of these may be put out in the log, and
// don't supply any pertinent info.
//log.InfoFormat("Timing problem for save of word document, will retry. oldstepsequence = {0}", stpseq);
break;
case -1:
log.ErrorFormat("Could not complete save of word document, oldstepsequence = {0}", stpseq);
break;
default:
ctype = 2;
cid = docid;
break;
}
}
private int SaveWordDoc(string fname, string title, ConfigInfo ci)
{
int docid = 0;
if (System.IO.File.Exists(fname))
{
if (cbSaveDoc.Checked)
{
WordDoc d = new WordDoc(fname);
string temppath = Path.GetTempFileName();
string s = d.Save(temppath);
d.Close();
WaitMS(wms);
docid = SaveDoc(temppath, title, ci);
File.Delete(temppath);
}
else
{
if (cbSaveRTF.Checked)
docid = SaveDoc(fname, title, ci);
}
}
return docid;
}
private int SaveWordDoc(string temppath)
{
return SaveWordDoc(temppath, String.Empty, null);
}
private int SaveTheDoc(string temppath, string title, ConfigInfo ci)
{
try
{
FileStream fs = File.Open(temppath, FileMode.Open, FileAccess.Read, FileShare.None);
long len = fs.Length + 1;
byte[] ByteArray = new byte[len];
int nBytesRead = fs.Read(ByteArray, 0, (int)len);
fs.Close();
string t1 = (title == null || title == "") ? "notitle" : title;
Document doc = Document.MakeDocument(t1, ByteArray, null, ci == null ? null : ci.ToString());
return doc.DocID;
}
// for an io exception, keep trying
catch (IOException)
{
Wait(2);
return 0;
}
catch (Exception ex)
{
log.Error("Save Word Doc");
log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException);
return -1;
}
}
private int SaveDoc(string temppath, string title, ConfigInfo ci)
{
int done = 0;
int ntry = 0;
while (done == 0 && ntry < 4)
{
ntry++;
done = SaveTheDoc(temppath, title, ci);
}
return done;
}
}
}

View File

@ -0,0 +1,110 @@
// ========================================================================
// 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.Collections.Generic;
using System.Text;
using Volian.CSLA.Library;
using Csla;
using System.Windows.Forms;
namespace DataLoader
{
public class FolderTreeNode : TreeNode
{
FolderTreeNode(string s) : base(s)
{
this.Name="ID:" + s;
}
FolderTreeNode(FolderInfo folderinfo)
: base(folderinfo.Name)
{
_folderinfo = folderinfo;
this.Name = "ID:" + folderinfo.FolderID.ToString();
}
private FolderInfo _folderinfo;
public FolderInfo FolderInfo
{
get { return _folderinfo; }
set
{
_folderinfo = value;
}
}
private Dictionary<int, FolderTreeNode> _findTree = null;
private Dictionary<int, FolderTreeNode> FindTree
{
get { return _findTree; }
set { _findTree = value; }
}
public FolderTreeNode FindTreeNode(int folderID)
{
if (_findTree != null) return _findTree[folderID];
return null;
}
public static FolderTreeNode BuildTreeList()
{
FolderTreeNode root = null;
FolderInfoList fil = FolderInfoList.Get();
Dictionary<int, FolderTreeNode> dicMissing = new Dictionary<int, FolderTreeNode>();
Dictionary<int, FolderTreeNode> dicExists = new Dictionary<int, FolderTreeNode>();
foreach (FolderInfo fi in fil)
{
FolderTreeNode ftp = null;
if (dicExists.ContainsKey(fi.ParentID))
{
ftp = dicExists[fi.ParentID];
// dicNeedToLoad.Remove(ftp);
}
else
{
if (fi.ParentID != 0)
{
ftp = new FolderTreeNode(fi.ParentID.ToString());
dicMissing.Add(fi.ParentID, ftp);
dicExists.Add(fi.ParentID, ftp);
if (fi.DocVersionCount > 0)
{
TreeNode tn = new TreeNode("dummy");
tn.Tag = "dummy";
ftp.Nodes.Add(tn);
}
}
}
FolderTreeNode ft = null;
if (dicMissing.ContainsKey(fi.FolderID))
{
ft = dicMissing[fi.FolderID];
ft.FolderInfo = fi;
dicMissing.Remove(fi.FolderID);
}
else
{
ft = new FolderTreeNode(fi);
if (fi.DocVersionCount > 0)
{
TreeNode tn = new TreeNode("dummy");
tn.Tag = "dummy";
ft.Nodes.Add(tn);
}
dicExists.Add(fi.FolderID, ft);
//dicNeedToLoad.Add(ft);
}
ft.Tag = fi;
if (fi.ParentID == 0)
root = ft;
else
ftp.Nodes.Add(ft);
}
root.FindTree = dicExists;
return root;
}
}
}

110
PROMS/DataLoader/GroupProp.Designer.cs generated Normal file
View File

@ -0,0 +1,110 @@
namespace DataLoader
{
partial class GroupProp
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.lbGroups = new System.Windows.Forms.ListBox();
this.pg = new System.Windows.Forms.PropertyGrid();
this.btnSave = new System.Windows.Forms.Button();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.SuspendLayout();
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
this.splitContainer1.Name = "splitContainer1";
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.lbGroups);
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.pg);
this.splitContainer1.Panel2.Controls.Add(this.btnSave);
this.splitContainer1.Size = new System.Drawing.Size(629, 290);
this.splitContainer1.SplitterDistance = 209;
this.splitContainer1.TabIndex = 0;
//
// lbGroups
//
this.lbGroups.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbGroups.FormattingEnabled = true;
this.lbGroups.Location = new System.Drawing.Point(0, 0);
this.lbGroups.Name = "lbGroups";
this.lbGroups.Size = new System.Drawing.Size(209, 290);
this.lbGroups.TabIndex = 0;
this.lbGroups.Click += new System.EventHandler(this.lbGroups_Click);
//
// pg
//
this.pg.Dock = System.Windows.Forms.DockStyle.Fill;
this.pg.Location = new System.Drawing.Point(0, 23);
this.pg.Name = "pg";
this.pg.Size = new System.Drawing.Size(416, 267);
this.pg.TabIndex = 0;
//
// btnSave
//
this.btnSave.Dock = System.Windows.Forms.DockStyle.Top;
this.btnSave.Location = new System.Drawing.Point(0, 0);
this.btnSave.Name = "btnSave";
this.btnSave.Size = new System.Drawing.Size(416, 23);
this.btnSave.TabIndex = 1;
this.btnSave.Text = "Save";
this.btnSave.UseVisualStyleBackColor = true;
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
//
// GroupProp
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(629, 290);
this.Controls.Add(this.splitContainer1);
this.Name = "GroupProp";
this.Text = "GroupProp";
this.Load += new System.EventHandler(this.GroupProp_Load);
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
this.splitContainer1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.ListBox lbGroups;
private System.Windows.Forms.PropertyGrid pg;
private System.Windows.Forms.Button btnSave;
}
}

View File

@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Csla;
using Volian.CSLA.Library;
namespace DataLoader
{
public partial class GroupProp : Form
{
GroupInfoList glst;
Group grp;
public GroupProp()
{
InitializeComponent();
}
private void GroupProp_Load(object sender, EventArgs e)
{
lbGroups.Dock = DockStyle.Fill;
glst = GroupInfoList.Get();
lbGroups.DataSource = glst;
lbGroups.DisplayMember = "GroupName";
lbGroups.ValueMember = "GID";
SetGroup();
}
private void lbGroups_Click(object sender, EventArgs e)
{
SetGroup();
Console.WriteLine("Group ID = {0}", lbGroups.SelectedValue);
}
private void SetGroup()
{
grp = glst[lbGroups.SelectedIndex].Get();
pg.SelectedObject = grp;
}
private void btnSave_Click(object sender, EventArgs e)
{
grp.Save();
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

153
PROMS/DataLoader/LibDoc.cs Normal file
View 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;
}
}
}

View File

@ -0,0 +1,198 @@
// ========================================================================
// 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.CSLA.Library;
namespace Config
{
public class ConfigFile
{
#region Log4Net
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
#endregion
#region MigrateStrings
// the following lists are used for storing the element and attribute names
// for migrating of ini & cfg files. The names stored in these lists are
// those that should be migrated. If not in this list, the data (either element
// or attribute name) is prefaced with a 'z'. At some point in the future, those
// names with a 'z' will be removed.
public List<string> listIni_EleName = new List<string>();
public List<string> listIni_AttrName = new List<string>();
private void SetIniEleName()
{
// veproms.ini
listIni_EleName.Add("graphics");
listIni_EleName.Add("color");
listIni_EleName.Add("print");
listIni_EleName.Add("startup");
listIni_EleName.Add("data integrity");
listIni_EleName.Add("wordprocessor");
listIni_EleName.Add("procedurelisttabstops");
// proc.ini
listIni_EleName.Add("rodefaults");
listIni_EleName.Add("display");
listIni_EleName.Add("backgrounddefaults");
// <user>.cfg
listIni_EleName.Add("spelldictionary");
// listIni_EleName.Add("wordprocessor"); - already in here.
}
private void SetIniAttrName()
{
//veproms.ini
listIni_AttrName.Add("defaultext");
listIni_AttrName.Add("ro");
listIni_AttrName.Add("editbackground");
listIni_AttrName.Add("black");
listIni_AttrName.Add("blue");
listIni_AttrName.Add("green");
listIni_AttrName.Add("cyan");
listIni_AttrName.Add("red");
listIni_AttrName.Add("magenta");
listIni_AttrName.Add("brown");
listIni_AttrName.Add("lightgray");
listIni_AttrName.Add("darkgray");
listIni_AttrName.Add("ligthblue");
listIni_AttrName.Add("lightgreen");
listIni_AttrName.Add("lightcyan");
listIni_AttrName.Add("lightred");
listIni_AttrName.Add("lightmagenta");
listIni_AttrName.Add("yellow");
listIni_AttrName.Add("white");
listIni_AttrName.Add("underlinewidth");
listIni_AttrName.Add("verticalOffset");
listIni_AttrName.Add("strokewidth");
listIni_AttrName.Add("strokewidthbold");
listIni_AttrName.Add("messageboxtitle");
listIni_AttrName.Add("messagefile");
listIni_AttrName.Add("enableindexcheck");
listIni_AttrName.Add("wordwrap");
listIni_AttrName.Add("procedurenumbertab");
listIni_AttrName.Add("proceduretitletab");
// proc.ini
listIni_AttrName.Add("setpoint");
listIni_AttrName.Add("graphics");
listIni_AttrName.Add("ropath");
listIni_AttrName.Add("display");
listIni_AttrName.Add("sectiontitle");
listIni_AttrName.Add("sectionnumber");
// <user>.cfg
listIni_AttrName.Add("custom");
listIni_AttrName.Add("page");
listIni_AttrName.Add("toolbar");
listIni_AttrName.Add("paragraph");
listIni_AttrName.Add("ruler");
listIni_AttrName.Add("userphone1");
listIni_AttrName.Add("userphone2");
listIni_AttrName.Add("userloc1");
listIni_AttrName.Add("userloc2");
}
#endregion
#region LoadDataCode
public ConfigFile()
{
}
public void LoadUsrCfg(User user)
{
string cmdline = System.Environment.CommandLine;
string cfgpath = cmdline.Substring(1, cmdline.LastIndexOf("\\") - 1) + "\\config";
if (!Directory.Exists(cfgpath))
{
log.Info("No user cfgs found in config directory - did not migrate any user cfgs");
return;
}
DirectoryInfo di = new DirectoryInfo(cfgpath);
FileInfo[] fis = di.GetFiles("*.cfg");
foreach (FileInfo fi in fis)
{
string cfgname = fi.Name.Substring(0, fi.Name.IndexOf("."));
if (cfgname.ToUpper() == user.UserID.ToUpper())
{
// Get Users table fields by reading the cfg file into a buffer & looking
// for the UserNetworkId and UserName fields.
StreamReader myReader = new StreamReader(fi.FullName);
string sLine;
string UserLogin = null;
string UserName = null;
int indx = -1;
while ((sLine = myReader.ReadLine()) != null && (UserLogin == null || UserName == null))
{
if (sLine.Length > 0 && sLine.Substring(0, 1) != ";")
{
if ((indx = sLine.ToLower().IndexOf("usernetworkid")) >= 0)
{
indx = sLine.IndexOf("=", indx + 13);
UserLogin = sLine.Substring(indx + 1, sLine.Length - indx - 1).Trim();
}
else if ((indx = sLine.ToLower().IndexOf("username")) >= 0)
{
indx = sLine.IndexOf("=", indx + 8);
UserName = sLine.Substring(indx + 1, sLine.Length - indx - 1).Trim();
}
}
}
myReader.Close();
// get the xml to set the config field
XmlDocument d = IniToXml(fi.FullName);
user.Config = d == null ? null : d.InnerXml;
user.UserLogin = UserLogin;
user.UserName = UserName;
user.CFGName = cfgname;
break;
}
}
}
public XmlDocument LoadSystemIni()
{
string cmdline = System.Environment.CommandLine;
string inipath = cmdline.Substring(1, cmdline.LastIndexOf("\\") - 1) + "\\veproms.ini";
if (!File.Exists(inipath))
{
log.InfoFormat("Did not migrate {0} - file not found", inipath);
return null;
}
XmlDocument d = IniToXml(inipath);
return d;
}
public XmlDocument IniToXml(string path)
{
FileInfo fi = new FileInfo(path);
if (fi.Exists)
{
PrivateProfile ppCfg;
if (listIni_AttrName == null || listIni_AttrName.Count == 0) SetIniAttrName();
if (listIni_EleName == null || listIni_EleName.Count == 0) SetIniEleName();
ppCfg = new PrivateProfile(path, listIni_EleName, listIni_AttrName);
return ppCfg.XML();
}
return null;
}
#endregion
}
}

View File

@ -0,0 +1,111 @@
// ========================================================================
// 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.CSLA.Library;
using vlnObjectLibrary;
using vlnServerLibrary;
using Org.Mentalis.Files;
using Config;
using Utils;
namespace DataLoader
{
public partial class frmLoader : Form
{
private List<Folder> vlnDataPathFolders() // was vlnDataPath
{
List<Folder> dpf = new List<Folder>();
// Get path to config file
string sCfg = Environment.GetEnvironmentVariable("veconfig");
IniReader cfg = new IniReader(sCfg);
// Get DataPath
string sDP = cfg.ReadString("menu", "DataPath");
// Split DataPath into directories
foreach (string s1 in sDP.Split(";".ToCharArray()))
{
if (s1.Length > 0)
{
string[] s2 = s1.Split(",".ToCharArray());
Folder fld = Folder.MakeFolder(sysFolder.FolderID, dbConn.DBID, s2[1], s2[0], null);
dpf.Add(fld);
}
}
return dpf;
}
private int cslaObject(vlnObject vb, int dbid, int parentid, TreeNode tn)
{
switch (vb.Type)
{
case "plant":
case "set":
Folder fld = Folder.MakeFolder(parentid, dbid, vb.Title, vb.Path, string.Empty);
tn.Tag = fld;
return fld.FolderID;
case "version":
ConfigFile cfg = new ConfigFile();
XmlDocument d = cfg.IniToXml(vb.Path + "\\proc.ini");
FolderConfig fld_cfg = new FolderConfig(d==null?"":d.InnerXml);
// translate curset.dat into xml & add to d (somehow).
string csfile = string.Format("{0}\\curset.dat",vb.Path);
if (File.Exists(csfile))
{
CurSet cs = new CurSet(csfile);
try
{
fld_cfg = cs.Convert(fld_cfg);
}
catch (Exception ex)
{
log.ErrorFormat("error in convert curset.dat, ex = {0}", ex.Message);
}
}
string titlepath = vb.Path + "\\" + "Title";
FileInfo fi = new FileInfo(titlepath);
string thetitle = vb.Title;
if (File.Exists(titlepath))
{
StreamReader myReader = new StreamReader(titlepath);
thetitle = myReader.ReadLine();
myReader.Close();
}
DocVersion v = DocVersion.MakeDocVersion(parentid, (int)DocVersionType(vb.Path.ToLower()), thetitle, vb.Path, 0, fld_cfg == null ? null : fld_cfg.ToString());
tn.Tag = v;
return v.VersionID;
}
return 0;
}
private void MigrateChildren(vlnObject vb, vlnServer vs, int dbid, int parentid, TreeNode tn)
{
if (vb.Type != "version")
{
vb.LoadChildren(vs.GetChildren(vb.ToString()));
List<vlnObject> lv = vb.Children;
foreach (vlnObject vbc in lv)
{
TreeNode tnc = tn.Nodes.Add(vbc.Title);
int idc = cslaObject(vbc, dbid, parentid, tnc);
MigrateChildren(vbc, vs, dbid, idc, tnc);
}
}
}
}
}

View File

@ -0,0 +1,43 @@
// ========================================================================
// 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.CSLA.Library;
namespace DataLoader
{
public partial class frmLoader : Form
{
private bool LoadChildren(FolderInfo fld, TreeNode tn)
{
tn.Nodes.Clear();
bool bLoaded = true;
foreach (DocVersionInfo fdv in fld.DocVersions)
{
TreeNode tnc = tn.Nodes.Add(fdv.Title);
tnc.Tag = fdv;
tnc.Checked = fdv.StructureID != 0;
bLoaded &= tnc.Checked;
}
return bLoaded;
}
}
}

View File

@ -0,0 +1,274 @@
// ========================================================================
// 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.IO;
using System.Xml;
using System.Collections.Specialized;
using System.Collections.Generic;
namespace Config
{
/// <summary>
/// PrivateProfile opens a private profile string and stores it's contents in an xml document.
/// </summary>
public class PrivateProfile
{
#region Log4Net
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
#endregion
private string ppName;
private XmlDocument ppXml;
private List<string> attr;
private List<string> ele;
private XmlNode AddNode(XmlNode xParent, string sName, string sValue )
{
XmlNode nd=AddNode(xParent,sName);
nd.Value=sValue;
return nd;
}
private XmlNode AddNode(XmlNode xParent, string sName)
{
XmlNode nd;
// Add a node
string tsName = sName.Replace(' ', '_');
nd=xParent.OwnerDocument.CreateNode(System.Xml.XmlNodeType.Element,tsName,"");
xParent.AppendChild(nd);
return nd;
}
private void AddAttribute(XmlNode xParent, string sName, string sValue )
{
XmlNode xa=xParent.Attributes.GetNamedItem(sName);
// bug fix. 09/15/03
// If there was a space after an equal sign, that space character
// was becomming part of the value string (reading the user.CFG file).
// This was giving us a "Must have semi-colon" error message.
// We now strip spaces before and after any Attribute that is written.
sValue = sValue.Trim(' ');
sName = sName.Replace(' ', '_');
// Add an attribute
if(sValue=="")
{
if(xa != null)
{
xParent.Attributes.RemoveNamedItem(sName);
}
}
else
{
if(xa == null)
{
xa = xParent.OwnerDocument.CreateNode(System.Xml.XmlNodeType.Attribute ,sName,"");
xParent.Attributes.SetNamedItem(xa);
}
xa.Value=sValue;
}
}
private XmlNode AddSection(XmlNode xParent, string sSection )
{
// get the name. If it's not in the 'migrated elements' list, then
// preface the name with a 'z'.
string elename = sSection.Substring(1, sSection.IndexOf("]") - 1);
while(elename.IndexOf(' ')>-1) elename = elename.Remove(elename.IndexOf(' '),1);
if (!ele.Contains(elename.ToLower())) elename = 'z' + elename;
// Add a section [name]
XmlNode nd = AddNode(xParent, elename);
//AddAttribute(nd,"name",sSection.Substring(1,sSection.IndexOf("]")-1));
return nd;
}
private XmlNode AddSection_UC(XmlNode xParent, string sSection )
{
// Add a section [name]
string name_uc = sSection.Substring(1,sSection.IndexOf("]")-1).ToUpper() + "__UC";
XmlNode nd =AddNode(xParent,name_uc);
// AddAttribute(nd,"name",name_uc);
return nd;
}
private void AddComment(XmlNode xParent, string sComment)
{
if(xParent.ChildNodes.Count > 0)
{
XmlNode ndlast=xParent.ChildNodes.Item(xParent.ChildNodes.Count-1);
if(ndlast.Name=="comment")
{
XmlNode xa = ndlast.Attributes.GetNamedItem("text");
xa.Value=xa.Value + "\r\n" + sComment;
return;
}
}
// Add a comment text
XmlNode nd =AddNode(xParent,"comment");
AddAttribute(nd,"text",sComment);
}
private void AddLine(XmlNode xParent, string sLine)
{
// Add a comment text
XmlNode nd =AddNode(xParent,"line");
AddAttribute(nd,"text",sLine);
}
private void AddParam(XmlNode xParent, string sParam)
{
int i = sParam.IndexOf("=");
// get the name. If it's not in the 'migrated attribute' list, then
// preface the name with a 'z'.
string attrname = sParam.Substring(0, i);
while (attrname.IndexOf(' ') > -1) attrname = attrname.Remove(attrname.IndexOf(' '), 1);
if (!attr.Contains(attrname.ToLower())) attrname = 'z' + attrname;
string sValue=sParam.Substring(i+1);
string sName = attrname.Trim(' ');
AddAttribute(xParent, sName, sValue);
}
private void AddParam_UC(XmlNode xParent, string sParam)
{
int i = sParam.IndexOf("=");
// add a param name=value
string sName=sParam.Substring(0,i);
string sValue=sParam.Substring(i+1);
//XmlNode nd =AddNode(xParent,"paramUC");
sName = sName.Trim(' ');
AddAttribute(xParent, sName, sValue);
//AddAttribute(nd,"name",sName.ToUpper()+"__UC");
//AddAttribute(nd,"value",sValue);
}
private void LoadXML()
{
string sLine;
ppXml.LoadXml("<ConfigInfo/>");// initialize ppXml
XmlNode xmlTop=ppXml.DocumentElement;
XmlNode xmlNd=ppXml.DocumentElement;
//XmlNode xmlNd_UC=ppXml.DocumentElement;
StreamReader myReader = new StreamReader(ppName);// Open file
while( (sLine = myReader.ReadLine())!= null)// read line-by-line
{
// add structure
try
{
if (sLine.Length > 0)
{
switch (sLine.Substring(0, 1))
{
case "[":
xmlNd = AddSection(xmlTop, sLine);
//xmlNd_UC=AddSection_UC(xmlTop, sLine);
break;
case ";":
//AddComment(xmlNd, sLine);
break;
default:
if (sLine.IndexOf("=") >= 0)
{
AddParam(xmlNd, sLine);
//AddParam_UC(xmlNd_UC, sLine);
}
else
{
//AddLine(xmlNd, sLine);
}
break;
}
}
}
catch (Exception ex)
{
log.ErrorFormat("error parsing .INI file: {0} - Directory: {1}", ex.Message,ppName);
}
}
myReader.Close();
}
public PrivateProfile(string sFileName, List<string> listIni_EleName, List<string> listIni_AttrName)
{
ppName=sFileName;
ppXml= new XmlDocument();
attr = listIni_AttrName;
ele = listIni_EleName;
LoadXML();
}
~PrivateProfile()
{
// Clean-up
//
}
public string PrettyNode(XmlNode nd,int level)
{
string retval="";
string prefix=new string(' ',level*2);
if(nd.ChildNodes.Count > 0)
{
retval = prefix + "<" + nd.Name;
for(int i=0;i<nd.Attributes.Count;i++)
{
retval=retval + " " + nd.Attributes.Item(i).Name + "='" + nd.Attributes.Item(i).Value + "'";
}
retval=retval+">";
for(int i=0;i<nd.ChildNodes.Count;i++)
{
retval=retval+"\r\n"+PrettyNode(nd.ChildNodes.Item(i),level+1);
}
retval=retval+"\r\n" + prefix + "</" + nd.Name + ">";
}
else
{
retval = prefix + "<" + nd.Name;
for(int i=0;i<nd.Attributes.Count;i++)
{
retval=retval + " " + nd.Attributes.Item(i).Name + "='" + nd.Attributes.Item(i).Value + "'";
}
retval=retval+"/>";
}
return retval;
}
public string PrettyXML()
{
return PrettyNode(ppXml.DocumentElement,0);
}
public XmlDocument XML()
{
// return XML Document
return ppXml;
}
public override string ToString()
{
// return string
return "";
}
public void Save()
{
SaveAs(ppName);
}
public void SaveAs(string sName)
{
}
public string Attr(string sPath)
{
string retval="";
XmlNode xn = ppXml.SelectSingleNode(sPath);
if(xn != null)
{
string quots = xn.Value;
if (quots.Substring(0,1)=="\"" && quots.Substring(quots.Length-1,1)=="\"")
retval = quots.Substring(1,quots.Length-2);
else
retval=xn.Value;
}
return retval;
}
public string Attr(string sSection, string sParameter)
{
string findstr = "/ini/sectionUC[@name='" + sSection.ToUpper() + "__UC']/paramUC[@name='" + sParameter.ToUpper() + "__UC']/@value";
return Attr(findstr);
}
}
}

View File

@ -0,0 +1,189 @@
// ========================================================================
// 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.CSLA.Library;
namespace DataLoader
{
public partial class frmLoader : Form
{
private Int32 MigrateProcedure(OleDbConnection cn, DataRow dr, Byte FromType, Int32 FromID, string pth)
{
dicOldStepSequence = new Dictionary<object, string>();
Stack<int> SubSectLevels = new Stack<int>(); // levels of subsections
ProcFileName = dr["Entry"].ToString();
ProcNumber = dr["Number"].ToString();
DateTime dts = GetDTS(dr["Date"].ToString(), dr["Time"].ToString());
string userid = dr["initials"].ToString().Trim();
ConfigInfo ci = null;
string tstr = dr["Proccode"].ToString();
if (tstr != null && tstr != "")
{
ci = new ConfigInfo(null);
ci.AddItem("Procedure", "ProcCode", tstr);
}
tstr = dr["Series"].ToString();
if (tstr != null && tstr != "")
{
if (ci == null) ci = new ConfigInfo(null);
ci.AddItem("Procedure", "Series", tstr);
}
DataSet ds = new DataSet();
DataTable dt = null;
// See if there is PSI and if so, add it to the xml.
OleDbDataAdapter dapsi = new OleDbDataAdapter("select * from [" + dr["entry"] + "] where [STEP] is null", cn);
dapsi.Fill(ds);
dt = ds.Tables[0];
if (dt.Rows.Count > 0)
{
DataRow drpsi = dt.Rows[0];
string psistr = drpsi["TEXTM"].ToString();
if (psistr != null && psistr != "")
{
StringReader strrd = new StringReader(psistr);
string sLine;
if (ci == null) ci = new ConfigInfo(null);
while ((sLine = strrd.ReadLine()) != null)
{
int indx = sLine.IndexOf(' ');
string nm = null;
string vl = null;
if (indx < 0)
nm = sLine;
else
{
nm = sLine.Substring(0, indx);
vl = sLine.Substring(indx+1, sLine.Length-indx-1);
}
ci.AddItem("PSI", nm, vl==null?null:vl);
}
}
}
dapsi.Dispose();
// Note, for now the data from the format field will be saved. Later, xpath, ??
EditSectId = 0;
Byte FrType = 2;
Int32 FrID = 0;// str.Structureid;
Procedure prc = Procedure.MakeProcedure(TextConvert.ConvertText(dr["Number"].ToString()), TextConvert.ConvertText(dr["Title"].ToString()), ci==null?null:ci.ToString(), null, 0, 0, dts, userid);
Structure str = Structure.MakeStructure(FromType, FromID, 1, prc.ProcID, dts, userid);
UpdateLabels(1, 0, 0);
//OleDbDataAdapter da = new OleDbDataAdapter("select * from (select asc(mid(sequence,2,1)) as locb,* from [" + dr["entry"] + "] where sequence like ' %') order by locb asc", cn);
OleDbDataAdapter da = new OleDbDataAdapter("select * from [" + dr["entry"] + "] where sequence like ' %'", cn);
try
{
LoadSection(ds, da, dr["entry"].ToString());
da.SelectCommand.CommandText = "select * from [" + dr["entry"] + "] where step not like ' '";
da.Fill(ds, "Steps");
dt = ds.Tables["Steps"];
dt.CaseSensitive = true;
ds.Tables["Steps"].CaseSensitive = true;
dt.Columns.Add("CStep", System.Type.GetType("System.String"));
dt.Columns.Add("CSequence", System.Type.GetType("System.String"));
// set the cstep & csequence - couldn't do it in the add because it needed a sql function
foreach (DataRow drw in ds.Tables["Steps"].Rows)
{
drw["CStep"] = TextConvert.ConvertSeq(drw["Step"].ToString());
drw["CSequence"] = TextConvert.ConvertSeq(drw["Sequence"].ToString());
}
dt.Columns.Add("StepNo", System.Type.GetType("System.Int32"), "Convert(Convert(Substring(CStep,2,1),'System.Char'),'System.Int32')-48");
dt.Columns.Add("Level", System.Type.GetType("System.Int32"), "Len(CSequence)");
dt.Columns.Add("SubStepNo", System.Type.GetType("System.Int32"), "Convert(Convert(Substring(CSequence,Len(CSequence),1),'System.Char'),'System.Int32')-48");
}
catch (Exception ex)
{
log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException);
log.Error(ex.StackTrace);
}
Dictionary<int, int> dicSecCount = new Dictionary<int, int>();
Dictionary<int, int> dicSecID = new Dictionary<int, int>();
pbSect.Maximum = ds.Tables["Sections"].Rows.Count;
pbSect.Value = 0;
DataTable dtsect = ds.Tables["Sections"];
dtsect.CaseSensitive = true;
DataView dv = new DataView(dtsect, "", "locb", DataViewRowState.CurrentRows);
foreach (DataRowView drw in dv)
{
FrID = MigrateSection(prc, cn, drw, ds.Tables["Steps"], FrType, FrID, dicSecCount.Count > 0 ? true : false, pth);
if (prc.StructureID == 0)
{
prc.StructureID = FrID;
prc.Save(true); //force update
}
FrType = 0;
dicSecID[dicSecCount.Count] = FrID;
if (dicSecCount.Count > 0)
{
if ((dicSecCount[dicSecCount.Count]) == 1)
{
dicSecCount.Remove(dicSecCount.Count);
FrID = dicSecID[dicSecCount.Count];
}
else
{
dicSecCount[dicSecCount.Count] = dicSecCount[dicSecCount.Count] - 1;
}
}
int subSecs = drw["Sequence"].ToString().PadRight(12, ' ')[5] - 48;
if (subSecs > 0)
{
dicSecCount[dicSecCount.Count + 1] = subSecs;
FrType = 2;
}
}
if (EditSectId != 0)
{
prc.StructureStart = EditSectId;
EditSectId = 0;
prc.Save(true); // force update
}
return str.StructureID;
}
private Int32 MigrateProcedures(OleDbConnection cn, string pth)
{
// Loop through Set File for each Procedure
OleDbDataAdapter da = new OleDbDataAdapter("Select * from [set] where entry is not null", cn);
DataSet ds = new DataSet();
da.Fill(ds);
Byte FrType = 1;
Int32 FrID = 0;
Int32 FirstID = 0;
pbProc.Maximum = ds.Tables[0].Rows.Count;
UpdateLabels(0, 0, 0);
foreach (DataRow dr in ds.Tables[0].Rows)
{
FrID = MigrateProcedure(cn, dr, FrType, FrID, pth);
if (FirstID == 0) FirstID = FrID;
FrType = 0;
}
da.Dispose();
return FirstID;
}
}
}

View File

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace DataLoader
{
static class Program
{
//<summary>
//The main entry point for the application.
//</summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmLoader());
}
}
}

251
PROMS/DataLoader/ROFST.cs Normal file
View File

@ -0,0 +1,251 @@
// ========================================================================
// 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.Collections.Generic;
using System.Collections.Specialized;
using System.Text;
using System.IO;
using System.Xml.Serialization;
using System.Xml;
using System.Xml.XPath;
namespace DataLoader
{
public class ROFST
{
#region Log4Net
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
#endregion
[Serializable]
public struct roHdr
{
public int hSize;
public int hYear;
public byte hMonth;
public byte hDay;
public int hcYear;
public byte hcMonth;
public byte hcDay;
public byte hcHour;
public byte hcMin;
public byte hcSec;
public byte hcHund;
public rodbi[] myDbs;
};
[Serializable]
public struct rodbi
{
public int dbiID;
public int dbiType;
public int dbiAW;
public string dbiTitle;
public string dbiAP;
public int ID;
public int ParentID;
public rochild[] children;
};
public struct rogrp
{
public int ID;
public int ParentID;
public rochild[] children;
public string value;
public string appid;
};
public struct rochild
{
public int ID;
public int ParentID;
public int type;
public string title;
public string roid;
public string appid;
public string value;
public rochild[] children;
};
private roHdr myHdr;
private int TableID;
private string fstPath;
private HybridDictionary dicRos;
public ROFST(string path)
{
fstPath = path;
if (!File.Exists(fstPath))
{
log.ErrorFormat("RO FST Does not exist: {0}", path);
return;
}
dicRos = new HybridDictionary();
ParseIntoDictionary();
}
public void Close()
{
// remove the dictionary
dicRos.Clear();
dicRos = null;
}
// this only gets rochild values. Later we may want another
// dictionary to get groups.
public string GetRoValue(string ROID)
{
// Use the ROID to get the value from the dictionary
if (dicRos.Contains(ROID))
{
rochild rochld = (rochild)dicRos[ROID];
return rochld.value;
}
return null;
}
private int StringLength(byte[] ab, int offset)
{
int i = 0;
while (ab[i + offset] != 0) i++;
return i;
}
private rogrp LoadGroup(byte[] ab, int offset)
{
rogrp myGrp = new rogrp();
myGrp.ID = BitConverter.ToInt32(ab, offset);
myGrp.ParentID = BitConverter.ToInt32(ab, offset + 4);
int howmany = BitConverter.ToInt16(ab, offset + 8);
if (howmany > 0)
{
myGrp.children = new rochild[howmany];
int myOffset = offset + 10;
for (int i = 0; i < myGrp.children.Length; i++)
{
int childOffset = BitConverter.ToInt32(ab, myOffset);
rochild tmp = new rochild();
//tmp.offset=BitConverter.ToInt32(ab,myOffset);
tmp.type = BitConverter.ToInt16(ab, myOffset + 4);
int slen = StringLength(ab, myOffset + 6);
tmp.title = Encoding.Default.GetString(ab, myOffset + 6, slen);
myOffset += (7 + slen);
rogrp tmpg = LoadGroup(ab, childOffset);
tmp.ID = tmpg.ID;
tmp.ParentID = tmpg.ParentID;
tmp.children = tmpg.children;
tmp.value = tmpg.value;
tmp.appid = tmpg.appid;
tmp.roid = TableID.ToString("X4") + tmp.ID.ToString("X8");
dicRos.Add(tmp.roid, tmp);
int j;
for (j = i - 1; j >= 0 && tmp.ID < myGrp.children[j].ID; j--)
{
myGrp.children[j + 1] = myGrp.children[j];
}
myGrp.children[j + 1] = tmp;
}
}
else
{
int slen = StringLength(ab, offset + 12);
myGrp.value = Encoding.Default.GetString(ab, offset + 12, slen);
int slen2 = StringLength(ab, offset + 13 + slen);
myGrp.appid = Encoding.Default.GetString(ab, offset + 13 + slen, slen2);
}
return myGrp;
}
private void ParseIntoDictionary()
{
FileStream fsIn = new FileStream(fstPath, FileMode.Open,FileAccess.Read, FileShare.Read);
// Create an instance of StreamReader that can read
// characters from the FileStream.
BinaryReader r = new BinaryReader(fsIn);
byte[] ab = r.ReadBytes((int)fsIn.Length);
r.Close();
myHdr.hSize = BitConverter.ToInt32(ab, 0);
myHdr.hYear = BitConverter.ToInt16(ab, 4);
myHdr.hMonth = ab[6];
myHdr.hDay = ab[7];
myHdr.hcYear = BitConverter.ToInt16(ab, 8);
myHdr.hcMonth = ab[10];
myHdr.hcDay = ab[11];
myHdr.hcHour = ab[12];
myHdr.hcMin = ab[13];
myHdr.hcSec = ab[14];
myHdr.hcHund = ab[15];
int hdrOffset = BitConverter.ToInt32(ab, 16);
int howbig = BitConverter.ToInt32(ab, hdrOffset);
int dbs = BitConverter.ToInt16(ab, hdrOffset + 4);
myHdr.myDbs = new rodbi[dbs];
for (int i = 0; i < dbs; i++)
{
int offset = hdrOffset + 6 + (i * 30);
myHdr.myDbs[i].dbiID = BitConverter.ToInt16(ab, offset + 0);
TableID = myHdr.myDbs[i].dbiID;
myHdr.myDbs[i].dbiType = BitConverter.ToInt16(ab, offset + 2);
myHdr.myDbs[i].dbiAW = BitConverter.ToInt16(ab, offset + 4);
rogrp tmp = LoadGroup(ab, BitConverter.ToInt32(ab, offset + 6));
myHdr.myDbs[i].ID = tmp.ID;
myHdr.myDbs[i].children = tmp.children;
int iPtr = BitConverter.ToInt32(ab, offset + 22) + hdrOffset + 6;
myHdr.myDbs[i].dbiTitle = Encoding.Default.GetString(ab, iPtr, StringLength(ab, iPtr));
iPtr = BitConverter.ToInt32(ab, offset + 26) + hdrOffset + 6;
myHdr.myDbs[i].dbiAP = Encoding.Default.GetString(ab, iPtr, StringLength(ab, iPtr));
}
}
public bool SaveToXml(string fname)
{
try
{
StreamWriter swxml = new StreamWriter(fname);
XmlSerializer mySer = new XmlSerializer(typeof(roHdr));
mySer.Serialize(swxml, myHdr);
swxml.Close();
}
catch (Exception ex)
{
log.ErrorFormat("Error writing to file: {0}", ex.Message);
return false;
}
return true;
}
public XmlDocument GetXmlFromFile(string fname)
{
FileStream xmlIn = new FileStream(fname, FileMode.Open, FileAccess.Read, FileShare.Read);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlIn);
xmlIn.Close();
return xmlDoc;
}
public string GetValueFromXml(XmlDocument xmlDoc, string ROID)
{
// use roid as xpath to get data.
try
{
string xpath_roid = "//rochild[roid = \"" + ROID.Substring(0, 12) + "\"]/value";
XmlNode valnd = xmlDoc.SelectSingleNode(xpath_roid);
if (valnd == null) return null;
return valnd.InnerText;
}
catch (Exception ex)
{
log.ErrorFormat("Cannot find ro in XmlDocument ");
log.ErrorFormat("roid = {0}", ROID);
log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException);
}
return null;
}
}
}

View File

@ -0,0 +1,92 @@
// ========================================================================
// 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.CSLA.Library;
namespace DataLoader
{
public partial class frmLoader : Form
{
private void AddRoUsage(int structId, string ROID)
{
RoUsage ro = RoUsage.MakeRoUsage(structId, ROID);
ro.StructureID = structId;
ro.ROID = ROID;
}
private string MigrateRos(OleDbConnection cn, string textm, string seqcvt, int structId)
{
StringBuilder rotxt = new StringBuilder();
int instance = 0;
int beg = 0;
DataTable dt = null;
DataSet ds = null;
OleDbDataAdapter da = null;
//TODO: ZSteps
string cmd = "SELECT * FROM USAGERO WHERE [NUMBER]='" + ProcNumber.Replace("'", "''") + "' AND [SEQUENCE] ='" + seqcvt + "' ORDER BY [INSTANCE]";
da = new OleDbDataAdapter(cmd, cn);
// get usage records for the ROID.
ds = new DataSet();
try
{
da.Fill(ds);
dt = ds.Tables[0];
dt.CaseSensitive = true;
}
catch (Exception ex)
{
log.Error("Error getting RO Usages");
log.ErrorFormat("proc number = {0}, oldstepsequence = {1}",ProcNumber, seqcvt);
log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException);
return textm;
}
int tok = textm.IndexOf('\x15');
while (tok > -1)
{
// found a token, add the roid & value into the string and
// add an ro usage for it.
rotxt.Append(textm.Substring(beg, tok - beg));
DataRow dr = dt.Rows[instance];
string ROID = dr["ROID"].ToString();
AddRoUsage(structId, ROID);
rotxt.Append("\x15{{");
rotxt.Append(ROID);
rotxt.Append("}{");
string val = rofst.GetRoValue(ROID.Substring(0, 12));
rotxt.Append(val);
rotxt.Append("}}");
instance++;
beg = tok + 1;
if (beg > textm.Length)
{
tok = -1;
da.Dispose();
}
else
tok = textm.IndexOf('\x15', beg);
}
if (beg < textm.Length - 1)
rotxt.Append(textm.Substring(beg, textm.Length - beg));
return rotxt.ToString();
}
}
}

913
PROMS/DataLoader/SecObj.cs Normal file
View File

@ -0,0 +1,913 @@
// ========================================================================
// 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.IO;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Windows.Forms;
using System.Text;
using Volian.CSLA.Library;
using Config;
namespace DataLoader
{
/// <summary>
/// Summary description for Security.
/// </summary>
///
#region OldVeSamClasses
// do a temp plant - we may keep this for loading in data. It will be migrated
// to a folders record.
#region Options
public class PlantOptions
{
private UInt16 _id;
private UInt32 _plopts;
public List<ProcOptions> poList = new List<ProcOptions>();
public UInt16 Id
{
get {return _id;}
set {if (_id != value) _id = value;}
}
public UInt32 Options
{
get {return _plopts;}
set {if (_plopts != value) _plopts = value;}
}
}
public class ProcOptions
{
private UInt16 _id;
private UInt16 _selected;
public UInt32 [] Options = new UInt32[4];
public UInt16 Id
{
get {return _id;}
set {if (_id != value)_id = value;}
}
public UInt16 Selected
{
get {return _selected;}
set {if (_selected != value)_selected = value;}
}
}
#endregion
#region OldFolders
public class Plant
{
private string _name;
private string _path;
private UInt16 _id;
public Dictionary<ushort, ProcSet> psDic = new Dictionary<ushort,ProcSet>();
public string Name
{
get {return _name;}
set
{
if (value == null) value = string.Empty;
if (_name != value) _name = value;
}
}
public string Path
{
get {return _path;}
set
{
if (value == null) value = string.Empty;
if (_path != value)_path = value;
}
}
public UInt16 Id
{
get {return _id;}
set {if (_id != value) _id = value;}
}
public Plant() { }
public Plant(string nm, string pth, UInt16 idn)
{
_name = nm;
_path = pth;
_id = idn;
}
}
public class ProcSet
{
private string _name;
private string _path;
private UInt16 _id;
public string Name
{
get {return _name;}
set
{
if (value == null) value = string.Empty;
if (_name != value)_name = value;
}
}
public string Path
{
get {return _path;}
set
{
if (value == null) value = string.Empty;
if (_path != value)_path = value;
}
}
public UInt16 Id
{
get {return _id;}
set {if (_id != value) _id = value;}
}
public ProcSet() { }
public ProcSet(string nm, string pth, UInt16 idn)
{
_name = nm;
_path = pth;
_id = idn;
}
}
#endregion
#region OldUser
// The OldUser class stores data from the vesam input. The User class migrates
// and saves data to the new sql database.
public class OldUser
{
private UInt32 _systemopts;
private string _username;
private bool _blockaccessflag = false;
public List<PlantOptions> PlantOpts = new List<PlantOptions>();
public UInt32 SystemOpts
{
get { return _systemopts; }
set { if (_systemopts != value) _systemopts = value; }
}
public string UserName
{
get { return _username; }
set
{
if (value == null) value = string.Empty;
if (_username != value) _username = value;
}
}
public bool BlockAccessFlag
{
get { return _blockaccessflag; }
set { if (_blockaccessflag != value) _blockaccessflag = value; }
}
public bool PermissionToManageFlag
{
get { return (_systemopts & VESamOpt.DOCMAINT)==0?false:true; }
//set { if (_permissiontomanageflag != value) _permissiontomanageflag = value; }
}
public bool SystemAdminFlag
{
get { return (_systemopts & VESamOpt.SYSADMIN)==0 ? false:true; }
//set { if (_systemadminflag != value) _systemadminflag = value; }
}
public bool PermissionToLockFlag
{
get { return (_systemopts & VESamOpt.LOCKSYSTEM)==0 ? false:true; }
//set { if (_permissiontolockflag != value) _permissiontolockflag = value; }
}
public bool RoEditorFlag
{
get { return (_systemopts & VESamOpt.ROEDITOR) == 0 ? false : true; }
}
public OldUser(string nm)
{
_username = nm;
}
}
#endregion
#region VESam
public class VESamOpt
{
#region Log4Net
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
#endregion
public const long VIEW = 0x00000001L;
public const long PRINT = 0x00000002L;
public const long PRINTDRAFT = 0x00000004L;
public const long PRINTCHANGES = 0x00000008L;
public const long EDIT = 0x00000010L;
public const long SEARCH = 0x00000020L;
public const long STANDARDSTEPS = 0x00000040L;
public const long APPROVE = 0x00000080L;
public const long APPROVESINGLE = 0x00000100L;
public const long LIBRARYDOCS = 0x00000200L;
public const long ADDMODDEL = 0x00000400L;
public const long CLEAN = 0x00000800L;
public const long LOCKPROC = 0x00001000L;
public const long LOCKSET = 0x00000001L;
public const long UCF = 0x00000002L;
public const long LOCKSYSTEM = 0x00000001L;
public const long DOCMAINT = 0x00000002L;
public const long ROEDITOR = 0x00000004L;
public const long SYSADMIN = 0x00000008L;
public const int SUPERUSER = 1000;
public const long SUPERACCESS = 0xFFFFFFFFL;
private bool _blockAccess;
public int userid = -1;
public string initials;
private const string samoptname = "vesam.opt";
public FileStream fs;
public BinaryReader bw;
public bool isDemoMode = false;
List<Plant> plntList = new List<Plant>();
List<OldUser> userList = new List<OldUser>();
Dictionary<ushort, Plant> plntDic = new Dictionary<ushort, Plant>();
public bool BlockAccess
{
get { return _blockAccess; }
set { if (_blockAccess != value) _blockAccess = value; }
}
public bool OpenFile(string oname)
{
try
{
fs = new FileStream(oname, FileMode.Open, FileAccess.Read, FileShare.Read, 1, false);
bw = new BinaryReader(fs);
return true;
}
catch (Exception e)
{
MessageBox.Show(e.Message, "Security File");
return false;
}
}
public void CloseFile()
{
bw.Close();
fs.Close();
bw = null;
fs = null;
}
public Dictionary<ushort, Plant> LoadPlants()
{
UInt16 ui16;
UInt32 ui32;
try
{
byte x;
// read past some header stuff.
for (int jj = 0; jj < 8; jj++) x = bw.ReadByte();
long nxtPl = bw.ReadUInt32();
uint nmPlant = bw.ReadUInt16();
ui16 = bw.ReadUInt16();
// not needed here, but need to read past this...
long nxtUs = bw.ReadUInt32();
uint nmUser = bw.ReadUInt16();
ui16 = bw.ReadUInt16();
long nxtGr = bw.ReadUInt32();
uint nmGrp = bw.ReadUInt16();
ui16 = bw.ReadUInt16();
BlockAccess = bw.ReadUInt16()==0?false:true;
string pname, ppth;
for (int i = 0; i < nmPlant; i++)
{
if (nxtPl == 0xFFFFFFFEL)
{
log.Error("Reading in VESAM options file - cannot find next plant in list");
break;
}
fs.Seek(nxtPl, SeekOrigin.Begin);
nxtPl = bw.ReadUInt32();
Plant pl = new Plant();
pl.Id = bw.ReadUInt16();
ui16 = bw.ReadUInt16();
byte[] stmp = new byte[256];
stmp = bw.ReadBytes(ui16);
pname = Encoding.ASCII.GetString(stmp, 0, ui16);
pl.Name = pname;
ui16 = bw.ReadUInt16();
stmp = bw.ReadBytes(ui16);
ppth = Encoding.ASCII.GetString(stmp, 0, ui16);
pl.Path = ppth;
// read in any sets within this plant.
UInt16 nmPrcDr = bw.ReadUInt16();
ui32 = bw.ReadUInt32();
UInt32 nxtPr = bw.ReadUInt32();
for (int j = 0; j < nmPrcDr; j++)
{
ProcSet ps = new ProcSet();
ps.Id = bw.ReadUInt16();
ui16 = bw.ReadUInt16();
stmp = bw.ReadBytes(ui16);
pname = Encoding.ASCII.GetString(stmp, 0, ui16);
ps.Name = pname;
ui16 = bw.ReadUInt16();
stmp = bw.ReadBytes(ui16);
ppth = Encoding.ASCII.GetString(stmp, 0, ui16);
ps.Path = ppth;
ui32 = bw.ReadUInt32();
if (nxtPr == 0xFFFFFFFDL && j + 1 < nmPrcDr)
{
log.ErrorFormat("Loading vesam.opt - procedure sets for {0}", ps.Name);
return null;
}
try
{
pl.psDic.Add(ps.Id, ps);
}
catch (Exception ex)
{
log.ErrorFormat("Adding to set dictionary - {0}. Error: {1}" + ps.Path, ex.Message);
}
if (nxtPr != 0xFFFFFFFDL)
{
fs.Seek(nxtPr, SeekOrigin.Begin);
nxtPr = bw.ReadUInt32();
}
}
try
{
if (!plntDic.ContainsKey(pl.Id))plntDic.Add(pl.Id, pl);
}
catch (Exception ex)
{
log.ErrorFormat("Adding to plant dictionary - {0}. Error: {1}", pl.Path, ex.Message);
}
}
}
catch (Exception ex)
{
log.ErrorFormat("Loading plants from vesam.opt: {0}", ex.Message);
return null;
}
return plntDic;
}
public List<OldUser> LoadUserList()
{
UInt16 ui16;
UInt32 ui32;
try
{
byte x;
fs.Seek(0, SeekOrigin.Begin);
// read past some header stuff.
for (int jj = 0; jj < 8; jj++) x = bw.ReadByte();
long nxtPl = bw.ReadUInt32();
uint nmPlant = bw.ReadUInt16();
ui16 = bw.ReadUInt16();
// get info in header for users
long nxtUs = bw.ReadUInt32();
uint nmUser = bw.ReadUInt16();
ui16 = bw.ReadUInt16();
long nxtGr = bw.ReadUInt32();
uint nmGrp = bw.ReadUInt16();
ui16 = bw.ReadUInt16();
bool localblockAccess = bw.ReadUInt16()==0?false:true;
// Now read in all of the user information
UInt16 uid;
string fName, fPass;
for (int i = 0; i < nmUser; i++)
{
if (nxtUs == 0xFFFFFFFCL && i + 1 < nmUser)
{
log.Error("Loading vesam.opt - reading in user list.");
return null;
}
fs.Seek((long)nxtUs, SeekOrigin.Begin);
nxtUs = bw.ReadUInt32();
uid = bw.ReadUInt16();
ui16 = bw.ReadUInt16(); // user's group?
byte[] test = new byte[10];
test = bw.ReadBytes(10);
// get ve-proms (vesam) username & password
fName = Encoding.ASCII.GetString(test, 0, 10);
int indx = fName.IndexOf("\0");
string fNameTrim = fName.Substring(0, indx);
test = bw.ReadBytes(10);
fPass = Encoding.ASCII.GetString(test, 0, 10);
indx = fPass.IndexOf("\0");
string fPassTrim = fPass.Substring(0, indx);
OldUser usr = new OldUser(fNameTrim);
usr.SystemOpts = bw.ReadUInt32();
usr.BlockAccessFlag = localblockAccess;
ui32 = bw.ReadUInt32();
// now get plant & proc set options.
nmPlant = bw.ReadUInt16();
for (int j = 0; j < nmPlant; j++)
{
PlantOptions plO = new PlantOptions();
plO.Id = bw.ReadUInt16();
plO.Options = bw.ReadUInt32();
ui32 = bw.ReadUInt32();
UInt16 nmPrcDr = bw.ReadUInt16();
for (int k = 0; k < nmPrcDr; k++)
{
ProcOptions prO = new ProcOptions();
prO.Id = bw.ReadUInt16();
prO.Selected = bw.ReadUInt16();
for (int kk = 0; kk < 4; kk++) prO.Options[kk] = bw.ReadUInt32();
plO.poList.Add(prO);
}
usr.PlantOpts.Add(plO);
}
userList.Add(usr);
}
}
catch (Exception ex)
{
log.ErrorFormat("Error Loading (old) User info from vesam.opt: {0}", ex.Message);
return null ;
}
return userList;
}
}
#endregion
#endregion
#region SecurityMigration
public class Security
{
#region Log4Net
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
#endregion
Dictionary<ushort, Plant> plntDic = new Dictionary<ushort, Plant>();
List<OldUser> userList = new List<OldUser>();
private string optfilename;
private string[] prflags ={ "Vfw", "Prnt", "Prnt Drft", "Prnt Chgs", "Edit", "Srch", "St Stp", "App", "App Sel", "Lib", "AMD", "Clean", "Lock" };
private string[] sysflags ={ "NetworkLock", "SysMaint", "ROEditor", "SysAdmin" };
#region NewMig
public Security(string pathname)
{
if (File.Exists(pathname) == false)
{
MessageBox.Show("Could not locate the Security Options file:\n\n" + pathname, "Security Access Error");
optfilename = null;
return;
}
optfilename = pathname;
}
public bool Migrate()
{
VESamOpt vso = new VESamOpt();
bool suc = vso.OpenFile(optfilename);
if (!suc) return false;
plntDic = vso.LoadPlants();
if (plntDic == null) return false;
suc = VerifyFolders(plntDic);
if (!suc) return suc;
userList = vso.LoadUserList();
if (userList == null) return false;
vso.CloseFile();
vso = null;
log.Info("Original vesam.opt loaded successfully - next step is to migrate security information to new database");
//WriteOutSummary(plntDic, userList);
suc = TranslateToNew(vso, plntDic, userList);
log.Info("Migrated vesam successfully");
return suc ;
}
#endregion
#region WriteVESamSummary
private void WriteOutSummary(Dictionary<ushort, Plant> plntDic, List<OldUser> userList)
{
foreach (OldUser usr in userList)
{
log.InfoFormat("User = {0}", usr.UserName);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++)
{
if ((usr.SystemOpts & (1L << i)) != 0) sb.Append(sysflags[i] + " ");
}
if (sb.Length > 0) log.InfoFormat(" System Options = {0}", sb.ToString());
// for now, don't worry about system options.
// for each plant, list any permissions of the plant or its proc sets. If
// none set, nothing will be listed.
foreach (PlantOptions po in usr.PlantOpts)
{
bool plntout = false;
Plant pl = (Plant)plntDic[po.Id];
if (po.Options != 0)
{
plntout = true;
log.InfoFormat(" Plant = {0}. Options = {1}", pl.Name, po.Options);
}
foreach (ProcOptions psO in po.poList)
{
ProcSet ps = (ProcSet)pl.psDic[psO.Id];
if (psO.Options[0] != 0 || psO.Options[1] != 0 || psO.Options[2] != 0 || psO.Options[3] != 0)
{
if (!plntout) log.InfoFormat(" Plant = {0}.", pl.Name);
log.InfoFormat(" Procedure Set = {0}", ps.Name);
sb.Length = 0;
int nm = 0;
for (int i1 = 0; i1 < 4; i1++)
{
for (int j1 = 0; j1 < 16; j1++)
{
if ((psO.Options[i1] & (1L << j1)) != 0) sb.Append(prflags[nm] + " ");
nm++;
}
}
if (sb.Length > 0) log.InfoFormat(" {0}", sb.ToString());
}
}
}
}
}
#endregion
#region MigrateCode
private string[] defaultRole ={ "Administrator", "User Administrator", "RO Manager", "Writer", "Reviewer", "Guest" };
private string[] defaultRoleTitle = { "Manages Data - Backups, Approval etc.", "Maintains User Security", "Maintains Referenced Objects", "Can Edit", "Can potentially add comments", "Read-Only access to approved procedures" };
// defaultPermData sets the permission data (Permissions table) - columns are
// PermLevel, VersionType, PermValue (Note for vesam migration, PermAD is always allow, i.e. 0)
private int[,] defaultPermData = {
{2, 3, 15}, // Administrator
{1, 3, 15}, // User Administrator
{3, 3, 15}, // RO Manager
{5, 1, 15}, // Writer
{7, 3, 15}, // Reviewer
{2, 2, 1}}; // Guest
private int[] accessLevelSetup = { -1, 5, 4, 3, 0, 0, 2, 1 };
private int[] accessLevelTrans;
private Dictionary<int, Role> AddDefaultRoles()
{
Dictionary<int, Role> rdic = new Dictionary<int, Role>();
try
{
accessLevelTrans = new int[accessLevelSetup.Length];
for (int i = 0; i < 6; i++)
{
Role role = Role.New();
role.Name = defaultRole[i];
role.Title = defaultRoleTitle[i];
role.Save();
Permission perm = Permission.New();
perm.RID = role.RID;
perm.PermLevel = defaultPermData[i, 0];
perm.VersionType = defaultPermData[i, 1];
perm.PermValue = defaultPermData[i, 2];
perm.Save();
rdic.Add(role.RID, role);
for (int j = 1; j < accessLevelSetup.Length; j++)
{
if (accessLevelSetup[j] == i) accessLevelTrans[j] = role.RID;
}
}
}
catch (Exception ex)
{
log.ErrorFormat("Error setting default roles & permissions: {0}", ex.Message);
return null;
}
return rdic;
}
public bool VerifyFolders(Dictionary<ushort, Plant> dicPlants)
{
try
{
// For each folder from vesam, see if there is a matching folder already
// migrated...
FolderInfoList fil = FolderInfoList.Get();
// add the titles to a dictionary for quick checking
List<string> folderlist = new List<string>();
foreach (FolderInfo fi in fil)
{
folderlist.Add(fi.Title.ToUpper());
}
foreach (ushort u in dicPlants.Keys)
{
Plant pl = dicPlants[u];
bool foundplant = false;
if (folderlist.Contains(pl.Path.ToUpper())) foundplant=true;
if (!foundplant)
log.InfoFormat("Plant from vesam.opt not found in folder data: {0}", pl.Path);
else // if found, check for sets
{
foreach (ushort uu in pl.psDic.Keys)
{
ProcSet pr = pl.psDic[uu];
bool foundprocset = false;
foreach (FolderInfo fi in fil)
{
string tstpath = pl.Path.ToUpper() + "\\" + pr.Path.ToUpper();
if (tstpath == fi.Title.ToUpper())
{
foundprocset = true;
break;
}
}
if (!foundprocset) log.InfoFormat("Procedure Set from vesam.opt not found in folder data: {0}\\{1}", pl.Path, pr.Path);
}
}
}
}
catch (Exception ex)
{
log.ErrorFormat("error mapping vesam directories to data directories, error = {0}", ex.Message);
return false;
}
return true;
}
private Dictionary<string, int> LoadFolders()
{
FolderInfoList fldlist = FolderInfoList.Get();
Dictionary<string, int> fdic = new Dictionary<string, int>();
foreach (FolderInfo fi in fldlist)
{
fdic.Add(fi.Title.ToUpper(), fi.FolderID);
}
return fdic;
}
private bool TranslateToNew(VESamOpt vso, Dictionary<ushort, Plant> plntDic, List<OldUser> userList)
{
Dictionary<int, Role> rlpdic = AddDefaultRoles();
AddUsrGrpAsgnRecs(plntDic, userList);
return true;
}
private string VersionName(string s)
{
return s.Substring(s.LastIndexOf(" - ") + 3);
}
private string SetName(string s)
{
return s.Substring(0, s.LastIndexOf(" - "));
}
private string FixName(string s)
{
s = s.Replace(" - Working Draft (Unit 1)", " (Unit 1) - Working Draft");
s = s.Replace(" - Working Draft (Unit 2)", " (Unit 2) - Working Draft");
s = s.Replace(" - Current Approved Version", " - Approved Version");
return s.Replace(" - Working Draft", " - Working Draft");
}
private int CalcAccessLevel(int iBase, uint options, string sVersion)
{
if (sVersion == "Working Draft")
{
if (options == 0) return 0;
if ((options & 6528) != 0) return 5;
if ((options & 1024) != 0) return 4;
if ((options & 528) != 0) return 3;
return 2;
}
else
{
if (iBase != 0) return iBase;
else if (options != 0) return 1;
return 0;
}
}
private string SystemOption(uint options)
{
if ((options & 11) != 0) return "\"Admin\"";
if (options == 4) return "\"RO\"";
return "";
}
private void AddAccessRights(Dictionary<int, List<int>> dic, int folderId, int roleId)
{
if (!dic.ContainsKey(folderId)) dic[folderId] = new List<int>();
dic[folderId].Add(roleId);
}
private void AddUsrGrpAsgnRecs(Dictionary<ushort, Plant> plntDic, List<OldUser> userList)
{
Dictionary<string, List<string>> dicGroups = new Dictionary<string, List<string>>();
Dictionary<string, int> dicGroupIds = new Dictionary<string, int>();
Dictionary<string, int> dicOldFolders = new Dictionary<string, int>();
int oldFolderCount = 1;
dicOldFolders.Add("system", oldFolderCount++);
Dictionary<string, int> dicNewFolders = LoadFolders();
List<string> lstVersions = new List<string>();
StringBuilder sb;
OldUser frst = userList[0];
string[] accessLevel = { "", "\"Guest\"", "\"Reviewer\"", "\"Writer\"", "\"Admin\"", "\"Admin\"" };
foreach (OldUser usr in userList)
{
int sysAccess = 5;
Dictionary<PlantOptions, int> plantAccess = new Dictionary<PlantOptions, int>();
if ((usr.SystemOpts & 11) == 0)
{
foreach (PlantOptions po in usr.PlantOpts)
{
plantAccess[po] = 5;
Plant pl = (Plant)plntDic[po.Id];
if (!dicOldFolders.ContainsKey(pl.Path.ToUpper()))dicOldFolders.Add(pl.Path.ToUpper(), oldFolderCount++);
string sSetLast = "";
int iAccessLevel = 0;
foreach (ProcOptions psO in po.poList)
{
ProcSet ps = null;
try
{
ps = (ProcSet)pl.psDic[psO.Id];
}
catch (Exception ex)
{
MessageBox.Show("here");
}
if (!dicOldFolders.ContainsKey(pl.Path.ToUpper()+"\\"+ps.Path.ToUpper()))dicOldFolders.Add(pl.Path.ToUpper()+"\\"+ps.Path.ToUpper(), oldFolderCount++);
string sName = FixName(ps.Name);
string sVersion = VersionName(sName);
string sSet = SetName(sName);
if (sSet != sSetLast)
{
if (sSetLast != "")
{
// if the proc access is lower than the plant, reset plant level.
if (iAccessLevel < plantAccess[po]) plantAccess[po] = iAccessLevel;
iAccessLevel = 0;
}
sSetLast = sSet;
}
iAccessLevel = CalcAccessLevel(iAccessLevel, psO.Options[0], sVersion);
}
// do one last check to see if plant level should be lowered. Also
// check if the system level should be lowered.
if (iAccessLevel < plantAccess[po]) plantAccess[po] = iAccessLevel;
if (plantAccess[po] < sysAccess) sysAccess = plantAccess[po];
}
}
// set the system level access, i.e. User Admin, System Admin & RO Editor roles if
// necessary.
int systemid = dicOldFolders["system"];
Dictionary<int, List<int>> accessRights = new Dictionary<int, List<int>>();
if (usr.SystemOpts != 0) AddAccessRights(accessRights, systemid, accessLevelTrans[6]); // add ro editor
if ((usr.SystemOpts & 11) != 0)
{
AddAccessRights(accessRights, systemid, accessLevelTrans[5]); // add sys admin rights
AddAccessRights(accessRights, systemid, accessLevelTrans[7]); // and add user admin rights
}
else
{
// the user has a role at the system level that is not an admin,
// such as reviewer or guest - add it in.
if (sysAccess > 0) AddAccessRights(accessRights, systemid, accessLevelTrans[sysAccess]);
}
sb = new StringBuilder(string.Format("{0},{1}", (usr.SystemOpts == 0 ? "" : "Admin"), accessLevel[sysAccess]));
if ((usr.SystemOpts & 11) == 0)
{
foreach (PlantOptions po in usr.PlantOpts)
{
Plant pl = plntDic[po.Id];
// Need logic for po.Options in combination with PlantAccess[po]
//sb.Append(string.Format(",{0}", po.Options));
if (plantAccess[po] > sysAccess)
{
AddAccessRights(accessRights, dicOldFolders[pl.Path.ToUpper()], accessLevelTrans[plantAccess[po]]);
sb.Append(string.Format(",{0}", accessLevel[plantAccess[po]]));
}
else
sb.Append(",");
string sSetLast = "";
string sPathLast = "";
int iAccessLevel = 0;
string sPath = "";
foreach (ProcOptions psO in po.poList)
{
ProcSet ps = pl.psDic[psO.Id];
string sName = FixName(ps.Name);
string sVersion = VersionName(sName);
if (sVersion == "Working Draft") sPath = pl.Path + "\\" + ps.Path;
string sSet = SetName(sName);
if (sSet != sSetLast)
{
if (sSetLast != "")
{
if (iAccessLevel > plantAccess[po])
{
AddAccessRights(accessRights, dicOldFolders[sPathLast.ToUpper()], accessLevelTrans[iAccessLevel]);
sb.Append(string.Format(",{0}", accessLevel[iAccessLevel]));
}
else
sb.Append(",");
iAccessLevel = 0;
}
sSetLast = sSet;
sPathLast = sPath;
}
iAccessLevel = CalcAccessLevel(iAccessLevel, psO.Options[0], sVersion);
}
if (iAccessLevel > plantAccess[po])
{
AddAccessRights(accessRights, dicOldFolders[sPathLast.ToUpper()], accessLevelTrans[iAccessLevel]);
sb.Append(string.Format(",{0}", accessLevel[iAccessLevel]));
}
else
sb.Append(",");
}
}
string s = sb.ToString();
if (!dicGroups.ContainsKey(s))
{
dicGroups[s] = new List<string>();
Group grp = Group.New();
grp.GroupName = "Group " + dicGroups.Count.ToString();
int pathInData = -1;
foreach (int folderId in accessRights.Keys)
{
// see if this folderId exists in the data (rather
// than the list from vesam). If not, don't do an
// assignments record
pathInData = 0;
foreach (KeyValuePair<string, int> kvp in dicOldFolders)
{
if (kvp.Value == folderId)
{
string path = kvp.Key;
if (dicNewFolders.ContainsKey(path.ToUpper()))
pathInData = dicNewFolders[path.ToUpper()];
}
}
if (pathInData>0)
{
foreach (int roleId in accessRights[folderId])
{
grp.GroupAssignments.Add(roleId, pathInData);
}
}
}
grp.Save();
dicGroupIds[s] = grp.GID;
}
dicGroups[s].Add(usr.UserName);
}
foreach (string s in dicGroups.Keys)
{
foreach (string sUser in dicGroups[s])
{
// add user record & membership record.
User newusr = User.New();
newusr.UserID = sUser;
ConfigFile cfg = new ConfigFile();
cfg.LoadUsrCfg(newusr);
newusr.UserMemberships.Add(dicGroupIds[s]);
newusr.Save();
}
}
}
#endregion
}
#endregion
}

View File

@ -0,0 +1,383 @@
// ========================================================================
// 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.CSLA.Library;
namespace DataLoader
{
public partial class frmLoader : Form
{
private Section AddSection(string Number, string Title, DateTime Dts, string Userid, ConfigInfo ci, string stpseq, string fmt, int libdocid, string pth)
{
UpdateLabels(0, 1, 0);
try
{
string Format = null;
// do the format field, an xpath for the format & last part is column
// mode if a step section.
try
{
if (fmt != null && fmt != "")
{
if (fmt.IndexOf(' ') > -1) // will have spaces if it's a user format
{
string part1 = "/" + fmt.Substring(0, fmt.IndexOf(' ')) + "/";
string part2 = "USER=" + fmt.Substring(fmt.LastIndexOf(' ') + 1, 2);
Format = part1 + part2;
}
else
Format = "/" + fmt;
}
}
catch (Exception ex)
{
log.ErrorFormat("Error getting format {0}", ex.Message);
}
// tack on the column mode:
if (stpseq != null && stpseq.Substring(1, 1) == "0" && stpseq.Substring(5, 1) != " ") Format = Format + "/COL=" + stpseq.Substring(5, 1);
// find rtf file (or use the library document temp file) & read it into the field
// acccontent
int Contentid=0;
byte ContentType=0;
if (libdocid != 0 || stpseq.Substring(1, 1) != "0")
{
string fname = null;
if (libdocid != 0)
{
Contentid = libdocid;
ContentType = 2;
}
else
{
int num = Convert.ToInt32(stpseq[0]) - 64;
string thenum = num.ToString("d2");
fname = string.Format("{0}\\rtffiles\\{1}.A{2}", pth, ProcFileName, thenum);
Application.DoEvents();
SaveSectionDocument(fname, stpseq, ref ContentType, ref Contentid);
}
}
Section sec = Section.MakeSection(Number, Title,ContentType, Contentid, Format, ci.ToString(), Dts, Userid);
dicOldStepSequence[sec] = stpseq;
return sec;
}
catch (Exception ex)
{
log.Error("Save Section");
log.ErrorFormat("oldstepsequence = {0}", stpseq);
log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException);
log.ErrorFormat(ex.StackTrace);
}
return null;
}
private string SectTitle(OleDbConnection cn, DataRowView dr)
{
string tbuff = null;
string menustr = null;
bool UseMultiLineSectionTitle = false; // TODO KBR: format flag
if (UseMultiLineSectionTitle)
{
bool titleInMemo = false;
// for accessory pages...
if (dr["Step"].ToString().Substring(1, 1) != "0")
{
// The long section title is stored on a record with the "~" character.
// This was done since originally the actual accessory page data was stored in the memo
// field, so the long title could not be stored there, another record had to be used.
OleDbDataAdapter da = new OleDbDataAdapter("select * from " + ProcFileName + " where [Step] like '" + dr["Step"].ToString().Substring(0, 1) + "~';", cn);
DataSet ds = new DataSet();
try
{
da.Fill(ds);
if (ds.Tables[0].Rows.Count == 1)
{
DataRow row = ds.Tables[0].Rows[0];
tbuff = TextConvert.ConvertText(row["Textm"].ToString());
if (tbuff != null || tbuff[0] != '\0') titleInMemo = true;
}
else // no long section title existed for this accessory page
tbuff = TextConvert.ConvertText(dr["Text"].ToString().PadRight(130, ' ').Substring(0, 75).TrimEnd());
}
catch (Exception ex)
{
log.ErrorFormat("Error getting long section title {0}", ex.Message);
}
}
// For step sections, the long section title is stored on the section record
// (see above comment for accessory pages to see the difference)
else
{
tbuff = TextConvert.ConvertText(dr["TextM"].ToString().Trim());
}
//// TESTS were run & it looked like that whitespace was removed before saving,
//// so, put up a message box if find out otherwise....
int nl = tbuff.IndexOf("\n");
if (nl > -1)
MessageBox.Show("multiline text for section title, fix this!!");
//// remove newlines & any other escape/whitespace chars.
//int nl = tbuff.IndexOf("\n");
//if (nl > -1 || titleInMemo)
//{
// string tmpstr = tbuff.Replace("\r", "");
// tmpstr = tmpstr.Replace("\t", "");
// tmpstr = tmpstr.Replace("\n", " ");
// // get rid of multiple spaces
// while (tmpstr.IndexOf(" ") > -1) tmpstr = tmpstr.Replace(" ", " ");
// tbuff = tmpstr;
// if (tbuff.Substring(tbuff.Length-1, 1) == " ") tbuff = tbuff.Substring(0, tbuff.Length - 1);
//}
//menustr = tbuff;
}
else
{ // format does not include long section title
menustr = TextConvert.ConvertText(dr["Text"].ToString().PadRight(80, ' ').Substring(0, 75).TrimEnd());
}
return menustr;
}
private Int32 MigrateSection(Procedure prc, OleDbConnection cn, DataRowView dr, DataTable dt, Byte FromType, Int32 FromID, bool isSubSection, string pth)
{
Int32 thesectid = 0;
bool islibdoc = false;
//bool hasxml = false;
string s = dr["text"].ToString().PadRight(130, ' ');
string num = s.Substring(85, 20).TrimEnd();
string fmt = s.Substring(75, 10).TrimEnd();
string title = SectTitle(cn, dr);
string init = dr["initials"].ToString().Trim();
string sequence = dr["CSequence"].ToString().PadRight(10);
string step = dr["CStep"].ToString();
int libDocid = 0;
DateTime dts = GetDTS(dr["Date"].ToString(), dr["Time"].ToString());
ConfigInfo ci = new ConfigInfo(null);
// for steps sections...
// Step Section Header Format:
// A0 1X2S51 &Y
// ^^^^^^^^^^^^
// |||||||||||||
// ||||||||||||`- 'Y','N', or blank signals to print section header - lib/section/addsec.c
// |||||||||||`-- (bits) Auto Indent, Editable Data, Checkoff Header Type - lib/section/addsec.c
// ||||||||||`--- blank
// ||||||||`----- Link With Enhanced Document ' '-Default(not determined) 0-NO 1-YES
// |||||||`------ MetaSection - number of subsections is given
// ||||||`------- S-Separate(PageBreak); T-Continuous; ' '-Default
// |||||`-------- Column mode (1,2,3,' '-default)
// ||||`--------- X -only proc section; x -orig. proc; ' ' -other
// |||`---------- Position within the procedure
// ||`----------- ALWAYS leave blank
// |`------------ Step Section Header marker
// `------------- Internal section number (starts at A)
if (step.Substring(1, 1) == "0")
{
// if this section has the original edit section flag (sequence[2]) save the id.
// set pagination, continuous, separate. If blank, don't create attribute - uses format default.
if (sequence.Substring(4, 1) == "T")
{
ci.AddItem("Section", "Pagination", "C");
//hasxml = SetXml(xmldoc, topElement, "Section", "Pagination", "C");
}
else if (sequence.Substring(4, 1) == "S")
{
ci.AddItem("Section", "Pagination", "S");
//hasxml = SetXml(xmldoc, topElement, "Section", "Pagination", "S");
}
// Step: linked to enhanced (!exist = N)
if (sequence.Substring(7, 1) == "1")
{
ci.AddItem("Step", "LnkEnh", "Y");
//hasxml = SetXml(xmldoc, topElement, "Step", "LnkEnh", "Y");
}
char cbittst = sequence.PadRight(10)[8];
if (cbittst == ' ') cbittst = '\0';
// determine if TOC element (!exist = N)
if ((cbittst & TOC) > 1)
{
ci.AddItem("Section", "TOC", "Y");
//hasxml = SetXml(xmldoc, topElement, "Section", "TOC", "Y");
}
// determine if autogenerated section (!exist = N)
if ((cbittst & AUTOGEN) > 1)
{
ci.AddItem("Section", "AutoGen", "Y");
//hasxml = SetXml(xmldoc, topElement, "Section", "AutoGen", "Y");
}
// Here are subsection flags, i.e. the following are only set if this
// is a subsection.
bool didsub = false;
if (isSubSection)
{
// Subsection: editable (!exist = Y)
if ((cbittst & EDDATA) > 0)
{
ci.AddItem("SubSection", "Edit", "N");
//SetXml(xmldoc, topElement, "SubSection", "Edit", "N");
}
// Subsection: print section headers (!exist = Y)
if ((cbittst & PH) > 0)
{
didsub = true;
ci.AddItem("SubSection", "PH", "N");
//SetXml(xmldoc, topElement, "SubSection", "PH", "N");
}
// Subsection: autoindent (!exist = Y)
if ((cbittst & AUTOIND) > 0)
{
ci.AddItem("SubSection", "AutoIndent", "N");
//SetXml(xmldoc, topElement, "SubSection", "AutoIndent", "N");
}
}
if (!didsub && sequence.Substring(4, 1) == "N")
{
ci.AddItem("SubSection", "PH", "N");
//SetXml(xmldoc, topElement, "SubSection", "PH", "N");
}
}
else
{
// Accessory Section Format:
// AI 1 2
// ^^ ^ ^
// || | |
// || | `- # of pages (ASCII value minus 48)
// || `--- Position within the procedure
// |`----- Acc. page type (A,I, or F)
// `------ Internal section number (starts at A)
ci.AddItem("Section", "NumPages", sequence.Substring(3, 1));
//hasxml = SetXml(xmldoc, topElement, "Section", "NumPages", sequence.Substring(3, 1));
// see if it's a libdoc too.0
string thekey = prc.Number.PadRight(20) + step.Substring(0, 1).PadRight(10);
if (dicLibDocRef.ContainsKey(thekey))
{
// if it is a library document, see if the section record has already been
// saved. If it has, just use this section id, otherwise, create the
// section record with info from the library document file.
libDocid = dicLibDocRef[thekey];
islibdoc = true;
}
}
Section sec = AddSection(num, title, dts, init, ci, step + sequence, fmt, libDocid, pth);
thesectid = sec.SectID;
// if this section has the original edit section flag (sequence[2]) save the id.
if (!islibdoc && step[1] == '0' && (sequence[2] == 'x' || sequence[2] == 'X'))
EditSectId = thesectid;
// ContentType (2 in the following call) are:
// 0 = structure,
// 1 = procedure,
// 2 = section,
// 3 = step
// 4 = branch
// fromtype values are (see steps.cs too)
// 0 = next of same type
// 1 = procedure,
// 2 = section,
// 3 = caution
// 4 = note
// 5 = RNO
// 6 = substep
// 7 = table
Structure str = AddStructure(FromType, FromID, 2, thesectid, step + sequence, dts, init);
// Process the Data Table - First look for High Level Steps
string sQry = string.Format("Step like '[{0}]%' and Sequence='S'", dr["Step"].ToString().Substring(0, 1));
DataView dv = new DataView(dt, sQry, "StepNo", DataViewRowState.CurrentRows);
Byte FrType = 6;
Int32 FrID = 0;
pbStep.Maximum = dt.Rows.Count;
pbStep.Value = 0;
foreach (DataRowView drv in dv)
{
FrID = MigrateStep(cn, dt, drv, FrType, FrID);
if (sec.ContentID == 0)
{
sec.ContentID = FrID;
sec.ContentType = 1;
sec.Save(true);
}
FrType = 0;
}
return str.StructureID;
}
private void LoadSection(DataSet ds, OleDbDataAdapter da, string FileName)
{
try
{
da.Fill(ds, "Sections");
DataTable dt = ds.Tables["Sections"];
dt.CaseSensitive = true;
dt.Columns.Add("CStep", System.Type.GetType("System.String"));
dt.Columns.Add("CSequence", System.Type.GetType("System.String"));
// set the cstep & csequence - couldn't do it in the add because it needed a sql function
foreach (DataRow drw in ds.Tables["Sections"].Rows)
{
drw["CStep"] = TextConvert.ConvertSeq(drw["Step"].ToString());
drw["CSequence"] = TextConvert.ConvertSeq(drw["Sequence"].ToString());
}
dt.Columns.Add("StepNo", System.Type.GetType("System.Int32"), "Convert(Convert(Substring(CStep,2,1),'System.Char'),'System.Int32')-48");
dt.Columns.Add("Level", System.Type.GetType("System.Int32"), "Len(CSequence)");
dt.Columns.Add("SubStepNo", System.Type.GetType("System.Int32"), "Convert(Convert(Substring(CSequence,Len(CSequence),1),'System.Char'),'System.Int32')-48");
dt.Columns.Add("locb", System.Type.GetType("System.Int32"), "Convert(Convert(Substring(CSequence,2,1),'System.Char'),'System.Int32')-48");
}
catch (Exception ex)
{
FileInfo fi;
switch (ex.Message)
{
case "Index file not found.":// then delete inf file
fi = new FileInfo(tbSource.Text + "\\" + FileName + ".inf");
fi.Delete();
LoadSection(ds, da, FileName);// Try Again
break;
case "External table is not in the expected format.": // then pad dbt file with 128 zeros.
fi = new FileInfo(tbSource.Text + "\\" + FileName + ".dbt");
FileStream fs = fi.OpenWrite();
fs.Position = fs.Length;
byte[] buf = new byte[128];
for (int i = 0; i < 128; i++) buf[i] = 0;
fs.Write(buf, 0, 128);
fs.Close();
LoadSection(ds, da, FileName);// Try Again
break;
default: // Unrecognized error
log.ErrorFormat("File - {0}.DBF\r\n\r\n{1}\r\n\r\n{2}", FileName, ex.Message, ex.InnerException);
break;
}
}
}
}
}

307
PROMS/DataLoader/Steps.cs Normal file
View File

@ -0,0 +1,307 @@
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.CSLA.Library;
namespace DataLoader
{
public partial class frmLoader : Form
{
private Step AddStep(OleDbConnection cn, string StepType, string Textm, string Recid, string stpseq, string structtype, int structid, DateTime dts, string userid)
{
Step stp = null;
UpdateLabels(0, 0, 1);
bool hasxml = false;
ConfigInfo ci = new ConfigInfo(null);
string stptext = null;
int tok = -1;
char[] chrarr = { '\x1', '\x2', '\x3', '\x5' };
try
{
// the textm field has step text, but also may have other text stored
// with it with a 'token' as a separator (see below).
tok = Textm.IndexOfAny(chrarr);
if (tok < 0)
stptext = TextConvert.ConvertText(Textm);
else
stptext = TextConvert.ConvertText(Textm.Substring(0, tok));
string seqcvt = TextConvert.ConvertSeq(stpseq);
// Figure marker - it should NEVER get here!!!
int tokfig = Textm.IndexOf('\xE8');
if (tokfig > -1)
{
log.Error("Found a old style figure!");
log.ErrorFormat("oldstepsequence = {0}", stpseq);
}
// Before we save it, handle RO & Transitions tokens.
int tokrt = Textm.IndexOf('\x15');
if (tokrt > -1) stptext = MigrateRos(cn, stptext, seqcvt, structid);
// 16-bit code has the following two defines.
// #define TransitionMarker 0xC2
// #define ReferenceMarker 0xCB
// these two characters get converted (to unicode) from ado.net
// use the unicode chars.
char[] chrrotrn = { '\x252C', '\x2566' };
tokrt = Textm.IndexOfAny(chrrotrn);
if (tokrt > -1) stptext = MigrateTrans(cn, stptext, seqcvt, structid);
TextM tm = TextM.MakeTextM(stptext);
stp = Step.MakeStep(StepType, tm.TextMID, null, dts, userid);
dicOldStepSequence[stp] = seqcvt;
}
catch (Exception ex)
{
log.Error("Save Step");
log.ErrorFormat("oldstepsequence = {0}", stpseq);
log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException);
log.ErrorFormat(ex.StackTrace);
stp = null;
}
// now add on any support pieces of text associated with the step.
// These include:
// '\1' comment
// '\2' multiple change ids and/or change message
// '\3' linked sequence
// '\3\3'override tab
// '\5' continuous action summary flag
try
{
while (tok >= 0 && tok != Textm.Length)
{
int nxttok = Textm.IndexOfAny(chrarr, tok + 1);
char chr = Textm[tok];
int typ = 0;
if (chr == '\x1')
typ = STP_COMMENT;
else if (chr == '\x2')
typ = STP_MULT_CHGID;
else if (chr == '\x3')
{
typ = STP_LNK_SEQ;
// check for a double \3 - override tab.
if (tok + 1 < Textm.Length)
{
char nxttokchr = Textm[tok + 1];
if (nxttokchr == '\x3')
{
typ = STP_OVR_TAB;
tok++; // this was a double \3, get past 1st one.
nxttok = Textm.IndexOfAny(chrarr, tok + 1);
}
}
}
else if (chr == '\x5')
{
ci.AddItem("Step", "ContActSum", "True");
//hasxml = SetXml(xmldoc, topElement, "Step", "ContActSum", "True");
if (nxttok < 0) nxttok = Textm.Length;
}
// if not xml, i.e. chr=='\x5', make a textm element
if (chr != '\x5')
{
if (nxttok < 0) nxttok = Textm.Length;
// if this is a sequence number - may need to convert hi-end chars
string str = null;
if (typ == STP_LNK_SEQ)
str = TextConvert.ConvertSeq(Textm.Substring(tok + 1, nxttok - tok - 1));
else
str = Textm.Substring(tok + 1, nxttok - tok - 1);
//StepText stptxt = StepText.MakeStepText(typ, str, true);
//stptxt.ItemType = typ;
//stptxt.Textm = str;
//stp.StepStepTexts.Add(
}
tok = nxttok;
}
// also see if a check-off needs added.
if (Recid[0] != '0')
{
string chkindx = Recid[0].ToString();
ci.AddItem("Step", "CheckOffIndex", chkindx);
//hasxml = SetXml(xmldoc, topElement, "Step", "CheckOffIndex", chkindx);
}
// here's where it knows if it's a linked step (or in processstep)
if (Recid[1] != '0')
{
// do linked step stuff.
}
// if checkoffs or the continuous action summary flag, save the xml.
if (hasxml)
{
stp.Config = ci.ToString();
stp.Save(true);
}
// if this has associated steptext, such as tab override or comment,
// save it.
//else if (stp.StepStepTexts.Count > 0)
// stp.Save(true);
}
catch (Exception ex)
{
log.Error("Save Step part 2");
log.ErrorFormat("oldstepsequence = {0}", stpseq);
log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException);
log.ErrorFormat(ex.StackTrace);
}
return stp;
}
// private void ProcessSubStep(DataTable dt,DataRowView drv,StepTbl stpP)
// {
// // TODO: Need logic for TextM Support
// StepTbl stp = AddStep(stpP,drv["Type"].ToString(),drv["Text"].ToString(),drv["Step"].ToString()+drv["sequence"].ToString());
// // TODO: Logic to add Sub-steps
// string sPre = drv["Sequence"].ToString();
// ProcessSubSteps(dt,drv["Step"].ToString(),sPre+"[*!]?",stp);// Cautions and Notes
// ProcessSubSteps(dt,drv["Step"].ToString(),sPre+"$",stp);// RNOs
// ProcessSubSteps(dt,drv["Step"].ToString(),sPre+"?",stp);// Substeps
// //ProcessSubSteps(dt,drv["Step"],"S_",stp);// Tables
// }
// private void ProcessSubSteps(DataTable dt,string step,string lookfor,StepTbl stp)
// {
// DataView dv = new DataView(dt,"Step='" + step + "' and Sequence like'" + lookfor + "'",
// "sequence",DataViewRowState.OriginalRows);
// foreach(DataRowView drv in dv)
// {
// ProcessSubStep(dt,drv,stp);
// }
// }
private string GetParent(string s)
{
string retval = "S";
if (s.Length > 1)
{
int l = s.Length;
if ("!*".IndexOf(s[l - 2]) > -1)
{
if (l > 2) retval = s.Substring(0, l - 2);
}
else
{
retval = s.Substring(0, l - 1);
}
}
return retval;
}
private string GetStructType(string s)
{
string retval = "S";
if (s.Length > 1)
{
int l = s.Length;
if ("!*".IndexOf(s[l - 2]) > -1)
{
if (s[l - 2] == '!') retval = "C";
else retval = "N";
}
else
{
if (s[l - 1] == '$') retval = "R";
if (s[l - 1] == '#') retval = "T";
}
}
return retval;
}
private Int32 MigrateStep(OleDbConnection cn, DataTable dt, DataRowView drv, Byte FromType, Int32 FromID)
{
try
{
int tmpid = 1;
// Do the structure record first because usages from the step require a structure
// id.
string sType = GetStructType(drv["CSequence"].ToString());
// Structures str = AddStructure(FromType, FromID, (byte)(3 + ("CNRST".IndexOf(sType))), tmpid, drv["CStep"].ToString() + drv["CSequence"].ToString(),
Structure str = AddStructure(FromType, FromID, 3, tmpid, drv["CStep"].ToString() + drv["CSequence"].ToString(),
GetDTS(drv["Date"].ToString(), drv["Time"].ToString()), drv["Initials"].ToString());
Step stp = AddStep(cn, drv["Type"].ToString()
, (drv["textm"] == DBNull.Value ? drv["Text"].ToString() : drv["Textm"].ToString())
, drv["Recid"].ToString(), drv["CStep"].ToString() + drv["CSequence"].ToString(), "S", str.StructureID
, GetDTS(drv["Date"].ToString(), drv["Time"].ToString()), drv["Initials"].ToString());
str.ContentID = stp.StepID;
str.Save(true);
Dictionary<string, Step> dicStep = new Dictionary<string, Step>();
dicStep[drv["CSequence"].ToString()] = stp;
Dictionary<string, Dictionary<string, int>> dicStruct = new Dictionary<string, Dictionary<string, int>>();
Dictionary<string, int> dicBase = new Dictionary<string, int>();
dicStruct[drv["CSequence"].ToString()] = dicBase;
dicBase[""] = str.StructureID;
// Logic to add Sub-steps
string sQry = "CStep = '" + drv["CStep"].ToString() + "' and CSequence <> 'S'";
// sort order - for sections use currentrows.
DataView dv = new DataView(dt, sQry, "StepNo,Level,SubStepNo", DataViewRowState.CurrentRows);
//dataGrid1.DataSource=dv;
//Loop through DataView and add Steps one at a time
//Console.WriteLine("={0}",drv["Step"]);
Byte FrType = 0;
Int32 FrID = str.StructureID;
foreach (DataRowView drvs in dv)
{
//Console.WriteLine(">{0}",drvs["CStep"]);
string sParent = GetParent(drvs["CSequence"].ToString());
if (dicStep.ContainsKey(sParent))
{
Step stpp = dicStep[sParent];
sType = GetStructType(drvs["CSequence"].ToString());
Dictionary<string,int> dicStr = dicStruct[sParent];
if (dicStr.ContainsKey(sType))
{
FrID = (Int32)dicStr[sType];
FrType = 0;
}
else
{
FrID = (Int32)dicStr[""];
FrType = (byte)(3 + ("CNRST".IndexOf(sType)));
}
Structure str1 = AddStructure(FrType, FrID, 3, tmpid++, drvs["CStep"].ToString() + drvs["CSequence"].ToString(),
GetDTS(drvs["Date"].ToString(), drvs["Time"].ToString()), drvs["Initials"].ToString());
Step stpc = AddStep(cn, drvs["Type"].ToString()
, (drvs["textm"] == DBNull.Value ? drvs["Text"].ToString() : drvs["Textm"].ToString())
, drv["Recid"].ToString(), drvs["CStep"].ToString() + drvs["CSequence"].ToString(), GetStructType(drvs["sequence"].ToString()), str1.StructureID
, GetDTS(drvs["Date"].ToString(), drvs["Time"].ToString()), drvs["Initials"].ToString());
str1.ContentID = stpc.StepID;
str1.Save(true);
dicStep[drvs["CSequence"].ToString()] = stpc;
dicBase = new Dictionary<string, int>();
dicStruct[drvs["CSequence"].ToString()] = dicBase;
dicBase[""] = str1.StructureID;
dicStr[sType] = str1.StructureID;
}
else
{
log.ErrorFormat("Parent {0} Could not be found for {1}", sParent, drvs["sequence"].ToString());
}
}
return str.StructureID;
}
catch (Exception ex)
{
log.Error("PROCESS STEP");
log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException);
log.ErrorFormat(ex.StackTrace);
return 0;
}
//return 0;
}
}
}

View File

@ -0,0 +1,70 @@
// ========================================================================
// 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.CSLA.Library;
namespace DataLoader
{
public partial class frmLoader : Form
{
private Structure AddStructure(byte FromType, int FromID, byte ContentType, int ContentID, string stpseq,
DateTime dts, string userid)
{
Structure str = null;
string str_key = ProcNumber + "|";
switch (ContentType)
{
case 1:
str_key += stpseq;
break;
case 2:
str_key += stpseq.Substring(0, 1)+"0";
break;
default:
str_key += stpseq;
break;
}
if (dicTrans_StrIds.ContainsKey(str_key))
{
str = Structure.Get(dicTrans_StrIds[str_key]);
str.FromID = FromID;
str.FromType = FromType;
str.ContentID = ContentID;
str.ContentType = ContentType;
str.DTS = dts;
str.UserID = (userid==null||userid=="")?"empty":userid;
str.Save(true); ;
dicTrans_StrIds.Remove(str_key);
}
else
{
str = Structure.MakeStructure(FromType, FromID, ContentType, ContentID, dts, userid);
}
if (dicTrans_StrDone.ContainsKey(str_key))
log.ErrorFormat("Duplicate proc/sequence number during structure migration: {0}", str_key);
else
dicTrans_StrDone.Add(str_key, str.StructureID);
return str;
}
}
}

View File

@ -0,0 +1,120 @@
// ========================================================================
// 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.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
namespace DataLoader
{
public static class TextConvert
{
static TextConvert()
{
BuildDictionarySeq();
BuildDictionaryText();
}
private static Dictionary<int, int> dicChar;
public static void BuildDictionarySeq()
{
dicChar = new Dictionary<int, int>();
for (int i = 0; i < 128; i++) dicChar[i] = i;
dicChar[199] = 128; dicChar[252] = 129; dicChar[233] = 130; dicChar[226] = 131;
dicChar[228] = 132; dicChar[224] = 133; dicChar[229] = 134; dicChar[231] = 135;
dicChar[234] = 136; dicChar[235] = 137; dicChar[232] = 138; dicChar[239] = 139;
dicChar[238] = 140; dicChar[236] = 141; dicChar[196] = 142; dicChar[197] = 143;
dicChar[201] = 144; dicChar[230] = 145; dicChar[198] = 146; dicChar[244] = 147;
dicChar[246] = 148; dicChar[242] = 149; dicChar[251] = 150; dicChar[249] = 151;
dicChar[255] = 152; dicChar[214] = 153; dicChar[220] = 154; dicChar[162] = 155;
dicChar[163] = 156; dicChar[165] = 157; dicChar[8359] = 158; dicChar[402] = 159;
dicChar[225] = 160; dicChar[237] = 161; dicChar[243] = 162; dicChar[250] = 163;
dicChar[241] = 164; dicChar[209] = 165; dicChar[170] = 166; dicChar[186] = 167;
dicChar[191] = 168; dicChar[8976] = 169; dicChar[172] = 170; dicChar[189] = 171;
dicChar[188] = 172; dicChar[161] = 173; dicChar[171] = 174; dicChar[187] = 175;
dicChar[9617] = 176; dicChar[9618] = 177; dicChar[9619] = 178; dicChar[9474] = 179;
dicChar[9508] = 180; dicChar[9569] = 181; dicChar[9570] = 182; dicChar[9558] = 183;
dicChar[9557] = 184; dicChar[9571] = 185; dicChar[9553] = 186; dicChar[9559] = 187;
dicChar[9565] = 188; dicChar[9564] = 189; dicChar[9563] = 190; dicChar[9488] = 191;
dicChar[9492] = 192; dicChar[9524] = 193; dicChar[9516] = 194; dicChar[9500] = 195;
dicChar[9472] = 196; dicChar[9532] = 197; dicChar[9566] = 198; dicChar[9567] = 199;
dicChar[9562] = 200; dicChar[9556] = 201; dicChar[9577] = 202; dicChar[9574] = 203;
dicChar[9568] = 204; dicChar[9552] = 205; dicChar[9580] = 206; dicChar[9575] = 207;
dicChar[9576] = 208; dicChar[9572] = 209; dicChar[9573] = 210; dicChar[9561] = 211;
dicChar[9560] = 212; dicChar[9554] = 213; dicChar[9555] = 214; dicChar[9579] = 215;
dicChar[9578] = 216; dicChar[9496] = 217; dicChar[9484] = 218; dicChar[9608] = 219;
dicChar[9604] = 220; dicChar[9612] = 221; dicChar[9616] = 222; dicChar[9600] = 223;
dicChar[945] = 224; dicChar[223] = 225; dicChar[915] = 226; dicChar[960] = 227;
dicChar[931] = 228; dicChar[963] = 229; dicChar[181] = 230; dicChar[964] = 231;
dicChar[934] = 232; dicChar[920] = 233; dicChar[937] = 234; dicChar[948] = 235;
dicChar[8734] = 236; dicChar[966] = 237; dicChar[949] = 238; dicChar[8745] = 239;
dicChar[8801] = 240; dicChar[177] = 241; dicChar[8805] = 242; dicChar[8804] = 243;
dicChar[8992] = 244; dicChar[8993] = 245; dicChar[247] = 246; dicChar[8776] = 247;
dicChar[176] = 248; dicChar[8729] = 249; dicChar[183] = 250; dicChar[8730] = 251;
dicChar[8319] = 252; dicChar[178] = 253; dicChar[9632] = 254; dicChar[160] = 255;
}
public static string ConvertSeq(string s1)
{
Encoding Eibm437 = Encoding.GetEncoding(437);
Encoding Eunicode = Encoding.Unicode;
Decoder d = Eibm437.GetDecoder();
Byte[] bs1 = Eunicode.GetBytes(s1);
Byte[] bs2 = Encoding.Convert(Eunicode, Eibm437, bs1);
char[] cs2 = new char[Eibm437.GetCharCount(bs2)];
for (int i = 0; i < cs2.Length; i++) cs2[i] = (char)bs2[i];
return new string(cs2);
}
public static Regex Reg2;
public static void BuildDictionaryText()
{
dicChar = new Dictionary<int, int>();
dicChar[966] = 216;
dicChar[201] = 274;
dicChar[127] = 916;
dicChar[964] = 947;
dicChar[920] = 952;
dicChar[915] = 961;
dicChar[191] = 964;
dicChar[8801] = 8773;
dicChar[8734] = 8857;
dicChar[7] = 9679;
dicChar[8976] = 9830;
char[] creg = new char[dicChar.Count];
int i = 0;
foreach (int ic in dicChar.Keys)
{
creg[i] = (char)ic;
i++;
}
Reg2 = new Regex("[" + new string(creg) + "]");
}
public static string ReplaceChars(Match m)
{
char[] cs = m.Value.ToCharArray();
for (int i = 0; i < cs.Length; i++)
{
if (dicChar.ContainsKey((int)(cs[i])))
{
int iKey = (int)cs[i];
int iValue = dicChar[iKey];
cs[i] = (char)iValue;
}
}
return new string(cs);
}
public static string ConvertText(string s1)
{
string s2 = Reg2.Replace(s1, new MatchEvaluator(ReplaceChars));
return s2;
}
}
}

View File

@ -0,0 +1,139 @@
// ========================================================================
// 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.CSLA.Library;
namespace DataLoader
{
public partial class frmLoader : Form
{
private int AddTrans(int fromId, DataRow dr)
{
//TODO: ZTransitions tr.Oldto = dr["OLDTO"].ToString();
string thekey = dr["TONUMBER"].ToString() + "|" + dr["TOSEQUENCE"].ToString();
string dti = dr["DTI"].ToString().PadRight(18, ' ');
string userid = dti.Substring(13, 5).Trim();
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.
int toid;
if (dicTrans_StrDone.ContainsKey(thekey))
toid = dicTrans_StrDone[thekey];
else
{
if (dicTrans_StrIds.ContainsKey(thekey))
toid = dicTrans_StrIds[thekey];
else
{
Structure str = Structure.MakeStructure(0, 0, 0, 0);
toid = str.StructureID;
dicTrans_StrIds.Add(thekey, toid);
}
}
Transition tr = Transition.MakeTransition(fromId, toid, System.Convert.ToInt32(dr["TYPE"].ToString()),0,0,0,0,dts,userid);
return tr.TransitionId;
}
private string MigrateTrans(OleDbConnection cn, string textm, string seqcvt, int structId)
{
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 usage records for step, check data ");
log.ErrorFormat("from number = {0} oldstepsequence = {1}", ProcNumber, seqcvt);
}
else
{
DataRow dr = dt.Rows[instance];
int trid = AddTrans(structId, dr);
trtxt.Append(textm[tok]);
trtxt.Append("{{");
trtxt.Append(trid.ToString());
trtxt.Append("}}");
}
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 usage records for step, check data ");
log.ErrorFormat("from number = {0} oldstepsequence = {1}", ProcNumber, seqcvt);
}
return trtxt.ToString();
}
private void ShowMissingTransitions()
{
log.Info("Missing Transitions");
foreach (string s in dicTrans_StrIds.Keys)
{
log.InfoFormat("{0} - {1}", s, dicTrans_StrIds[s]);
}
log.Info("End of Missing Transitions");
}
}
}

382
PROMS/DataLoader/frmLoader.Designer.cs generated Normal file
View File

@ -0,0 +1,382 @@
namespace DataLoader
{
partial class frmLoader
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.sc = new System.Windows.Forms.SplitContainer();
this.btnVETree_CSLA = new System.Windows.Forms.Button();
this.btnBrowseVesam = new System.Windows.Forms.Button();
this.tbVesamPath = new System.Windows.Forms.TextBox();
this.btnVesam = new System.Windows.Forms.Button();
this.btnLoadTreeCSLA = new System.Windows.Forms.Button();
this.cbLazy = new System.Windows.Forms.CheckBox();
this.btnConvertSelected = new System.Windows.Forms.Button();
this.btnLoadTreeDB = new System.Windows.Forms.Button();
this.cbPurgeData = new System.Windows.Forms.CheckBox();
this.lblTime = new System.Windows.Forms.Label();
this.pbStep = new System.Windows.Forms.ProgressBar();
this.pbSect = new System.Windows.Forms.ProgressBar();
this.pbProc = new System.Windows.Forms.ProgressBar();
this.cbSaveDoc = new System.Windows.Forms.CheckBox();
this.cbSaveRTF = new System.Windows.Forms.CheckBox();
this.btnBrowse = new System.Windows.Forms.Button();
this.tbSource = new System.Windows.Forms.TextBox();
this.lblStep = new System.Windows.Forms.Label();
this.lblSection = new System.Windows.Forms.Label();
this.lblProc = new System.Windows.Forms.Label();
this.btnConvert = new System.Windows.Forms.Button();
this.tv = new System.Windows.Forms.TreeView();
this.fbd = new System.Windows.Forms.FolderBrowserDialog();
this.btnGroup = new System.Windows.Forms.Button();
this.sc.Panel1.SuspendLayout();
this.sc.Panel2.SuspendLayout();
this.sc.SuspendLayout();
this.SuspendLayout();
//
// sc
//
this.sc.Dock = System.Windows.Forms.DockStyle.Fill;
this.sc.Location = new System.Drawing.Point(0, 0);
this.sc.Margin = new System.Windows.Forms.Padding(2);
this.sc.Name = "sc";
this.sc.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// sc.Panel1
//
this.sc.Panel1.Controls.Add(this.btnGroup);
this.sc.Panel1.Controls.Add(this.btnVETree_CSLA);
this.sc.Panel1.Controls.Add(this.btnBrowseVesam);
this.sc.Panel1.Controls.Add(this.tbVesamPath);
this.sc.Panel1.Controls.Add(this.btnVesam);
this.sc.Panel1.Controls.Add(this.btnLoadTreeCSLA);
this.sc.Panel1.Controls.Add(this.cbLazy);
this.sc.Panel1.Controls.Add(this.btnConvertSelected);
this.sc.Panel1.Controls.Add(this.btnLoadTreeDB);
this.sc.Panel1.Controls.Add(this.cbPurgeData);
this.sc.Panel1.Controls.Add(this.lblTime);
this.sc.Panel1.Controls.Add(this.pbStep);
this.sc.Panel1.Controls.Add(this.pbSect);
this.sc.Panel1.Controls.Add(this.pbProc);
this.sc.Panel1.Controls.Add(this.cbSaveDoc);
this.sc.Panel1.Controls.Add(this.cbSaveRTF);
this.sc.Panel1.Controls.Add(this.btnBrowse);
this.sc.Panel1.Controls.Add(this.tbSource);
this.sc.Panel1.Controls.Add(this.lblStep);
this.sc.Panel1.Controls.Add(this.lblSection);
this.sc.Panel1.Controls.Add(this.lblProc);
this.sc.Panel1.Controls.Add(this.btnConvert);
//
// sc.Panel2
//
this.sc.Panel2.Controls.Add(this.tv);
this.sc.Size = new System.Drawing.Size(623, 413);
this.sc.SplitterDistance = 172;
this.sc.SplitterWidth = 3;
this.sc.TabIndex = 46;
//
// btnVETree_CSLA
//
this.btnVETree_CSLA.Location = new System.Drawing.Point(293, 121);
this.btnVETree_CSLA.Name = "btnVETree_CSLA";
this.btnVETree_CSLA.Size = new System.Drawing.Size(145, 21);
this.btnVETree_CSLA.TabIndex = 68;
this.btnVETree_CSLA.Text = "Load VETree from CSLA";
this.btnVETree_CSLA.UseVisualStyleBackColor = true;
this.btnVETree_CSLA.Click += new System.EventHandler(this.btnVETree_CSLA_Click);
//
// btnBrowseVesam
//
this.btnBrowseVesam.Location = new System.Drawing.Point(479, 150);
this.btnBrowseVesam.Margin = new System.Windows.Forms.Padding(2);
this.btnBrowseVesam.Name = "btnBrowseVesam";
this.btnBrowseVesam.Size = new System.Drawing.Size(119, 19);
this.btnBrowseVesam.TabIndex = 67;
this.btnBrowseVesam.Text = "Browse for Vesam...";
this.btnBrowseVesam.UseVisualStyleBackColor = true;
this.btnBrowseVesam.Click += new System.EventHandler(this.btnBrowseVesam_Click);
//
// tbVesamPath
//
this.tbVesamPath.Location = new System.Drawing.Point(114, 150);
this.tbVesamPath.Name = "tbVesamPath";
this.tbVesamPath.Size = new System.Drawing.Size(353, 20);
this.tbVesamPath.TabIndex = 66;
this.tbVesamPath.Text = "e:\\ve-proms\\vesam.opt";
//
// btnVesam
//
this.btnVesam.Location = new System.Drawing.Point(2, 148);
this.btnVesam.Name = "btnVesam";
this.btnVesam.Size = new System.Drawing.Size(108, 21);
this.btnVesam.TabIndex = 65;
this.btnVesam.Text = "Convert Security";
this.btnVesam.UseVisualStyleBackColor = true;
this.btnVesam.Click += new System.EventHandler(this.btnVesam_Click);
//
// btnLoadTreeCSLA
//
this.btnLoadTreeCSLA.Location = new System.Drawing.Point(295, 96);
this.btnLoadTreeCSLA.Name = "btnLoadTreeCSLA";
this.btnLoadTreeCSLA.Size = new System.Drawing.Size(144, 20);
this.btnLoadTreeCSLA.TabIndex = 64;
this.btnLoadTreeCSLA.Text = "Load Tree from CSLA";
this.btnLoadTreeCSLA.UseVisualStyleBackColor = true;
this.btnLoadTreeCSLA.Click += new System.EventHandler(this.btnLoadTreeCSLA_Click);
//
// cbLazy
//
this.cbLazy.AutoSize = true;
this.cbLazy.Checked = true;
this.cbLazy.CheckState = System.Windows.Forms.CheckState.Checked;
this.cbLazy.Location = new System.Drawing.Point(11, 126);
this.cbLazy.Margin = new System.Windows.Forms.Padding(2);
this.cbLazy.Name = "cbLazy";
this.cbLazy.Size = new System.Drawing.Size(75, 17);
this.cbLazy.TabIndex = 63;
this.cbLazy.Text = "Lazy Load";
this.cbLazy.UseVisualStyleBackColor = true;
//
// btnConvertSelected
//
this.btnConvertSelected.Location = new System.Drawing.Point(170, 97);
this.btnConvertSelected.Margin = new System.Windows.Forms.Padding(2);
this.btnConvertSelected.Name = "btnConvertSelected";
this.btnConvertSelected.Size = new System.Drawing.Size(108, 19);
this.btnConvertSelected.TabIndex = 62;
this.btnConvertSelected.Text = "Convert Selected";
this.btnConvertSelected.UseVisualStyleBackColor = true;
this.btnConvertSelected.Click += new System.EventHandler(this.btnConvertSelected_Click);
//
// btnLoadTreeDB
//
this.btnLoadTreeDB.Location = new System.Drawing.Point(450, 97);
this.btnLoadTreeDB.Margin = new System.Windows.Forms.Padding(2);
this.btnLoadTreeDB.Name = "btnLoadTreeDB";
this.btnLoadTreeDB.Size = new System.Drawing.Size(124, 19);
this.btnLoadTreeDB.TabIndex = 60;
this.btnLoadTreeDB.Text = "Load Tree from dBase";
this.btnLoadTreeDB.UseVisualStyleBackColor = true;
this.btnLoadTreeDB.Click += new System.EventHandler(this.btnLoadTreeDB_Click);
//
// cbPurgeData
//
this.cbPurgeData.AutoSize = true;
this.cbPurgeData.Checked = true;
this.cbPurgeData.CheckState = System.Windows.Forms.CheckState.Checked;
this.cbPurgeData.Location = new System.Drawing.Point(479, 75);
this.cbPurgeData.Margin = new System.Windows.Forms.Padding(2);
this.cbPurgeData.Name = "cbPurgeData";
this.cbPurgeData.Size = new System.Drawing.Size(119, 17);
this.cbPurgeData.TabIndex = 59;
this.cbPurgeData.Text = "Purge Existing Data";
this.cbPurgeData.UseVisualStyleBackColor = true;
//
// lblTime
//
this.lblTime.BackColor = System.Drawing.SystemColors.ButtonShadow;
this.lblTime.Location = new System.Drawing.Point(70, 92);
this.lblTime.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblTime.Name = "lblTime";
this.lblTime.Size = new System.Drawing.Size(84, 20);
this.lblTime.TabIndex = 58;
//
// pbStep
//
this.pbStep.Location = new System.Drawing.Point(160, 76);
this.pbStep.Margin = new System.Windows.Forms.Padding(2);
this.pbStep.Name = "pbStep";
this.pbStep.Size = new System.Drawing.Size(308, 15);
this.pbStep.TabIndex = 57;
//
// pbSect
//
this.pbSect.Location = new System.Drawing.Point(160, 56);
this.pbSect.Margin = new System.Windows.Forms.Padding(2);
this.pbSect.Name = "pbSect";
this.pbSect.Size = new System.Drawing.Size(307, 15);
this.pbSect.TabIndex = 56;
//
// pbProc
//
this.pbProc.Location = new System.Drawing.Point(160, 37);
this.pbProc.Margin = new System.Windows.Forms.Padding(2);
this.pbProc.Name = "pbProc";
this.pbProc.Size = new System.Drawing.Size(308, 15);
this.pbProc.TabIndex = 55;
//
// cbSaveDoc
//
this.cbSaveDoc.AutoSize = true;
this.cbSaveDoc.Checked = true;
this.cbSaveDoc.CheckState = System.Windows.Forms.CheckState.Checked;
this.cbSaveDoc.Location = new System.Drawing.Point(480, 34);
this.cbSaveDoc.Margin = new System.Windows.Forms.Padding(2);
this.cbSaveDoc.Name = "cbSaveDoc";
this.cbSaveDoc.Size = new System.Drawing.Size(77, 17);
this.cbSaveDoc.TabIndex = 54;
this.cbSaveDoc.Text = "Save DOC";
this.cbSaveDoc.UseVisualStyleBackColor = true;
this.cbSaveDoc.Click += new System.EventHandler(this.cbSaveDoc_Click);
//
// cbSaveRTF
//
this.cbSaveRTF.AutoSize = true;
this.cbSaveRTF.Location = new System.Drawing.Point(480, 54);
this.cbSaveRTF.Margin = new System.Windows.Forms.Padding(2);
this.cbSaveRTF.Name = "cbSaveRTF";
this.cbSaveRTF.Size = new System.Drawing.Size(75, 17);
this.cbSaveRTF.TabIndex = 53;
this.cbSaveRTF.Text = "Save RTF";
this.cbSaveRTF.UseVisualStyleBackColor = true;
this.cbSaveRTF.Click += new System.EventHandler(this.cbSaveRTF_Click);
//
// btnBrowse
//
this.btnBrowse.Location = new System.Drawing.Point(479, 10);
this.btnBrowse.Margin = new System.Windows.Forms.Padding(2);
this.btnBrowse.Name = "btnBrowse";
this.btnBrowse.Size = new System.Drawing.Size(56, 19);
this.btnBrowse.TabIndex = 52;
this.btnBrowse.Text = "Browse...";
this.btnBrowse.UseVisualStyleBackColor = true;
this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click);
//
// tbSource
//
this.tbSource.Location = new System.Drawing.Point(71, 10);
this.tbSource.Margin = new System.Windows.Forms.Padding(2);
this.tbSource.Name = "tbSource";
this.tbSource.Size = new System.Drawing.Size(397, 20);
this.tbSource.TabIndex = 51;
this.tbSource.Text = "i:\\vedata\\vewcnfp\\fp.prc";
//
// lblStep
//
this.lblStep.BackColor = System.Drawing.SystemColors.ButtonShadow;
this.lblStep.Location = new System.Drawing.Point(70, 72);
this.lblStep.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblStep.Name = "lblStep";
this.lblStep.Size = new System.Drawing.Size(84, 20);
this.lblStep.TabIndex = 49;
//
// lblSection
//
this.lblSection.BackColor = System.Drawing.SystemColors.ButtonShadow;
this.lblSection.Location = new System.Drawing.Point(70, 53);
this.lblSection.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblSection.Name = "lblSection";
this.lblSection.Size = new System.Drawing.Size(84, 19);
this.lblSection.TabIndex = 48;
//
// lblProc
//
this.lblProc.BackColor = System.Drawing.SystemColors.ButtonShadow;
this.lblProc.Location = new System.Drawing.Point(70, 34);
this.lblProc.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.lblProc.Name = "lblProc";
this.lblProc.Size = new System.Drawing.Size(84, 19);
this.lblProc.TabIndex = 47;
//
// btnConvert
//
this.btnConvert.Location = new System.Drawing.Point(2, 9);
this.btnConvert.Margin = new System.Windows.Forms.Padding(2);
this.btnConvert.Name = "btnConvert";
this.btnConvert.Size = new System.Drawing.Size(56, 19);
this.btnConvert.TabIndex = 46;
this.btnConvert.Text = "Convert";
this.btnConvert.Click += new System.EventHandler(this.btnConvert_Click);
//
// tv
//
this.tv.CheckBoxes = true;
this.tv.Dock = System.Windows.Forms.DockStyle.Bottom;
this.tv.Location = new System.Drawing.Point(0, 1);
this.tv.Margin = new System.Windows.Forms.Padding(2);
this.tv.Name = "tv";
this.tv.Size = new System.Drawing.Size(623, 237);
this.tv.TabIndex = 24;
this.tv.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.tv_BeforeExpand);
this.tv.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tv_AfterSelect);
//
// btnGroup
//
this.btnGroup.Location = new System.Drawing.Point(505, 118);
this.btnGroup.Name = "btnGroup";
this.btnGroup.Size = new System.Drawing.Size(75, 23);
this.btnGroup.TabIndex = 69;
this.btnGroup.Text = "Group";
this.btnGroup.UseVisualStyleBackColor = true;
this.btnGroup.Click += new System.EventHandler(this.btnGroup_Click);
//
// frmLoader
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(623, 413);
this.Controls.Add(this.sc);
this.Margin = new System.Windows.Forms.Padding(2);
this.Name = "frmLoader";
this.Text = "frmLoader";
this.sc.Panel1.ResumeLayout(false);
this.sc.Panel1.PerformLayout();
this.sc.Panel2.ResumeLayout(false);
this.sc.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.SplitContainer sc;
private System.Windows.Forms.CheckBox cbLazy;
private System.Windows.Forms.Button btnConvertSelected;
private System.Windows.Forms.Button btnLoadTreeDB;
private System.Windows.Forms.CheckBox cbPurgeData;
private System.Windows.Forms.Label lblTime;
private System.Windows.Forms.ProgressBar pbStep;
private System.Windows.Forms.ProgressBar pbSect;
private System.Windows.Forms.ProgressBar pbProc;
private System.Windows.Forms.CheckBox cbSaveDoc;
private System.Windows.Forms.CheckBox cbSaveRTF;
private System.Windows.Forms.Button btnBrowse;
private System.Windows.Forms.TextBox tbSource;
private System.Windows.Forms.Label lblStep;
private System.Windows.Forms.Label lblSection;
private System.Windows.Forms.Label lblProc;
private System.Windows.Forms.Button btnConvert;
private System.Windows.Forms.TreeView tv;
private System.Windows.Forms.FolderBrowserDialog fbd;
private System.Windows.Forms.Button btnLoadTreeCSLA;
private System.Windows.Forms.TextBox tbVesamPath;
private System.Windows.Forms.Button btnVesam;
private System.Windows.Forms.Button btnBrowseVesam;
private System.Windows.Forms.Button btnVETree_CSLA;
private System.Windows.Forms.Button btnGroup;
}
}

View File

@ -0,0 +1,416 @@
// ========================================================================
// 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 Volian.CSLA.Library;
using Config;
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace DataLoader
{
public partial class frmLoader : Form
{
#region Log4Net
public static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
#endregion
#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_COMMENT = 0;
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.
private Connection dbConn;
private Folder sysFolder;
FolderTreeNode _topnode;
// the following two dictionaries are used to handle migration of the
// transitions... dicTrans_StrDone gets an entry for procnumber, sequence
// number and the new structure 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 structureid
// 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_StrIds,
// if so, use the id listed here. If no entry exists in dicTrans_StrIds, create
// a structure table record and use the id as part of the 'to', and add an entry to
// dicTrans_StpIds to flag that the record was already created. As migrating sections
// and steps, check this dicTrans_StrIds to see if the structure record has already
// been create, if so use it and remove it from the dicTrans_StrIds dictionary,
// otherwise, create a new structure record.
private Dictionary<string, int> dicTrans_StrDone;
private Dictionary<string, int> dicTrans_StrIds;
private Dictionary<object, string> dicOldStepSequence;
private Dictionary<TreeNode, TreeNode> dicNeedToLoad;
private bool UseVeTree = false;
#endregion
public frmLoader()
{
InitializeComponent();
lblTime.Tag = DateTime.Now;
switch (SystemInformation.ComputerName.ToUpper())
{
case "KATHYXP":
//tbSource.Text = "G:\\VEIP2\\PROCS"; // basic data
//tbSource.Text = "G:\\VEFNP\\AOP1.PRC"; // test subsections, checkoffs, comments & continuous action flag
//tbSource.Text = "G:\\vecal\\eops.bck"; // test link seq STP_LNK_SEQ
tbSource.Text = "G:\\vehlp\\procs";// multiple change ids.
break;
case "RHMDESKTOP":
//tbSource.Text = @"I:\UNZIPPED ACTIVE BASELINE DATA\vehlp\Procs"; // Sub-sections
tbSource.Text = @"I:\veDATA\vehlp\Procs"; // Sub-sections
break;
default:
throw new Exception("Not configured for " + SystemInformation.ComputerName);
}
dicNeedToLoad = new Dictionary<TreeNode, TreeNode>();
}
private void btnConvertSelected_Click(object sender, EventArgs e)
{
if (UseVeTree)
{
VETreeNode tn = (VETreeNode)tv.SelectedNode;
if (tn == null)
{
MessageBox.Show("Must select a version node (working draft, approved, etc)", "No Node Selected");
return;
}
object o = tn.VEObject;
//object o = tn.Tag;
if (o.GetType() != typeof(DocVersionInfo))
{
MessageBox.Show("Must select a version node (working draft, approved, etc)", "No Node Selected");
return;
}
DocVersion v = ((DocVersionInfo)o).Get();
int istr = MigrateDocVersion(v.Title);
if (istr > 0)
{
v.StructureID = istr;
v.Title = "";
v.Save(true); // true forces save.
tn.Checked = true;
//TODO: Walk up structure and set check boxes appropriately.
}
}
else
{
TreeNode tn = tv.SelectedNode;
if (tn == null)
{
MessageBox.Show("Must select a version node (working draft, approved, etc)", "No Node Selected");
return;
}
object o = tn.Tag;
if (o.GetType() != typeof(DocVersion))
{
MessageBox.Show("Must select a version node (working draft, approved, etc)", "No Node Selected");
return;
}
DocVersion v = (DocVersion)o;
int istr = MigrateDocVersion(v.Title);
if (istr > 0)
{
v.StructureID = istr;
v.Title = "";
v.Save(true); // true forces save.
tn.Checked = true;
//TODO: Walk up structure and set check boxes appropriately.
}
}
}
private void tv_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
if (UseVeTree)
{
((VETreeNode)e.Node).LoadChildren();
return;
}
TreeNode tn = e.Node;
object o = tn.Tag;
switch (o.GetType().ToString())
{
case "Volian.CSLA.Library.FolderInfo":
FolderInfo fld = (FolderInfo)o;
if (fld.DocVersionCount>0)
tn.Checked = LoadChildren(fld, tn); // load docversions.
break;
default:
break;
}
}
private void tv_AfterSelect(object sender, TreeViewEventArgs e)
{
if (UseVeTree) return;
TreeNode tn = e.Node;
object o = tn.Tag;
tn.Expand();
if (o.GetType() == typeof(DocVersion)) tbSource.Text = ((DocVersion)o).Title;
}
private bool LoadFolders()
{
try
{
// make the initial database connection record
dbConn = Connection.MakeConnection("Default", "Default", "Data Source=.\\SQLEXPRESS;Initial Catalog=VEPROMS;Integrated Security=True", 1, null);
ConfigFile cfg = new ConfigFile();
XmlDocument d = cfg.LoadSystemIni();
sysFolder = Folder.MakeFolder(0, dbConn.DBID, "system", "system", d.InnerXml);
// This is to test the vln Libraries
List<Folder> lfldr = vlnDataPathFolders();
List<vlnObject> dp2 = new List<vlnObject>();
foreach (Folder fldr in lfldr)
{
TreeNode tn = 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();
MigrateChildren(vb, vs, fldr.DBID, fldr.FolderID, tn);
tn.Expand();
}
}
catch (Exception ex)
{
log.ErrorFormat("Could not load data, error = {0}", ex.Message);
return false;
}
return true;
}
private void btnLoadTreeDB_Click(object sender, EventArgs e)
{
// When loading folders, i.e. the tree from dBase (old 16-bit)
// always clear the data
ClearData();
bool suc = LoadFolders();
}
private void btnConvert_Click(object sender, System.EventArgs e)
{
bool success = true;
// if purge data, purge it all & reload folders & security.
if (cbPurgeData.Checked)
{
ClearData();
success=LoadFolders();
if (success)success=LoadSecurity();
}
if (success) MigrateDocVersion(tbSource.Text);
}
private void UpdateLabels(int incPrc, int incSec, int incStp)
{
if (incPrc == 0 && incSec == 0 && incStp == 0)//Reset
{
lblTime.Tag = DateTime.Now;
pbProc.Value = 0;
pbSect.Value = 0;
pbStep.Value = 0;
}
else
{
try
{
pbProc.Value += incPrc;
pbSect.Value += incSec;
pbStep.Value += incStp;
}
catch (Exception ex)
{
log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException);
}
}
lblProc.Text = string.Format("{0} Procedures", pbProc.Value);
lblSection.Text = string.Format("{0} Sections", pbSect.Value);
lblStep.Text = string.Format("{0} Steps", pbStep.Value);
//pbProc.Value = iPrc;
//pbSect.Value = iSec;
//pbStep.Value = iStp;
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 btnBrowse_Click(object sender, EventArgs e)
{
fbd.SelectedPath = tbSource.Text;
if (fbd.ShowDialog() == DialogResult.OK)
tbSource.Text = fbd.SelectedPath;
}
private void cbSaveRTF_Click(object sender, EventArgs e)
{
if (cbSaveRTF.Checked) cbSaveDoc.Checked = false;
}
private void cbSaveDoc_Click(object sender, EventArgs e)
{
if (cbSaveDoc.Checked) cbSaveRTF.Checked = false;
}
private void Wait(int n)
{
DateTime dtw = DateTime.Now.AddSeconds(n);
while (DateTime.Now < dtw)
{
Application.DoEvents();
}
}
private void WaitMS(int n)
{
DateTime dtw = DateTime.Now.AddMilliseconds(n);
while (DateTime.Now < dtw)
{
Application.DoEvents();
}
}
private 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();
}
private 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("DATE/TIME {0} {1}", date, time);
log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException);
log.ErrorFormat(ex.StackTrace);
return dts;
}
return dts;
}
private void btnLoadTreeCSLA_Click(object sender, EventArgs e)
{
_topnode = FolderTreeNode.BuildTreeList();
tv.Nodes.Add(_topnode);
tv.Nodes[0].Expand();
UseVeTree = false;
}
private void btnBrowseVesam_Click(object sender, EventArgs e)
{
fbd.SelectedPath = tbVesamPath.Text;
if (fbd.ShowDialog() == DialogResult.OK)
tbVesamPath.Text = fbd.SelectedPath;
}
private bool LoadSecurity()
{
Security sec = new Security(tbVesamPath.Text);
return sec.Migrate();
}
private void btnVesam_Click(object sender, EventArgs e)
{
// if purge data, purge it all & reload folders.
if (cbPurgeData.Checked)
{
ClearData();
LoadFolders();
}
bool sec = LoadSecurity();
}
private void btnVETree_CSLA_Click(object sender, EventArgs e)
{
tv.Nodes.Add(VEFolder.LoadTree());
UseVeTree = true;
}
private void btnGroup_Click(object sender, EventArgs e)
{
GroupProp f = new GroupProp();
f.ShowDialog();
}
}
}

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="fbd.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>