250 lines
5.9 KiB
C#

/*********************************************************************************************
* Copyright 2003 - Volian Enterprises, Inc. All rights reserved.
* Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
* ------------------------------------------------------------------------------
* $Workfile: EopToErgRelations.cs $ $Revision: 1 $
* $Author: Jsj $ $Date: 11/12/04 10:33a $
*
* $History: EopToErgRelations.cs $
*
* ***************** Version 1 *****************
* User: Jsj Date: 11/12/04 Time: 10:33a
* Created in $/LibSource/VDB
* Class to support translation table maintenance.
*********************************************************************************************/
using System;
using System.IO;
using System.Collections;
using VDB;
namespace VDB_Set
{
/// <summary>
/// Support for the maintenance of the EOP ot ERG translation table
/// (TRANSL.TBL) which holds the relationships between the EOPs and ERGs
/// </summary>
public class EopToErgRelations
{
static string RelationshipFile = "TRANSL.TBL";
private ArrayList _aryTransTable = null;
public ArrayList aryTransTable
{
get
{
return _aryTransTable;
}
set
{
_aryTransTable = value;
}
}
public EopToErgRelations()
{
_aryTransTable = new ArrayList();
ReadTranslationTableFile();
}
private void ReadTranslationTableFile()
{
string inbuf;
TransFileRecord TranTblRec;
if (!File.Exists(RelationshipFile))
return; // file not there to read
StreamReader sr = new StreamReader(RelationshipFile);
while ((inbuf = sr.ReadLine()) != null)
{
TranTblRec = new TransFileRecord(inbuf);
_aryTransTable.Add(TranTblRec);
}
sr.Close();
}
public void WriteTranslationTableFile()
{
StreamWriter sw = new StreamWriter(RelationshipFile,false);
foreach (TransFileRecord tfr in _aryTransTable)
{
sw.Write(tfr.StringForFile());
}
sw.Close();
}
// Add to the end of the passed in list either info from the read-in
// translation file (TRANSL.TBL) or a new (empty) record.
public void AddToTranslationList(SetRecordObj SetRecObj, ArrayList NewList)
{
bool found = false;
for (int i = 0; !found && i < _aryTransTable.Count; i++)
{
TransFileRecord tfr = (TransFileRecord)_aryTransTable[i];
string tfrUpper = tfr.EOPFile.ToUpper();
string NewUpper = SetRecObj.DatabaseTable.ToUpper();
if (tfrUpper.Equals(NewUpper))
{
NewList.Add(tfr);
found=true;
}
}
if (!found)
{
TransFileRecord newrec = new TransFileRecord();
newrec.EOPFile = SetRecObj.DatabaseTable;
NewList.Add(newrec);
}
}
// Assign the ERG information (passed in as RecObj) to the currently
// slected EOP
public bool ChangeTranslationListItem(int EOPidx, object RecObj)
{
bool changedFlag = false;
SetRecordObj SetRecObj = (SetRecordObj)RecObj;
TransFileRecord tfr = (TransFileRecord)_aryTransTable[EOPidx];
if (tfr.ERGFile == null ||
!tfr.ERGFile.Equals(SetRecObj.DatabaseTable) ||
!tfr.ERGProcNum.Equals(SetRecObj.ProcNumber))
{
changedFlag = true;
tfr.ERGFile = SetRecObj.DatabaseTable;
tfr.ERGProcNum = SetRecObj.ProcNumber;
_aryTransTable[EOPidx] = tfr;
}
return changedFlag;
}
// For a given procecure number, find the position in the translation
// table list.
public int FindEOPInList(String EopFileName)
{
bool found = false;
int rtval = -1;
int cnt = _aryTransTable.Count;
TransFileRecord tfr;
string uEopFileName = EopFileName.ToUpper();
for (int i = 0; !found && i < cnt; i++)
{
tfr = (TransFileRecord)_aryTransTable[i];
string uListEopName = tfr.EOPFile.ToString().ToUpper();
if (uListEopName.Equals(uEopFileName))
{
rtval = i;
found = true;
}
}
return rtval;
}
// For a given position in the Translation table, get the corresponding
// position in the ERGList array
public int FindInERGList(int idx, ArrayList ERGList)
{
int rtval = 0;
bool found = false;
TransFileRecord tfr = (TransFileRecord)_aryTransTable[idx];
if (tfr.ERGFile == null)
return 0; // return not selected
string uERGFileName = tfr.ERGFile.ToUpper();
SetRecordObj SetRec;
string uErgListFName;
int cnt = ERGList.Count;
for (int i=0; !found && i < cnt; i++)
{
SetRec = (SetRecordObj)ERGList[i];
uErgListFName = SetRec.DatabaseTable.ToUpper();
if (uErgListFName.Equals(uERGFileName))
{
rtval = i;
found = true;
}
}
return rtval;
}
}
// This class is used to hold the information of a record in the
// Translation table (TRANSL.TBL)
class TransFileRecord
{
private string _EOPFile;
private string _ERGFile;
private string _ERGProcNum;
public string EOPFile
{
get
{
return _EOPFile;
}
set
{
_EOPFile = value;
}
}
public string ERGFile
{
get
{
return _ERGFile;
}
set
{
_ERGFile = value;
}
}
public string ERGProcNum
{
get
{
return _ERGProcNum;
}
set
{
_ERGProcNum = value;
}
}
public TransFileRecord()
{
_EOPFile = null;
_ERGFile = null;
_ERGProcNum = null;
}
// "inbuf" is a line read from the TRANSL.TBL file.
// parse out the the EOP's database file name, the ERG's
// database file name, and the ERG's procedure number
public TransFileRecord(string inbuf)
{
int stidx, len;
stidx = 0;
len = inbuf.IndexOf(",");
_EOPFile = inbuf.Substring(stidx,len);
stidx = len+1;
len = inbuf.IndexOf(",",stidx) - stidx;
_ERGFile = inbuf.Substring(stidx,len);
stidx = stidx + len +1;
_ERGProcNum = inbuf.Substring(stidx);
}
// Create a string of the EOP database name, ERG database name, and
// ERG procedure number for saving in the TRANSL.TBL file
public string StringForFile()
{
string outbuf;
outbuf = _EOPFile + "," + _ERGFile + "," + _ERGProcNum + "\n";
return outbuf;
}
}
}