326 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			326 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
/*********************************************************************************************
 | 
						|
 * Copyright 2004 - Volian Enterprises, Inc. All rights reserved.
 | 
						|
 * Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
 | 
						|
 * ------------------------------------------------------------------------------
 | 
						|
 * $Workfile: DataRoot.cs $     $Revision: 2 $
 | 
						|
 * $Author: Jsj $   $Date: 3/06/07 1:29p $
 | 
						|
 *
 | 
						|
 * $History: DataRoot.cs $
 | 
						|
 * 
 | 
						|
 * *****************  Version 2  *****************
 | 
						|
 * User: Jsj          Date: 3/06/07    Time: 1:29p
 | 
						|
 * Updated in $/LibSource/VEObject
 | 
						|
 * Property page check
 | 
						|
 * 
 | 
						|
 * *****************  Version 1  *****************
 | 
						|
 * User: Kathy        Date: 7/27/04    Time: 8:53a
 | 
						|
 * Created in $/LibSource/VEObject
 | 
						|
 *********************************************************************************************/
 | 
						|
 | 
						|
using System;
 | 
						|
using System.Collections;
 | 
						|
using System.Windows.Forms;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.IO;
 | 
						|
using VENetwork;
 | 
						|
using Utils;
 | 
						|
 | 
						|
namespace VEObject
 | 
						|
{
 | 
						|
	/// <summary>
 | 
						|
	/// This module defines the DataRoot class, which is the root of all
 | 
						|
	/// data that is accessible to this user. (i.e. it is the container
 | 
						|
	/// for all data within the datapath).  Applications accessing the database 
 | 
						|
	/// should create a DataRoot.
 | 
						|
	/// </summary>
 | 
						|
	public class VEO_DataRoot : VEO_Base
 | 
						|
	{
 | 
						|
		protected string tmpLocation;
 | 
						|
		protected bool changeLocation;
 | 
						|
 | 
						|
		public VEO_DataRoot(UserRunTime iusrRunTime)
 | 
						|
		{
 | 
						|
			VEObjectType=(int)VEObjectTypesDefs.System;
 | 
						|
			iconStates = new int[5] {6,21,8,22,7};
 | 
						|
			_Title = "VE-PROMS Data "+iusrRunTime.ucfgpath;
 | 
						|
			_Location = iusrRunTime.ucfgpath;
 | 
						|
			changeLocation = false;
 | 
						|
			usrRunTime = iusrRunTime;
 | 
						|
			isNew=false;
 | 
						|
			LoadLockInfo();
 | 
						|
			icon = iconStates[(int)Lock.LockStatus];
 | 
						|
		}
 | 
						|
 | 
						|
		public override void LoadLockInfo()
 | 
						|
		{
 | 
						|
			Lock = new VELock(usrRunTime.syspath, usrRunTime.myUserData, usrRunTime.InMultiUserMode?VENetwork.LockTypes.System:VENetwork.LockTypes.None);
 | 
						|
		}
 | 
						|
 | 
						|
		// The following properties are used in the 'Properties' dialog. This set is used
 | 
						|
		// for modify.
 | 
						|
		[Description("Title"),Category("VE-PROMS Data Paths (CFG File)"),ReadOnly(true)]public string Title
 | 
						|
		{
 | 
						|
			get{return _Title;}
 | 
						|
			set{_Title=value;}
 | 
						|
		}
 | 
						|
		
 | 
						|
		//[Description("Location"),Category("VE-PROMS Data Paths (CFG File)"),EditorAttribute(typeof(DataRootFileDlg), typeof(System.Drawing.Design.UITypeEditor))]public string Location
 | 
						|
		[Description("Location"),Category("VE-PROMS Data Paths (CFG File)"),ReadOnly(true)]public string Location
 | 
						|
		{
 | 
						|
			get
 | 
						|
			{
 | 
						|
				if (!changeLocation)
 | 
						|
					return _Location;
 | 
						|
				else
 | 
						|
					return tmpLocation;
 | 
						|
			}
 | 
						|
			set
 | 
						|
			{
 | 
						|
				FileInfo fi = new FileInfo(value);
 | 
						|
				if (!fi.Exists)
 | 
						|
				{
 | 
						|
					MessageBox.Show("The file that was specified does not exist.");
 | 
						|
					return;
 | 
						|
				}
 | 
						|
				changeLocation = true;
 | 
						|
				tmpLocation=value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool Open()
 | 
						|
		{
 | 
						|
			isOpen = true;
 | 
						|
			// check current multi-user status
 | 
						|
			if (Connection!=null)Connection.Enter(false);
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		// Close clears any multi-user settings for the system level
 | 
						|
		public override bool Close()
 | 
						|
		{
 | 
						|
			isOpen = false;
 | 
						|
			if (Connection!=null)Connection.Exit();
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		public override void Restore()
 | 
						|
		{
 | 
						|
			changeLocation = false;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool mnuAllowDelete()
 | 
						|
		{
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool mnuAllowLckDB()
 | 
						|
		{
 | 
						|
			if (usrRunTime.InMultiUserMode && usrRunTime.sec.PermissionToLockFlag&&Lock.LockStatus==VENetwork.Status.NoLock) return true;
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool mnuAllowNew()
 | 
						|
		{
 | 
						|
//			if (usrRunTime.InMultiUserMode && Lock.LockStatus==VENetwork.Status.LockedByOther)return false;
 | 
						|
			// B2007-005
 | 
						|
			// Standardize the need for a lock. Prevent NEW button on first tree node
 | 
						|
			// if a lock is not set
 | 
						|
			if (amILockedByMe()==false) return false;
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool mnuAllowUnlckDB()
 | 
						|
		{
 | 
						|
			if (usrRunTime.InMultiUserMode && usrRunTime.sec.PermissionToLockFlag&&(Lock.LockStatus==VENetwork.Status.Locked||
 | 
						|
				Lock.LockStatus==VENetwork.Status.LockPending)) return true;
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
		// Add a Data Path. Private method used below.
 | 
						|
		private void AddDataPath(string entry)
 | 
						|
		{
 | 
						|
			int comma;
 | 
						|
			string tmp;
 | 
						|
			string loc;
 | 
						|
			string title;
 | 
						|
 | 
						|
			comma = entry.IndexOf(",");
 | 
						|
			tmp=entry.Substring(0,comma);
 | 
						|
			loc=tmp.Trim();
 | 
						|
			//Make sure datapath has an ending backslash
 | 
						|
			if (!(loc.EndsWith("\\")))
 | 
						|
				loc = loc + "\\";
 | 
						|
 | 
						|
			tmp=entry.Substring(comma+1,entry.Length-comma-2);  // -2, don't copy ";"
 | 
						|
			title=tmp.Trim();
 | 
						|
 | 
						|
			VEO_DataPath dp = new VEO_DataPath(usrRunTime,title,loc);
 | 
						|
			dp.parentObj = (VEO_Base) this;
 | 
						|
			Children.Add(dp);
 | 
						|
		}
 | 
						|
 | 
						|
		// Get the datapath list. If in demo mode, use sample list; otherwise read in
 | 
						|
		// from the user's cfg file.
 | 
						|
		public override bool Read(bool dummy)
 | 
						|
		{
 | 
						|
			PrivateProfile ppCfg;
 | 
						|
			string dpath;
 | 
						|
			string entry;
 | 
						|
			int semi;
 | 
						|
			int strtindx=0;
 | 
						|
			int netpth;
 | 
						|
 | 
						|
			if (usrRunTime.sec.isDemoMode)
 | 
						|
			{
 | 
						|
				dpath = usrRunTime.syspath + "\\samples\\,Demo Data;";
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				// for this data root, read in the datapath. If a user's cfg exists
 | 
						|
				// use that data. Otherwise, use the menuwin2.xml data which is part
 | 
						|
				// of the user's run time.
 | 
						|
				ppCfg = new PrivateProfile(usrRunTime.ucfgpath);
 | 
						|
//				dpath=ppCfg.Attr("/ini/section[@name='Menu']/param[@name='DataPath']/@value");
 | 
						|
				dpath=ppCfg.Attr("Menu","DataPath");
 | 
						|
				if (dpath==null || dpath=="")return false;
 | 
						|
			}
 | 
						|
			semi=dpath.IndexOf(";",strtindx);
 | 
						|
			if (semi == -1) 
 | 
						|
			{
 | 
						|
				MessageBox.Show("Must have semi-colon in datapath");
 | 
						|
				Environment.Exit(-1);
 | 
						|
			}
 | 
						|
			while (semi !=-1)
 | 
						|
			{
 | 
						|
				entry = dpath.Substring(strtindx,semi-strtindx+1);
 | 
						|
				netpth = entry.IndexOf("////",0);
 | 
						|
				if (netpth != -1)
 | 
						|
					//if(GetNetTempDisk()) AddDataPath(entry);
 | 
						|
					MessageBox.Show("Need to support network temp disk");
 | 
						|
				else
 | 
						|
					AddDataPath(entry);
 | 
						|
 | 
						|
				if (semi+1>dpath.Length)
 | 
						|
					strtindx=-1;
 | 
						|
				else
 | 
						|
				{
 | 
						|
					strtindx=semi+1;
 | 
						|
					semi=dpath.IndexOf(";",strtindx);
 | 
						|
				}
 | 
						|
			}
 | 
						|
			
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		// use the change to the cfg file.
 | 
						|
		public override bool Write()
 | 
						|
		{
 | 
						|
			// check for cfg file existence
 | 
						|
			FileInfo fi = new FileInfo(Location);
 | 
						|
			if (fi.Exists)
 | 
						|
			{
 | 
						|
				if(changeLocation)_Location=tmpLocation;
 | 
						|
				changeLocation=false;
 | 
						|
				this._Title = "VE-PROMS Data " + Location;
 | 
						|
				usrRunTime.ucfgpath = Location;
 | 
						|
				return true;
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				MessageBox.Show("The file that was specified does not exist.");
 | 
						|
				return false;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		// add a new datapath
 | 
						|
		public override Object MakeNewChild()
 | 
						|
		{
 | 
						|
			VEO_DataPathN dp = new VEO_DataPathN(usrRunTime,null,null);
 | 
						|
			return dp;
 | 
						|
		}
 | 
						|
 | 
						|
		// check that the directory input by the user exists. If so, add the
 | 
						|
		// directory & title to the cfg file.
 | 
						|
		public override bool SaveChild(Object obj)
 | 
						|
		{
 | 
						|
			VEO_DataPathN dp = (VEO_DataPathN) obj;
 | 
						|
			// B2007-005
 | 
						|
			// If the user didn't enter a location, then show an error message
 | 
						|
			//and don't continue with the save.
 | 
						|
			if (dp.Location == null || dp.Location.Length == 0)
 | 
						|
			{
 | 
						|
				MessageBox.Show("No data path Location specified.","Error");
 | 
						|
				return false;
 | 
						|
			}
 | 
						|
			dp.SaveFields();
 | 
						|
			// Check for existance of directory if it doesn't exist give message
 | 
						|
			// and return;
 | 
						|
			string pth = dp._Location;
 | 
						|
			DirectoryInfo di = new DirectoryInfo(pth);
 | 
						|
			if (di.Exists == false)
 | 
						|
			{
 | 
						|
				try
 | 
						|
				{
 | 
						|
					di.Create();
 | 
						|
				}
 | 
						|
				catch
 | 
						|
				{
 | 
						|
					MessageBox.Show("Directory for data path doesn't exist, and could not be created.");
 | 
						|
				}
 | 
						|
				return false;
 | 
						|
			}
 | 
						|
 | 
						|
			string newcfgpth = dp._Location+","+dp._Title+";";
 | 
						|
			usrRunTime.AddPathToCfg(newcfgpth);
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
 | 
						|
		public override void DoListView(ListView veoListView)
 | 
						|
		{
 | 
						|
			ListViewItem item=null;
 | 
						|
			veoListView.Columns.Add("Location", 120, HorizontalAlignment.Left);
 | 
						|
			veoListView.Columns.Add("Title", 300, HorizontalAlignment.Left);
 | 
						|
			
 | 
						|
			for (int i=0; i<Children.Count; i++)
 | 
						|
			{
 | 
						|
				VEO_DataPath dp = (VEO_DataPath) Children[i];
 | 
						|
				item = new ListViewItem(dp._Location,dp.icon);
 | 
						|
				item.Tag = dp;
 | 
						|
				item.SubItems.Add(dp._Title);
 | 
						|
				veoListView.Items.Add(item);
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	public class DataRootFileDlg : 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)
 | 
						|
		{
 | 
						|
			OpenFileDialog FileDialog1 = new OpenFileDialog();
 | 
						|
			FileDialog1.AddExtension = true;
 | 
						|
			FileDialog1.CheckPathExists = true;
 | 
						|
			FileDialog1.DefaultExt = ".cfg";
 | 
						|
			FileDialog1.Filter = "CFG Files|*.cfg|All Files|*.*||";
 | 
						|
			FileDialog1.DereferenceLinks = true;
 | 
						|
			FileDialog1.Title = "User Configuration File (defines datapath)";
 | 
						|
			FileDialog1.FileName = value.ToString();
 | 
						|
			FileDialog1.ShowDialog();
 | 
						|
 | 
						|
			return FileDialog1.FileName;
 | 
						|
		}
 | 
						|
 | 
						|
		public override bool GetPaintValueSupported(
 | 
						|
			System.ComponentModel.ITypeDescriptorContext context)
 | 
						|
		{
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |