404 lines
10 KiB
C#

/*********************************************************************************************
* Copyright 2004 - Volian Enterprises, Inc. All rights reserved.
* Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
* ------------------------------------------------------------------------------
* $Workfile: LibDoc.cs $ $Revision: 6 $
* $Author: Kathy $ $Date: 5/31/06 9:47a $
*
* $History: LibDoc.cs $
*
* ***************** Version 6 *****************
* User: Kathy Date: 5/31/06 Time: 9:47a
* Updated in $/LibSource/VEObject
* Fixed B2006-023 - library document usages, duplicates and missing
* procedure titles
*
* ***************** Version 5 *****************
* User: Kathy Date: 2/08/06 Time: 10:22a
* Updated in $/LibSource/VEObject
* Fix B2006-004 - usages not found
*
* ***************** Version 4 *****************
* User: Kathy Date: 5/31/05 Time: 12:42p
* Updated in $/LibSource/VEObject
* crash on save if no comment
*
* ***************** Version 3 *****************
* User: Kathy Date: 5/25/05 Time: 10:32a
* Updated in $/LibSource/VEObject
* Allow edits for tmpchg
*
* ***************** Version 2 *****************
* User: Kathy Date: 1/31/05 Time: 11:05a
* Updated in $/LibSource/VEObject
* Fix B2005-005 - this just fixed empty icon usage
*
* ***************** Version 1 *****************
* User: Kathy Date: 7/27/04 Time: 8:53a
* Created in $/LibSource/VEObject
*********************************************************************************************/
using System;
using System.IO;
using System.Windows.Forms;
using System.ComponentModel;
using System.Collections;
using System.Data;
using VDB_TransUsage;
using Utils;
namespace VEObject
{
/// <summary>
/// Summary description for LibDoc.
/// </summary>
public class VEO_LibDoc : VEO_Base
{
string _Comment;
public ArrayList usages;
public string ldname;
private string tmpRtfFileName;
protected bool changeTitle;
protected bool changeComment;
protected string tmpTitle;
protected string tmpComment;
public VEO_LibDoc(string ipath, VEO_DummyLibDoc ld, bool inew)
{
iconStates = new int[5] {15,15,15,15,15};
string loctitle=null;
string loccomment=null;
_Location = ipath;
VEObjectType = (int)VEObjectTypesDefs.LibraryDoc;
parentObj = ld;
usages = new ArrayList();
isNew = inew;
// use the path to open the file & read the title & comment
FileInfo fi = new FileInfo(ipath);
FileStream fs=null;
fs = fi.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite );
BinaryReader br = new BinaryReader(fs,System.Text.ASCIIEncoding.ASCII);
int cntPage = br.ReadInt16();
if(cntPage != -1)
{ // Not End of File
int nchar = br.ReadInt16();
string tmp = new string(br.ReadChars(nchar));
loctitle = tmp.Substring(0,tmp.Length-1); // remove null at end.
nchar = br.ReadInt16();
if (nchar>0)
{
tmp = new String(br.ReadChars(nchar));
loccomment = tmp.Substring(0,tmp.Length-1); // remove null at end.
}
}
br.Close();
fs.Close();
if (loctitle!=null)
_Title = loctitle;
else
_Title=ipath;
_Comment = loccomment;
VEO_Base tmp1 = (VEO_Base) ld.parentObj;
usrRunTime = tmp1.usrRunTime;
string pthnm = this._Location.Substring(0,_Location.ToUpper().IndexOf(".LIB"));
ldname = pthnm.Substring(_Location.LastIndexOf("\\")+1,8);
LoadLockInfo();
icon = iconStates[(int) Lock.LockStatus];
}
[Description("Location"),Category("Library Document"),ReadOnly(true)]public string Location
{
get{return _Location;}
set{_Location=value;}
}
[Description("Title"),Category("Library Document")]public string Title
{
get
{
if(!changeTitle)
return _Title;
else
return tmpTitle;
}
set
{
changeTitle=true;
tmpTitle=value;
}
}
[Description("Comment"),Category("Library Document")]public string Comment
{
get
{
if(!changeComment)
return _Comment;
else
return tmpComment;
}
set
{
changeComment=true;
tmpComment=value;
}
}
public override bool PropertiesDlg(Object parent)
{
LDProperties propdlg = new LDProperties(parent, this);
if (propdlg.ShowDialog() == DialogResult.OK) return true;
// for New libdoc, a file was created in order for dialog to work,
// remove it on cancel.
if (this.isNew && File.Exists(_Location)) File.Delete(_Location);
return false;
}
public void GetUsages()
{
usages.Clear();
VEO_DummyLibDoc dl = (VEO_DummyLibDoc) this.parentObj;
VEO_ProcSet ps = (VEO_ProcSet) dl.parentObj;
string pth = ps._curDirectory+"\\"+ps.Location+"\\tran.dbf";
vdb_TransUsage transusg = new vdb_TransUsage(pth);
DataSet ds = transusg.GetSortedByToTrans("[TONUMBER] = \'"+ldname.ToUpper() + "\' OR [TONUMBER] = \'" + ldname.ToLower()+"\'");
VEO_DummySet dset = (VEO_DummySet) ps.Children[1];
if (ds.Tables[0].Rows.Count !=0)
{
foreach(DataRow dr in ds.Tables[0].Rows)
{
string usg = dr["FROMNUMBER"].ToString();
string titl = null;
if (dset.Children.Count==0) dset.Read(false);
foreach(Object obj in dset.Children)
{
VEO_Proc prc = (VEO_Proc) obj;
if (usg == prc._Prcnum)
{
titl = prc._Title;
break;
}
}
usages.Add(usg + " " + titl);
}
}
transusg = null;
}
public override bool SaveNew(string dummy)
{
// since the file was created before creating this object, use the 'Write' method
// to save it.
bool success = Write();
isNew=false;
// the parent icon cannot be empty.
VEO_DummyLibDoc ld = (VEO_DummyLibDoc) parentObj;
ld.icon = ld.iconStates[0];
ld.IsEmpty=false;
return success;
}
public override bool Write()
{
string origfile=null;
if (isNew||changeTitle||changeComment)
{
try
{
// rename file extension to bak & rewrite it.
origfile = _Location.Substring(0,_Location.Length-3) + "BAK";
File.Delete(origfile);
File.Move(_Location,origfile);
FileStream chgfile = new FileStream(_Location, FileMode.Create);
BinaryWriter bw = new BinaryWriter(chgfile,System.Text.Encoding.ASCII);
// Write out header to the new file
short j=0;
bw.Seek(0,SeekOrigin.Begin);
bw.Write(j); // temporary page count value (reset on pagination)
j=(short)(Title.Length+1);
bw.Write(j);
char [] xbuf = new char[Title.Length];
xbuf = Title.ToCharArray();
bw.Write(xbuf);
bw.Write((byte)0); // add null for end of string
j=0;
if (Comment != null) j=(short)(Comment.Length+1);
bw.Write(j);
if(j>0)
{
xbuf = new char[Comment.Length];
xbuf = Comment.ToCharArray();
bw.Write(xbuf);
bw.Write((byte)0);
}
// Now open the original file for reading data, get past the header info
// first.
FileStream oldfile = new FileStream(origfile, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(oldfile,System.Text.ASCIIEncoding.ASCII);
int cntPage = br.ReadInt16();
if(cntPage != -1)
{ // Not End of File
int nchar = br.ReadInt16();
string tmp = new string(br.ReadChars(nchar));
nchar = br.ReadInt16();
if (nchar>0)tmp = new String(br.ReadChars(nchar));
}
byte ac;
bool done = false;
while(done==false)
{
if (br.PeekChar() >0)
{
ac = br.ReadByte();
bw.Write(ac);
}
else
done=true;
}
br.Close();
bw.Close();
oldfile.Close();
chgfile.Close();
}
catch (Exception e)
{
MessageBox.Show(e.Message,"Error on library document save.");
if (origfile!=null)
{
File.Delete(_Location);
File.Move(origfile,_Location);
}
return false;
}
if(origfile!=null)File.Delete(origfile);
if(changeComment)
{
_Comment=tmpComment;
changeComment=false;
}
if(changeTitle)
{
_Title=tmpTitle;
changeTitle=false;
}
}
return true;
}
private bool canDelete()
{
if (usages.Count == 0) GetUsages();
if (usages.Count > 0)
{
MessageBox.Show("Cannot delete library document, it is used.");
return false;
}
return true;
}
public override bool Delete()
{
// first see if the library document can be deleted (if it is used, it cannot
// be deleted.
if (canDelete()==false) return false;
File.Delete(_Location);
// if this is the only library document. then set the parents, icon to empty
VEO_DummyLibDoc ld = (VEO_DummyLibDoc) this.parentObj;
if (ld.Children.Count==1) IsEmpty=true; // just this one.
return true;
}
public string GetContentsFile()
{
return tmpRtfFileName;
}
public void ClearContentsFile()
{
if(tmpRtfFileName!=null)File.Delete(tmpRtfFileName);
tmpRtfFileName=null;
}
public bool ReadContentsFile()
{
try
{
// Open the file for reading data, get past the header info first.
FileStream ldfile = new FileStream(_Location, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(ldfile,System.Text.ASCIIEncoding.ASCII);
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)
{
int nchar = br.ReadInt16();
string tmp = new string(br.ReadChars(nchar));
nchar = br.ReadInt16();
if (nchar>0)tmp = new String(br.ReadChars(nchar));
}
byte ac;
bool done = false;
while(done==false)
{
if (br.PeekChar() >0)
{
ac = br.ReadByte();
bw.Write(ac);
}
else
done=true;
}
br.Close();
ldfile.Close();
bw.Close();
tmpfile.Close();
}
catch (Exception e)
{
MessageBox.Show(e.Message,"Error reading Library Document");
return false;
}
return true;
}
public override void AddToTree(TreeNode parentnd)
{
}
public override bool Expand(TreeNode parentnd)
{
return true;
}
public override bool mnuAllowNew()
{
return false;
}
public override bool mnuAllowDelete()
{
return AllowMods();
}
public override bool canEdit()
{
return AllowMods();
}
private bool AllowMods()
{
VEO_DummyLibDoc ds = (VEO_DummyLibDoc) this.parentObj;
VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
if (ps.isApproved == true) return false;
if (amILockedByMe()==false) return false;
if ((ps.accessFlags&Security.LIBRARYDOCS)==Security.LIBRARYDOCS) return true;
return false;
}
}
}