550 lines
17 KiB
C#
550 lines
17 KiB
C#
/*********************************************************************************************
|
|
* 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
|
|
{
|
|
/// <summary>
|
|
/// 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
|
|
/// </summary>
|
|
|
|
|
|
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;
|
|
/// <summary>
|
|
/// Required designer variable.
|
|
/// </summary>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Clean up any resources being used.
|
|
/// </summary>
|
|
protected override void Dispose( bool disposing )
|
|
{
|
|
if( disposing )
|
|
{
|
|
if(components != null)
|
|
{
|
|
components.Dispose();
|
|
}
|
|
}
|
|
base.Dispose( disposing );
|
|
}
|
|
|
|
#region Windows Form Designer generated code
|
|
/// <summary>
|
|
/// Required method for Designer support - do not modify
|
|
/// the contents of this method with the code editor.
|
|
/// </summary>
|
|
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<SelectedFilesToArchive.Count; j++)
|
|
{
|
|
string tstr = SelectedFilesToArchive[j];
|
|
tmpstr.Append(strZipPath);
|
|
tmpstr.Append(tstr);
|
|
tmpstr.Append(".*\" ");
|
|
}
|
|
// add needed supporing files
|
|
tmpstr.Append(strZipPath);
|
|
tmpstr.Append("SET*.*\" ");
|
|
tmpstr.Append(strZipPath);
|
|
tmpstr.Append("PROC.INI\" ");
|
|
tmpstr.Append(strZipPath);
|
|
tmpstr.Append("CURSET.DAT\" ");
|
|
tmpstr.Append(strZipPath);
|
|
tmpstr.Append("USA*.*\" ");
|
|
tmpstr.Append(strZipPath);
|
|
tmpstr.Append("TRAN*.*\" ");
|
|
tmpstr.Append(strZipPath);
|
|
tmpstr.Append("XT*.*\" ");
|
|
tmpstr.Append(strZipPath);
|
|
tmpstr.Append("DOC_*.LIB\" ");
|
|
tmpstr.Append(strZipPath);
|
|
tmpstr.Append("RO.FST\" ");
|
|
tmpstr.Append(strZipPath);
|
|
tmpstr.Append("TITLE\" ");
|
|
tmpstr.Append(strZipPath);
|
|
tmpstr.Append("*.LNK\" ");
|
|
tmpstr.Append(strZipPath);
|
|
tmpstr.Append("RTFFILES\\*.*\" ");
|
|
tmpstr.Append(strZipPath);
|
|
tmpstr.Append("TEMPS\\*.*\"");
|
|
|
|
strFilesToArchive = tmpstr.ToString();
|
|
if (SelectedFilesToArchive.Count > 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;
|
|
}
|
|
|
|
}
|
|
}
|