407 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			407 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
/*********************************************************************************************
 | 
						|
 * Copyright 2004 - Volian Enterprises, Inc. All rights reserved.
 | 
						|
 * Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
 | 
						|
 * ------------------------------------------------------------------------------
 | 
						|
 * $Workfile: Archive.cs $     $Revision: 3 $
 | 
						|
 * $Author: Kathy $   $Date: 1/31/05 11:05a $
 | 
						|
 *
 | 
						|
 * $History: Archive.cs $
 | 
						|
 * 
 | 
						|
 * *****************  Version 3  *****************
 | 
						|
 * User: Kathy        Date: 1/31/05    Time: 11:05a
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * Fix B2005-005 - this just fixed empty icon usage
 | 
						|
 * 
 | 
						|
 * *****************  Version 2  *****************
 | 
						|
 * User: Kathy        Date: 1/24/05    Time: 2:45p
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * B2005-004 fixes - icon clean-up
 | 
						|
 * 
 | 
						|
 * *****************  Version 1  *****************
 | 
						|
 * User: Kathy        Date: 7/27/04    Time: 8:52a
 | 
						|
 * Created in $/LibSource/VEObject
 | 
						|
 *********************************************************************************************/
 | 
						|
 | 
						|
using System;
 | 
						|
using System.Windows.Forms;
 | 
						|
using System.Windows.Forms.Design;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.IO;
 | 
						|
using System.Text;
 | 
						|
using Utils;
 | 
						|
using System.Collections.Specialized;
 | 
						|
 | 
						|
namespace VEObject
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// Archive Object.
 | 
						|
	/// </summary>
 | 
						|
	public class VEO_Archive: VEO_Base
 | 
						|
	{
 | 
						|
		public bool isnew;
 | 
						|
 | 
						|
		// These three strings are stored in the Zip file's
 | 
						|
		// comment field
 | 
						|
		private String tmpArchiveTitle;
 | 
						|
		private String _Comment;
 | 
						|
		public ArchiveTypeOptions _ArchiveType;
 | 
						|
 | 
						|
		private String tmpComment;
 | 
						|
 | 
						|
		private bool _ReadOnly;
 | 
						|
		private bool oldReadOnly;
 | 
						|
		private bool NeedToGetReadOnly;
 | 
						|
 | 
						|
		private bool changeReadOnly;
 | 
						|
		private bool changeComment;
 | 
						|
		private bool changeArchiveTitle;
 | 
						|
 | 
						|
		public VEO_Archive(string ipath, VEO_DummyZip dz)
 | 
						|
		{
 | 
						|
			iconStates = new int[5] {0,0,0,0,0};
 | 
						|
			_Location = ipath; // full path to the Zip file
 | 
						|
			VEObjectType = (int)VEObjectTypesDefs.Archive;
 | 
						|
			changeReadOnly = false;
 | 
						|
			changeComment = false;
 | 
						|
			changeArchiveTitle = false;
 | 
						|
			NeedToGetReadOnly = true;
 | 
						|
			isnew = IsThisANewArchive(ipath);
 | 
						|
			if (isnew)
 | 
						|
			{
 | 
						|
				_Title = "New Archive";
 | 
						|
				_Comment = "Created: " + System.DateTime.Now.ToString();
 | 
						|
			}
 | 
						|
			else // get the title and comment from the Zip file
 | 
						|
			{
 | 
						|
				GetInfoFromZipComment();
 | 
						|
			}
 | 
						|
			LoadLockInfo();
 | 
						|
			icon = iconStates[(int)Lock.LockStatus];
 | 
						|
			parentObj = dz;
 | 
						|
			usrRunTime = dz.usrRunTime;
 | 
						|
		}
 | 
						|
 | 
						|
		// Read in the Title, Archive Type, and Comment from the Zip file's
 | 
						|
		// comment field.
 | 
						|
		private void GetInfoFromZipComment()
 | 
						|
		{
 | 
						|
			string tmpstr;
 | 
						|
			ZipFuncs ZipInfo = new ZipFuncs(_Location);
 | 
						|
			// just opening the zip file like this will read the zip's comment field
 | 
						|
			if (ZipInfo.strArcTitle != null)
 | 
						|
				tmpstr = ZipInfo.strArcTitle.Trim();
 | 
						|
			else
 | 
						|
				tmpstr = "";
 | 
						|
			// if the title is blank, then use the zip file name as the title
 | 
						|
			if (tmpstr.Length == 0)
 | 
						|
				this._Title = _Location.Substring(_Location.LastIndexOf("\\")+1);
 | 
						|
			else
 | 
						|
				this._Title = tmpstr;
 | 
						|
			_Comment = ZipInfo.strComment;
 | 
						|
			if (ZipInfo.ArchiveType == (int)VEO_Base.ArchiveTypeOptions.Full)
 | 
						|
				_ArchiveType = VEO_Base.ArchiveTypeOptions.Full;
 | 
						|
			else
 | 
						|
				_ArchiveType = VEO_Base.ArchiveTypeOptions.Partial;
 | 
						|
		}
 | 
						|
 | 
						|
		private bool IsThisANewArchive(string arcPath)
 | 
						|
		{
 | 
						|
			string tmpstr = arcPath.ToUpper();
 | 
						|
			return (!tmpstr.EndsWith(".ZIP") || !File.Exists(tmpstr));
 | 
						|
		}
 | 
						|
 | 
						|
		private string ParseOutZipPath()
 | 
						|
		{
 | 
						|
			string zpath = _Location.Substring(0,_Location.LastIndexOf("\\"));
 | 
						|
			return zpath;
 | 
						|
		}
 | 
						|
 | 
						|
		// Gets and Sets for the Property Page
 | 
						|
		[Description("Location"),Category("Archive"),ReadOnly(true)]
 | 
						|
		public string Location
 | 
						|
		{
 | 
						|
			get{return _Location;}
 | 
						|
 | 
						|
			//note: we don't allow them to change the zip file name or path.
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		[Description("Archive Title"),Category("Archive")]public string Description
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				if (!changeArchiveTitle)
 | 
						|
					return _Title;
 | 
						|
				else
 | 
						|
					return tmpArchiveTitle;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				changeArchiveTitle = true;
 | 
						|
				tmpArchiveTitle = value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		[Description("Archive Type"),Category("Archive"),ReadOnly(true)]public ArchiveTypeOptions ArchiveType
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return _ArchiveType;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				_ArchiveType=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		[Description("Comment"),Category("Archive")]public string Comment
 | 
						|
		{	get
 | 
						|
			{
 | 
						|
				if (!changeComment)
 | 
						|
					return _Comment;
 | 
						|
				else
 | 
						|
					return tmpComment;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				changeComment = true;
 | 
						|
				tmpComment = value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		[Description("ReadOnly"),Category("Archive")]public bool ReadOnlyArchiveFile
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				if (!changeReadOnly && NeedToGetReadOnly)
 | 
						|
				{
 | 
						|
					FileAttributes attrib = File.GetAttributes(_Location);
 | 
						|
					_ReadOnly = (attrib & FileAttributes.ReadOnly) == FileAttributes.ReadOnly;
 | 
						|
					NeedToGetReadOnly = false;
 | 
						|
				}
 | 
						|
				return _ReadOnly;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				if (!changeReadOnly) // only save previous value once
 | 
						|
					oldReadOnly = _ReadOnly;
 | 
						|
				changeReadOnly = true;
 | 
						|
				_ReadOnly = value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		// When the Save Button is pressed on the Property page, this function
 | 
						|
		// is called.
 | 
						|
		public override bool Write()
 | 
						|
		{
 | 
						|
			if (changeReadOnly)
 | 
						|
			{
 | 
						|
				changeReadOnly = false;
 | 
						|
				NeedToGetReadOnly = true;
 | 
						|
				FileAttributes attrib = File.GetAttributes(_Location);
 | 
						|
				if (_ReadOnly != ((attrib & FileAttributes.ReadOnly) == FileAttributes.ReadOnly))
 | 
						|
					attrib ^= FileAttributes.ReadOnly; //toggle
 | 
						|
				File.SetAttributes(_Location,attrib);
 | 
						|
			}
 | 
						|
 | 
						|
			if (changeComment)
 | 
						|
			{
 | 
						|
				changeComment = false;
 | 
						|
				_Comment = tmpComment;
 | 
						|
			}
 | 
						|
 | 
						|
			if (changeArchiveTitle)
 | 
						|
			{
 | 
						|
				changeArchiveTitle = false;
 | 
						|
				_Title = tmpArchiveTitle;
 | 
						|
			}
 | 
						|
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		// When the Cancel Button on the Property Page is pressed,
 | 
						|
		// this function is called.
 | 
						|
		public override void CancelWrite()
 | 
						|
		{
 | 
						|
			if (changeReadOnly)
 | 
						|
			{
 | 
						|
				_ReadOnly = oldReadOnly;
 | 
						|
			}
 | 
						|
			changeArchiveTitle = false;
 | 
						|
			changeComment = false;
 | 
						|
			changeReadOnly = false;
 | 
						|
			NeedToGetReadOnly = true;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool Read(bool dummy)
 | 
						|
		{
 | 
						|
			//load archive file list
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		public override void AddToTree(TreeNode parentnd)
 | 
						|
		{
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool Expand(TreeNode parentnd)
 | 
						|
		{	
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool PropertiesDlg(Object parent)
 | 
						|
		{
 | 
						|
			ARProperties propdlg = new ARProperties(parent, this);
 | 
						|
			if (propdlg.ShowDialog() == DialogResult.OK) return true;
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		public bool Exists(string dname)
 | 
						|
		{
 | 
						|
			if(dname==null||dname=="") return false;
 | 
						|
 | 
						|
			string archname=null;
 | 
						|
			// see if this is a pathname, it needs to be for the Exists check.
 | 
						|
			if (dname.IndexOf("\\") < 0)   // it's not a path, prepend the path
 | 
						|
				archname = _Location + "\\" + dname;
 | 
						|
			else
 | 
						|
				archname = dname;
 | 
						|
			
 | 
						|
			return File.Exists(archname);
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool mnuAllowNew()
 | 
						|
		{
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool mnuAllowDelete()
 | 
						|
		{
 | 
						|
//			VEO_DummyArchive ds = (VEO_DummyArchive) this.parentObj;
 | 
						|
//			VEO_ProcSet ps = (VEO_ProcSet) ds.parentObj;
 | 
						|
//			if (ps.isApproved == true) return false;
 | 
						|
//			if (amILockedByMe()==false) return false;
 | 
						|
//			if ((ps.accessFlags&Security.DOCMAINT)==Security.DOCMAINT) return true;
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool mnuAllowUpdateArch()
 | 
						|
		{
 | 
						|
			if (amILockedByMe()==false) return false;
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool mnuAllowExtractArch()
 | 
						|
		{
 | 
						|
			if (amILockedByMe()==false) return false;
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool mnuAllowTestArchive()
 | 
						|
		{
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		public override void DoListView(ListView veoListView)
 | 
						|
		{
 | 
						|
			ZipFuncs ZipInfo = new ZipFuncs(_Location);
 | 
						|
			ListViewItem item=null;
 | 
						|
			veoListView.Columns.Add("Date/Time", 150, HorizontalAlignment.Left);
 | 
						|
			veoListView.Columns.Add("File", 450, HorizontalAlignment.Left);
 | 
						|
			StringCollection ZipFileList;
 | 
						|
//			veoListView.Sorting = SortOrder.Ascending;
 | 
						|
 | 
						|
			ZipFileList = ZipInfo.ZipFileContents();
 | 
						|
 | 
						|
			for (int i=0; i< ZipFileList.Count; i++)
 | 
						|
			{
 | 
						|
				string tmpstr = ZipFileList[i].ToString();
 | 
						|
				int subIdx = tmpstr.IndexOf('!');
 | 
						|
				item = new ListViewItem(tmpstr.Substring(0,subIdx));
 | 
						|
				item.SubItems.Add(tmpstr.Substring(subIdx+1));
 | 
						|
				item.Tag = this;
 | 
						|
				veoListView.Items.Add(item);
 | 
						|
			}
 | 
						|
			AllowListViewSort = true;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool Delete()
 | 
						|
		{
 | 
						|
			if ((File.GetAttributes(_Location) & System.IO.FileAttributes.ReadOnly) == System.IO.FileAttributes.ReadOnly)
 | 
						|
				File.SetAttributes(_Location,System.IO.FileAttributes.Normal);
 | 
						|
			File.Delete(_Location);
 | 
						|
			// if this is the last zip, then change parent's icon to empty
 | 
						|
			VEO_DummyZip zip = (VEO_DummyZip) this.parentObj;
 | 
						|
			if (zip.Children.Count==1) zip.IsEmpty=true;  // just this one.
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	// This class is used when creating a new archive
 | 
						|
	public class VEO_ArchiveN: VEO_Archive
 | 
						|
	{
 | 
						|
		public VEO_ArchiveN(string ipath, VEO_DummyZip dz)
 | 
						|
			: base(ipath, dz)
 | 
						|
		{
 | 
						|
		}
 | 
						|
 | 
						|
		[Description("Location"),Category("Archive"),ReadOnly(false),EditorAttribute(typeof(PropSaveFileAsDlg), typeof(System.Drawing.Design.UITypeEditor))]
 | 
						|
		public new string Location
 | 
						|
		{
 | 
						|
			get{return _Location;}
 | 
						|
 | 
						|
			set
 | 
						|
			{
 | 
						|
				_Location=value.ToString();
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		[Description("Archive Type"),Category("Archive"),ReadOnly(false)]public new ArchiveTypeOptions ArchiveType
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				return _ArchiveType;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				_ArchiveType=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	/*
 | 
						|
	 * Setup a class that will display the SaveFileAs dialog from the property dialog
 | 
						|
	 * when the "..." is pressed.
 | 
						|
	 */
 | 
						|
	public class PropSaveFileAsDlg : System.Drawing.Design.UITypeEditor
 | 
						|
	{
 | 
						|
		public override System.Drawing.Design.UITypeEditorEditStyle GetEditStyle(System.ComponentModel.ITypeDescriptorContext context)
 | 
						|
		{
 | 
						|
			return System.Drawing.Design.UITypeEditorEditStyle.Modal;
 | 
						|
		}
 | 
						|
 | 
						|
		public override object EditValue(
 | 
						|
			System.ComponentModel.ITypeDescriptorContext context,
 | 
						|
			System.IServiceProvider provider, object value)
 | 
						|
		{
 | 
						|
			SaveFileDialog saveFileDialog1 = new SaveFileDialog();
 | 
						|
			saveFileDialog1.AddExtension = true;
 | 
						|
			saveFileDialog1.CheckPathExists = true;
 | 
						|
			saveFileDialog1.DefaultExt = ".zip";
 | 
						|
			saveFileDialog1.Filter = "ZIP Files|*.zip|All Files|*.*||";
 | 
						|
			saveFileDialog1.DereferenceLinks = true;
 | 
						|
			saveFileDialog1.OverwritePrompt = true;
 | 
						|
			saveFileDialog1.Title = "Archive Location and Name";
 | 
						|
			saveFileDialog1.FileName = value.ToString();
 | 
						|
			saveFileDialog1.ShowDialog();
 | 
						|
 | 
						|
			return saveFileDialog1.FileName;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool GetPaintValueSupported(
 | 
						|
			System.ComponentModel.ITypeDescriptorContext context)
 | 
						|
		{
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	}
 |