/********************************************************************************************* * Copyright 2004 - Volian Enterprises, Inc. All rights reserved. * Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE * ------------------------------------------------------------------------------ * $Workfile: ARProperties.cs $ $Revision: 2 $ * $Author: Jsj $ $Date: 8/20/04 4:45p $ * * $History: ARProperties.cs $ * * ***************** Version 2 ***************** * User: Jsj Date: 8/20/04 Time: 4:45p * Updated in $/LibSource/VEObject * fixed cancel of archive selected procedures * * ***************** Version 1 ***************** * User: Kathy Date: 7/27/04 Time: 8:52a * Created in $/LibSource/VEObject *********************************************************************************************/ using System; using System.IO; using System.Drawing; using System.Collections; using System.Collections.Specialized; using System.ComponentModel; using System.Windows.Forms; using System.Text; using System.Data; using VDB_Set; using Utils; namespace VEObject { /// /// NOTE: cmbType (the combo box that contains the document types) must match /// the order of document types given in the ArchiveTypeOptions for this dialog /// to work correctly /// public class ARProperties : System.Windows.Forms.Form { private System.Windows.Forms.PropertyGrid myPropertyGrid; private System.Windows.Forms.ComboBox cmbType; private System.Windows.Forms.Label lblType; private System.Windows.Forms.Button btnOK; private System.Windows.Forms.Button btnCancel; private System.Windows.Forms.Button btnApply; private VEO_Base _ParentObj; private VEO_Base _CurObj; private bool isnew; private bool glbCancel; private bool zipInCurProcSet; private bool hasInvalidEntry; private string strCurZipPath; private string strZipFileName; private string strFilesToArchive; private string strZipFileExcludeList; private string strProcSetDir; private ZipFuncs ZipFile; /// /// Required designer variable. /// private System.ComponentModel.Container components = null; public ARProperties(Object parent, Object curobj) { // // Required for Windows Form Designer support // _ParentObj = (VEO_Base) parent; _CurObj = (VEO_Base) curobj; VEO_Archive tmpArc = (VEO_Archive)curobj; if (tmpArc.isnew == true) isnew=true; else isnew=false; InitializeComponent(); this.myPropertyGrid.SelectedObject=curobj; strCurZipPath = _ParentObj._Location; strProcSetDir = _ParentObj._Location; // If new, combo box should have 'Full' this.cmbType.Visible=false; this.btnApply.Enabled=false; glbCancel = false; zipInCurProcSet = true; if (isnew == true) { this.btnApply.Visible = false; SetupNewFileName(); ZipFile = new ZipFuncs(); // Since this a new Zip File, don't assign ZipFile with the path/name, // Title, or Comment. These values can be changed prior to the // actual creation of the Zip file. } else { VEO_Archive arc = (VEO_Archive)curobj; ZipFile = new ZipFuncs(arc._Location); GetCommentInformation(); this.cmbType.SelectedIndex = (int) arc._ArchiveType; } } private void SetupNewFileName() { int i=0; StringBuilder newname = new StringBuilder(); VEO_Archive arc = (VEO_Archive) _CurObj; // The old VE-PROMS logic would create SOURCE.ZIP for // the first archive, then ARCH_xxx.ZIP for the rest. // Now we will just create ARCH_xxx.ZIP while(i==0 || arc.Exists(strCurZipPath + "\\" + newname.ToString())) { newname.Remove(0,newname.Length); newname.Append("ARCH_"); newname.Append(i.ToString("d3")); newname.Append(".ZIP"); i++; } strZipFileName = newname.ToString(); _CurObj._Location = strCurZipPath + "\\" + strZipFileName; _CurObj._Title = "New Archive " + newname.ToString(); this.myPropertyGrid.SelectedObject=_CurObj; } /// /// Clean up any resources being used. /// protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(ARProperties)); this.myPropertyGrid = new System.Windows.Forms.PropertyGrid(); this.cmbType = new System.Windows.Forms.ComboBox(); this.lblType = new System.Windows.Forms.Label(); this.btnOK = new System.Windows.Forms.Button(); this.btnCancel = new System.Windows.Forms.Button(); this.btnApply = new System.Windows.Forms.Button(); this.SuspendLayout(); // // myPropertyGrid // this.myPropertyGrid.CommandsVisibleIfAvailable = true; this.myPropertyGrid.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.myPropertyGrid.HelpVisible = false; this.myPropertyGrid.LargeButtons = false; this.myPropertyGrid.LineColor = System.Drawing.SystemColors.ScrollBar; this.myPropertyGrid.Location = new System.Drawing.Point(0, 48); this.myPropertyGrid.Name = "myPropertyGrid"; this.myPropertyGrid.Size = new System.Drawing.Size(736, 112); this.myPropertyGrid.TabIndex = 2; this.myPropertyGrid.Text = "Properties"; this.myPropertyGrid.ToolbarVisible = false; this.myPropertyGrid.ViewBackColor = System.Drawing.SystemColors.Window; this.myPropertyGrid.ViewForeColor = System.Drawing.SystemColors.WindowText; this.myPropertyGrid.PropertyValueChanged += new System.Windows.Forms.PropertyValueChangedEventHandler(this.myPropertyGrid_PropertyValueChanged); // // cmbType // this.cmbType.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.cmbType.Items.AddRange(new object[] { "Full", "Partial"}); this.cmbType.Location = new System.Drawing.Point(104, 0); this.cmbType.Name = "cmbType"; this.cmbType.Size = new System.Drawing.Size(208, 24); this.cmbType.TabIndex = 3; this.cmbType.SelectedIndexChanged += new System.EventHandler(this.cmbType_SelectedIndexChanged); // // lblType // this.lblType.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.lblType.Location = new System.Drawing.Point(0, 0); this.lblType.Name = "lblType"; this.lblType.Size = new System.Drawing.Size(96, 24); this.lblType.TabIndex = 4; this.lblType.Text = "Archive Type:"; this.lblType.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // btnOK // this.btnOK.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.btnOK.Location = new System.Drawing.Point(432, 200); this.btnOK.Name = "btnOK"; this.btnOK.Size = new System.Drawing.Size(64, 24); this.btnOK.TabIndex = 8; this.btnOK.Text = "OK"; this.btnOK.Click += new System.EventHandler(this.btnOK_Click); // // btnCancel // this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.btnCancel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.btnCancel.Location = new System.Drawing.Point(512, 200); this.btnCancel.Name = "btnCancel"; this.btnCancel.Size = new System.Drawing.Size(64, 24); this.btnCancel.TabIndex = 9; this.btnCancel.Text = "Cancel"; this.btnCancel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); // // btnApply // this.btnApply.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.btnApply.Location = new System.Drawing.Point(592, 200); this.btnApply.Name = "btnApply"; this.btnApply.Size = new System.Drawing.Size(56, 24); this.btnApply.TabIndex = 10; this.btnApply.Text = "Apply"; this.btnApply.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.btnApply.Click += new System.EventHandler(this.btnApply_Click); // // ARProperties // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.CausesValidation = false; this.ClientSize = new System.Drawing.Size(736, 246); this.Controls.Add(this.btnApply); this.Controls.Add(this.btnCancel); this.Controls.Add(this.btnOK); this.Controls.Add(this.lblType); this.Controls.Add(this.cmbType); this.Controls.Add(this.myPropertyGrid); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "ARProperties"; this.Text = "Archive Properties"; this.ResumeLayout(false); } #endregion private void cmbType_SelectedIndexChanged(object sender, System.EventArgs e) { } // save was clicked, use the objects save methods. private void btnOK_Click(object sender, System.EventArgs e) { btnApply_Click(sender,e); if (hasInvalidEntry) { DialogResult = DialogResult.None; return; // keep the dialog open } if (!glbCancel) DialogResult=DialogResult.OK; else DialogResult=DialogResult.Cancel; this.Close(); } // Apply changes private void btnApply_Click(object sender, System.EventArgs e) { bool success = true; if (!ValidatePropertyEntries()) // check the entry fields { return; // has invalid data in a property field } if (isnew) { if(_ParentObj==null) { DialogResult=DialogResult.Cancel; return; } // generate new zip file success = GenerateArchiveFile(); if (success) { // save the property values success=_CurObj.Write(); } } else // update existing ZipFile's Comment Field { success=_CurObj.Write(); if (success) success = AddCommentInformation(); } // if not successful with the archive, set the cancel // flag so that a false tree item does not appear. // Note that when archiving outside of the current directory, // (for example to a floppy disk), success is set to false to // prevent a false tree item. glbCancel = !success; btnApply.Enabled=false; } private bool SelectProcsToArchive() { StringCollection SelectedFilesToArchive; bool isfirst = true; bool rtnval = false; ProcedureSelectionList ProcList = new ProcedureSelectionList(); vdb_Set vdbSet=new vdb_Set(strProcSetDir + "\\SET.DBF"); // Loop thru the procset (process like a dataset) DataTable tbl = vdbSet.DB_Data.Tables[0]; foreach (DataRow row in tbl.Rows) { // skip the first one (it's always a "blank" record) if (isfirst) isfirst = false; else { ProcList.Add(row); } } if (ProcList.ShowDialog() == DialogResult.OK) { StringBuilder tmpstr = new StringBuilder(); string strZipPath = "\"" + strProcSetDir + "\\"; // get list of procedures to archive // Note that there is no file extension in this list of dBase files SelectedFilesToArchive = ProcList.GetListOfSelectedProcs_Files(); for(int j=0; j 0) rtnval = true; } return rtnval; } // This function generates a new zip file private bool GenerateArchiveFile() { bool rtnval = true; StringBuilder cmntTxt = new StringBuilder(); VEO_Archive arc = (VEO_Archive) _CurObj; this.glbCancel = false; if (arc._ArchiveType == VEO_Base.ArchiveTypeOptions.Partial) { // get list of selected procedures to archive rtnval = SelectProcsToArchive(); } else { // Archive entire procedure directory strFilesToArchive = "\"" + strProcSetDir + "\\*.*\""; } if (rtnval) { strZipFileExcludeList = "\"" + strProcSetDir + "\\Approved\\*.*\" \"" + strProcSetDir + "\\Temps\\*.*\" *.zip process.dat ?process.dat *.lck"; // Setup DynaZip ZipFile.strZipPathAndFile = arc.Location; ZipFile.strZipFileExcludeList = strZipFileExcludeList; ZipFile.strFilesToArchive = strFilesToArchive; ZipFile.strArcTitle = arc.Description; ZipFile.strComment = arc.Comment; ZipFile.ArchiveType = (int)arc._ArchiveType; this.Enabled = false; rtnval = ZipFile.CreateNewZipFile(); this.Enabled = true; } return rtnval; } private bool AddCommentInformation() { VEO_Archive arc = (VEO_Archive) _CurObj; // add comment ZipFile.strArcTitle = arc.Description; ZipFile.ArchiveType = (int)arc._ArchiveType; ZipFile.strComment = arc.Comment; return ZipFile.AddZipCommentInformation(); } private void GetCommentInformation() { this.glbCancel = false; VEO_Archive arc = (VEO_Archive) _CurObj; if (ZipFile.strArcTitle == null) arc.Description = arc._Title; else arc.Description = ZipFile.strArcTitle; arc.Comment = ZipFile.strComment; if (ZipFile.ArchiveType == (int)VEO_Base.ArchiveTypeOptions.Full) arc.ArchiveType = VEO_Base.ArchiveTypeOptions.Full; else arc.ArchiveType = VEO_Base.ArchiveTypeOptions.Partial; arc.Write(); return; } private void myPropertyGrid_PropertyValueChanged(object s, System.Windows.Forms.PropertyValueChangedEventArgs e) { btnApply.Enabled = true; } private void btnCancel_Click(object sender, System.EventArgs e) { this.glbCancel = true; } /* * Check the property fields for invalid entries * If an invalid entry is found, display a message and * return to the property dialog */ private bool ValidatePropertyEntries() { VEO_Archive arc = (VEO_Archive) _CurObj; hasInvalidEntry = false; // Check the zip file path and filename if (!IsAValidZipFileLocation()) { hasInvalidEntry = true; return false; // data in fields are not valid } if (zipInCurProcSet && (arc.Description == null || arc.Description.Equals(""))) { // put in a default title arc.Description = "Archive: " + strZipFileName; } return (true); // data in fields are valid } /* * Check the zip file name and path. * Display message box to notify user of invalid entry. * Assign local strArchive variables accordingly. */ private bool IsAValidZipFileLocation() { string strArchiveLocation; string strCurDirSave; VEO_Archive arc = (VEO_Archive) _CurObj; strArchiveLocation = arc._Location; // Check for a cleared out location field if (arc._Location == null || arc._Location.Equals("")) { MessageBox.Show("Need to Enter the Archive Location and File Name","Archive Error"); return false; } string strTmp = strArchiveLocation.ToUpper(); // Check for a zip extension if (!strTmp.EndsWith(".ZIP")) { MessageBox.Show("Need to enter the Archive File Name","Archive Error"); return false; } // make sure the current working directory is the current procedure set strCurDirSave = Directory.GetCurrentDirectory(); Directory.SetCurrentDirectory(strProcSetDir); // Get the full path based on the user entry strArchiveLocation = Path.GetFullPath(strArchiveLocation); if (!strArchiveLocation.Equals(arc._Location)) { if (strArchiveLocation == null || strArchiveLocation.Equals("")) { MessageBox.Show("Invalid Archive File Name or File Path","Archive Error"); // reset the current working directory Directory.SetCurrentDirectory(strCurDirSave); return false; } arc._Location = strArchiveLocation; } // parse out the file name strZipFileName = Path.GetFileName(strArchiveLocation); // parse out the path strCurZipPath = strArchiveLocation.Substring(0,strArchiveLocation.LastIndexOf(strZipFileName)-1); // If the zip file path is not the same as the current working directory // then flag the fact we are creating a zip file outside the procedure directory. zipInCurProcSet = Directory.Equals(Directory.GetCurrentDirectory(),strCurZipPath); // reset the current working directory Directory.SetCurrentDirectory(strCurDirSave); return true; } } }