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;
 | |
| 		}
 | |
| 	}
 | |
| }
 |