404 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			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;
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |