/********************************************************************************************* * 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 { /// /// 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. /// 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