Commit for development environment setup
This commit is contained in:
@@ -0,0 +1,701 @@
|
||||
/*********************************************************************************************
|
||||
* Copyright 2004 - Volian Enterprises, Inc. All rights reserved.
|
||||
* Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
||||
* ------------------------------------------------------------------------------
|
||||
* $Workfile: Plant.cs $ $Revision: 10 $
|
||||
* $Author: Jsj $ $Date: 10/20/06 9:34a $
|
||||
*
|
||||
* $History: Plant.cs $
|
||||
*
|
||||
* ***************** Version 10 *****************
|
||||
* User: Jsj Date: 10/20/06 Time: 9:34a
|
||||
* Updated in $/LibSource/VEObject
|
||||
* long name fix
|
||||
*
|
||||
* ***************** Version 9 *****************
|
||||
* User: Jsj Date: 9/26/06 Time: 9:38a
|
||||
* Updated in $/LibSource/VEObject
|
||||
* check for a siingle quote in directory name
|
||||
*
|
||||
* ***************** Version 8 *****************
|
||||
* User: Kathy Date: 6/06/05 Time: 12:35p
|
||||
* Updated in $/LibSource/VEObject
|
||||
* Allow lock set even if system lock set
|
||||
*
|
||||
* ***************** Version 7 *****************
|
||||
* User: Kathy Date: 4/12/05 Time: 1:01p
|
||||
* Updated in $/LibSource/VEObject
|
||||
*
|
||||
* ***************** Version 6 *****************
|
||||
* User: Kathy Date: 2/02/05 Time: 10:13a
|
||||
* Updated in $/LibSource/VEObject
|
||||
* B2005-006: fix missing proc sets under plant
|
||||
*
|
||||
* ***************** Version 5 *****************
|
||||
* User: Kathy Date: 1/31/05 Time: 11:06a
|
||||
* Updated in $/LibSource/VEObject
|
||||
* Fix B2005-005 (connection & delete directory errors). also, fix icon
|
||||
* usage & security for new
|
||||
*
|
||||
* ***************** Version 4 *****************
|
||||
* User: Kathy Date: 1/24/05 Time: 2:45p
|
||||
* Updated in $/LibSource/VEObject
|
||||
* B2005-004 fixes
|
||||
*
|
||||
* ***************** Version 3 *****************
|
||||
* User: Kathy Date: 1/14/05 Time: 10:38a
|
||||
* Updated in $/LibSource/VEObject
|
||||
* B2004-061: Fix security optoins
|
||||
*
|
||||
* ***************** Version 2 *****************
|
||||
* User: Kathy Date: 1/10/05 Time: 12:58p
|
||||
* Updated in $/LibSource/VEObject
|
||||
* B2004-063 fix
|
||||
*
|
||||
* ***************** Version 1 *****************
|
||||
* User: Kathy Date: 7/27/04 Time: 8:53a
|
||||
* Created in $/LibSource/VEObject
|
||||
*********************************************************************************************/
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
using System.ComponentModel;
|
||||
using Utils;
|
||||
using VENetwork;
|
||||
|
||||
namespace VEObject
|
||||
{
|
||||
/// <summary>
|
||||
/// This defines the VEO_Plant class which handles plant data. This contains
|
||||
/// support for the vexxx layer.
|
||||
/// </summary>
|
||||
public class VEO_Plant : VEO_Base
|
||||
{
|
||||
public long accessFlags;
|
||||
protected string tmpTitle;
|
||||
protected string tmpLocation;
|
||||
protected bool changeLocation;
|
||||
protected bool changeTitle;
|
||||
private string PrevDirectory;
|
||||
public VEO_Plant(UserRunTime iusrRunTime, string ititle, string ipath)
|
||||
{
|
||||
// iconStates are the imagelist indexes for the tree view (imglist1)
|
||||
// the states are Nolock, LockedByMe, LockedByOther, LockPending, Empty.
|
||||
iconStates = new int[5] {3,21,5,22,4};
|
||||
_Title = ititle;
|
||||
_Location = ipath;
|
||||
usrRunTime = iusrRunTime;
|
||||
changeLocation=false;
|
||||
changeTitle=false;
|
||||
IsEmpty=false;
|
||||
VEObjectType=(int)VEObjectTypesDefs.Plant;
|
||||
isNew=false;
|
||||
LoadLockInfo();
|
||||
icon = iconStates[(int)Lock.LockStatus];
|
||||
if (Lock.LockStatus != VENetwork.Status.LockedByOther)
|
||||
{
|
||||
if (ipath != null)
|
||||
{
|
||||
string[] dirs = new string[40];
|
||||
dirs = Directory.GetDirectories(ipath);
|
||||
if (dirs.Length == 0)
|
||||
{
|
||||
IsEmpty=true;
|
||||
//only reset the icon to empty if there is no lock icon.
|
||||
//if a lock, show the lock icon
|
||||
if (Lock.LockStatus == VENetwork.Status.NoLock) icon = iconStates[(int)VEO_IconStates.Empty];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void LoadLockInfo()
|
||||
{
|
||||
Lock = new VELock(_Location, usrRunTime.myUserData, usrRunTime.InMultiUserMode?VENetwork.LockTypes.Plant:VENetwork.LockTypes.None);
|
||||
}
|
||||
|
||||
// Properties used for modify of 'Properties' from File menu.
|
||||
[Description("Location"),Category("Plant"),ReadOnly(true)]public string Location
|
||||
{
|
||||
get{return _Location;}
|
||||
set{_Location=value;}
|
||||
}
|
||||
|
||||
[Description("Title"),Category("Plant")]public string Title
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!changeTitle)
|
||||
return _Title;
|
||||
else
|
||||
return tmpTitle;
|
||||
}
|
||||
set
|
||||
{
|
||||
changeTitle=true;
|
||||
tmpTitle=value;
|
||||
}
|
||||
}
|
||||
|
||||
// The open method checks for multi-user settings at the plant level. It
|
||||
// also positions into the plant directory.
|
||||
public override bool Open()
|
||||
{
|
||||
isOpen = true;
|
||||
PrevDirectory = Directory.GetCurrentDirectory();
|
||||
if(_Location!=null)Directory.SetCurrentDirectory(_Location);
|
||||
if (Connection!=null)Connection.Enter(false);
|
||||
return true;
|
||||
}
|
||||
|
||||
// The close method resets, if necessary from any multi-user settings and
|
||||
// positions back to the datapath directory (which is a level above the
|
||||
// current level)
|
||||
public override bool Close()
|
||||
{
|
||||
if (!isOpen)return false;
|
||||
isOpen=false;
|
||||
if (Connection!=null)Connection.Exit();
|
||||
Directory.SetCurrentDirectory("..");
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void Restore()
|
||||
{
|
||||
changeTitle=false;
|
||||
}
|
||||
|
||||
public override bool Delete()
|
||||
{
|
||||
DialogResult result = MessageBox.Show("Are you sure you want to delete the entire plant directory " + this._Location,"Confirm Delete Again",MessageBoxButtons.YesNoCancel);
|
||||
if (result == DialogResult.Yes)
|
||||
{
|
||||
// delete the entire directory
|
||||
if (Directory.Exists(this._Location))
|
||||
{
|
||||
if(isOpen)Close();
|
||||
try
|
||||
{
|
||||
Directory.Delete(this._Location,true);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MessageBox.Show("Could not delete directory - manually delete " + this._Location + ". Cause: " + e.Message);
|
||||
}
|
||||
if (Directory.Exists(this._Location))
|
||||
{
|
||||
MessageBox.Show("Unable to delete the plant directory.");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void CreateProcSet(string dirpath, XmlElement nm, string dirname, long flags)
|
||||
{
|
||||
// see if there is a title file in the directory and use
|
||||
// it if there is, otherwise use menuname & if there's no menu
|
||||
// name, use the directory name.
|
||||
VEO_ProcSet procset = null;
|
||||
string titlepath = dirpath + "\\" + "Title";
|
||||
FileInfo fi = new FileInfo(titlepath);
|
||||
if (File.Exists(titlepath))
|
||||
{
|
||||
StreamReader myReader = new StreamReader(titlepath);
|
||||
titlepath = myReader.ReadLine();
|
||||
myReader.Close();
|
||||
procset = new VEO_ProcSet(usrRunTime, titlepath.Trim(), dirpath, flags);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (nm != null)
|
||||
procset = new VEO_ProcSet(usrRunTime, nm.InnerText, dirpath, flags);
|
||||
else
|
||||
{
|
||||
string tmpdirnm = dirname;
|
||||
int indx=0;
|
||||
// if this is temp change directory, tack on text to recognize it
|
||||
if ((indx=dirpath.ToUpper().IndexOf("TMPCHG"))>-1)
|
||||
tmpdirnm = dirname + " - Temporary Change Version";
|
||||
// if this is approved, tack on Current Approved Version to the title
|
||||
else if ((indx=dirpath.ToUpper().IndexOf("APPROVED"))>-1)
|
||||
tmpdirnm = dirname + " - Current Approved Version";
|
||||
procset = new VEO_ProcSet(usrRunTime, tmpdirnm, dirpath,flags);
|
||||
}
|
||||
}
|
||||
procset.parentObj = this;
|
||||
Children.Add(procset);
|
||||
}
|
||||
|
||||
// private method, used below, to add a directory to the child list
|
||||
// (list contains proc sets)
|
||||
private bool ProcessDirName(XmlElement par, string dirname, int plntsecindx)
|
||||
{
|
||||
XmlNodeList nodeList = par.SelectNodes("ProcFile");
|
||||
if (nodeList == null) return false;
|
||||
|
||||
foreach (XmlNode dirnd in nodeList)
|
||||
{
|
||||
XmlElement dele=(XmlElement)dirnd;
|
||||
string dirpath = _Location + "\\" + dirname;
|
||||
if (File.Exists(dirpath+"\\"+dirnd.InnerText))
|
||||
{
|
||||
//
|
||||
// see if there's an exception or a requirement, i.e. use
|
||||
// the Working Draft if there's no proc2 directory (Except)
|
||||
// or use the Working Draft Unit 1 if there's a proc2
|
||||
// directory (Require)
|
||||
bool excpt = false;
|
||||
bool req = true;
|
||||
string path1=null;
|
||||
XmlElement except = (XmlElement) par.SelectSingleNode("Exception");
|
||||
if (except != null)
|
||||
{
|
||||
// if this exception directory exists, don't add this to
|
||||
// the set.
|
||||
|
||||
path1 = dirpath + "\\" + except.InnerText;
|
||||
if (Directory.Exists(path1)) excpt = true;
|
||||
}
|
||||
XmlElement require = (XmlElement) par.SelectSingleNode("Require");
|
||||
if (require != null)
|
||||
{
|
||||
// if this require directory exists, add this to set only
|
||||
// if this exists.
|
||||
path1 = dirpath + "\\" + require.InnerText;
|
||||
if (Directory.Exists(path1) == false) req = false;
|
||||
}
|
||||
if (excpt == false && req == true)
|
||||
{
|
||||
XmlElement nm = (XmlElement) par.SelectSingleNode("MenuName");
|
||||
long flags=0L;
|
||||
// bug fix B2006-045
|
||||
// need to convert long folder/file names to short (8.3)
|
||||
ShortName sname = new ShortName(dirpath);
|
||||
bool hasSec = usrRunTime.sec.ProcSetHasSecurity(plntsecindx, Path.GetFileName(sname.ShortFileName));
|
||||
// bool hasSec = usrRunTime.sec.ProcSetHasSecurity(plntsecindx, dirname);
|
||||
if (this.usrRunTime.sec==null) flags=Security.SUPERACCESS;
|
||||
else if (hasSec) flags = usrRunTime.sec.GetProcSecurity(sname.ShortFileName);
|
||||
// else if (hasSec) flags = usrRunTime.sec.GetProcSecurity(dirpath);
|
||||
|
||||
if((hasSec && flags!=0L) || (!hasSec&&!usrRunTime.sec.BlockAccess()))
|
||||
{
|
||||
CreateProcSet(dirpath, nm, dirname, flags);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// This method processes through the SubDirSearch xmlelement tree in
|
||||
// menuwin2.xml to see if the input procedure set directory has valid
|
||||
// procedure set subdirectories. Arguments are:
|
||||
// subtop is xmlelement for the SubDirSearch in menuwin2.xml, dir is actual
|
||||
// procset directory name (for example, procs, proc000.dvt, etc) and
|
||||
// dname is the name to be used for the directory name in the menuwin2.xml
|
||||
// file under the SubDirSearch xmlelement tree (for example, procs, *.dvt, etc)
|
||||
private bool ProcessSubDir(XmlElement subtop, string dri, string dname, int plntsecindx)
|
||||
{
|
||||
XmlNodeList nodeList;
|
||||
string xp = "descendant::ProcSet[Dir = \'" + dname + "\']";
|
||||
|
||||
try
|
||||
{
|
||||
nodeList = subtop.SelectNodes(xp);
|
||||
// for each possible subdirectory for this directory, see if it
|
||||
// exists.
|
||||
foreach (XmlNode subdirname in nodeList)
|
||||
{
|
||||
XmlElement subdele=(XmlElement)subdirname;
|
||||
XmlNodeList FnodeList = subdirname.SelectNodes("ProcFile");
|
||||
// see if the files listed exist, if so, add them to the
|
||||
// plant procset list.
|
||||
foreach (XmlNode dirnd in FnodeList)
|
||||
{
|
||||
XmlElement dele=(XmlElement)dirnd;
|
||||
string dirpath = _Location + "\\" + dri;
|
||||
if (File.Exists(dirpath+"\\"+dirnd.InnerText))
|
||||
{
|
||||
XmlElement nm = (XmlElement) subdirname.SelectSingleNode("MenuName");
|
||||
string subdir = dirnd.InnerText.Substring(0,dirnd.InnerText.LastIndexOf("\\"));
|
||||
|
||||
long flags=0L;
|
||||
bool hasSec = usrRunTime.sec.ProcSetHasSecurity(plntsecindx, dri+"\\"+subdir);
|
||||
if (this.usrRunTime.sec==null) flags=Security.SUPERACCESS;
|
||||
else if (hasSec) flags = usrRunTime.sec.GetProcSecurity(dirpath + "\\" + subdir);
|
||||
|
||||
if((hasSec && flags!=0L) || (!hasSec&&!usrRunTime.sec.BlockAccess()))
|
||||
CreateProcSet(dirpath+"\\"+subdir, nm, dri, flags);
|
||||
}
|
||||
break; // out of file check foreach
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MessageBox.Show(e.Message);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Using the menuwin2.xml file, read in child list by seeing which
|
||||
// directories (proc sets) are contained in this vexxx directory.
|
||||
public override bool Read(bool ChkForChldOnly)
|
||||
{
|
||||
bool didone;
|
||||
Cursor.Current = Cursors.WaitCursor;
|
||||
|
||||
// using the . Then do exist tests to see if they
|
||||
// exist on this datapath.
|
||||
usrRunTime.LoadMenuWin2();
|
||||
XmlDocument xmldoc = usrRunTime.menuwin2XML.GetXmlDoc();
|
||||
|
||||
XmlElement top = (XmlElement) xmldoc.FirstChild;
|
||||
XmlElement sys = (XmlElement) top.SelectSingleNode("PlantAttach");
|
||||
XmlElement subtop = (XmlElement) top.SelectSingleNode("SubDirSearch");
|
||||
|
||||
DirectoryInfo cur = new DirectoryInfo(_Location);
|
||||
DirectoryInfo[] diArr = cur.GetDirectories();
|
||||
int plntsecindx = usrRunTime.sec.GetPlantSecurityIndex(_Location);
|
||||
|
||||
foreach (DirectoryInfo dri in diArr)
|
||||
{
|
||||
XmlNodeList nodeList;
|
||||
string dname = null;
|
||||
int indx;
|
||||
if ((indx=dri.Name.IndexOf("."))>-1)
|
||||
{
|
||||
//must be *.prc, *.bck, *.dvt, *.sl?
|
||||
if (indx+4<=dri.Name.Length)
|
||||
{
|
||||
dname = "*." + dri.Name.Substring(indx+1,3).ToLower();
|
||||
if (dname.StartsWith("*.sl"))
|
||||
dname = dname.Substring(0,4) + "?";
|
||||
}
|
||||
else
|
||||
dname = null;
|
||||
}
|
||||
else if ((indx=dri.Name.IndexOf("'"))>-1)
|
||||
{
|
||||
// bug fix B2006-047
|
||||
// if not a .PRC folder, then we get an error looking up
|
||||
// the directory name in XML (if it has an ' in the name)
|
||||
dname = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
dname = dri.Name.ToLower();
|
||||
}
|
||||
|
||||
|
||||
if (dname!=null)
|
||||
{
|
||||
string xp = "descendant::ProcSet[Dir = \'" + dname + "\']";
|
||||
|
||||
try
|
||||
{
|
||||
nodeList = sys.SelectNodes(xp);
|
||||
foreach (XmlNode dirname in nodeList)
|
||||
{
|
||||
XmlElement dele=(XmlElement)dirname;
|
||||
didone = ProcessDirName(dele, dri.Name, plntsecindx);
|
||||
if (Children.Count > 0 && ChkForChldOnly)
|
||||
{
|
||||
Cursor.Current = Cursors.Default;
|
||||
return true;
|
||||
}
|
||||
// if a directory was found, see if any
|
||||
// subdirectories exist that need added too.
|
||||
bool didsub = false;
|
||||
if (didone) didsub = ProcessSubDir(subtop, dri.Name, dname, plntsecindx);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MessageBox.Show(e.Message.ToString());
|
||||
Cursor.Current = Cursors.Default;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
// if no children, change icon to empty (unless it has a lock icon)
|
||||
if (Children.Count <=0 && Lock.LockStatus == VENetwork.Status.NoLock) icon = iconStates[(int)VEO_IconStates.Empty];
|
||||
Cursor.Current = Cursors.Default;
|
||||
return true;
|
||||
}
|
||||
|
||||
// write out change (modification of title for plant) for plant to
|
||||
// the menuwin.xml file
|
||||
public override bool Write()
|
||||
{
|
||||
|
||||
string newtitle=null;
|
||||
if (changeTitle)
|
||||
{
|
||||
newtitle = tmpTitle;
|
||||
bool success = usrRunTime.ModMenuWin(newtitle, this._Title);
|
||||
if (success==false)
|
||||
{
|
||||
MessageBox.Show("Could not modify title for the plant.");
|
||||
return false;
|
||||
}
|
||||
MessageBox.Show("Please send \\ve-proms\\menuwin & \\ve-proms\\menuwin.xml files to Volian.");
|
||||
_Title=newtitle;
|
||||
changeTitle=false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// create a new proc set object (child for this plant)
|
||||
public override Object MakeNewChild()
|
||||
{
|
||||
if (!isOpen)Open();
|
||||
VEO_ProcSet ps = new VEO_ProcSetN(usrRunTime,null,_Location);
|
||||
return ps;
|
||||
}
|
||||
|
||||
// save a new proc set (child for this plant)
|
||||
public override bool SaveChild(Object obj)
|
||||
{
|
||||
VEO_ProcSetN ps = (VEO_ProcSetN) obj;
|
||||
|
||||
// check for valid child
|
||||
bool valid = ps.IsValid();
|
||||
if (valid == false) return false;
|
||||
|
||||
valid = ps.SaveNew("dummy");
|
||||
if (valid == true)
|
||||
{
|
||||
// add this item to this plants list of children.
|
||||
Children.Add((VEO_ProcSet)obj);
|
||||
ps.parentObj=this;
|
||||
ps._Location = this._Location + "\\" + ps._Location;
|
||||
ps.icon=iconStates[0];
|
||||
// if this plant's icon is 'empty', change it to either lock (if locked),
|
||||
// or to not empty.
|
||||
icon = iconStates[(int)Lock.LockStatus];
|
||||
IsEmpty=false;
|
||||
}
|
||||
return valid;
|
||||
}
|
||||
|
||||
// save a new plant directory
|
||||
public override bool SaveNew(string pth)
|
||||
{
|
||||
|
||||
// check for non-empty data.
|
||||
|
||||
if (tmpLocation == null || tmpLocation == "" || tmpTitle == null || tmpTitle == "")
|
||||
{
|
||||
MessageBox.Show("Need to fill in all data.");
|
||||
return false;
|
||||
}
|
||||
// for this new plant, make the directory and write out
|
||||
// to the menuwin & menuwin.xml files.
|
||||
|
||||
// if using the file browser dialog, the drive may be included, if so
|
||||
// check that the directory matches the datapath.
|
||||
int slash = tmpLocation.LastIndexOf("\\");
|
||||
if (slash>0)
|
||||
{
|
||||
string drvtmp = tmpLocation.Substring(0,slash+1);
|
||||
ShortName sname = new ShortName(drvtmp);
|
||||
string drv=sname.ShortFileName;
|
||||
sname = null;
|
||||
if (drv.ToUpper() != pth.ToUpper())
|
||||
{
|
||||
MessageBox.Show("Invalid path, directory must match datapath");
|
||||
return false;
|
||||
}
|
||||
// remove the drive part of the path, it's added back later.
|
||||
tmpLocation = tmpLocation.Substring(slash+1,tmpLocation.Length-(slash+1));
|
||||
}
|
||||
|
||||
// check for ve*
|
||||
if (tmpLocation.Substring(0,2).ToUpper() != "VE")
|
||||
{
|
||||
MessageBox.Show("First two characters must be 'VE' for new plant directory name.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// also check that the name is not greater than 8 characters (an old 16-bit hangover)
|
||||
if (tmpLocation.Length>8)
|
||||
{
|
||||
MessageBox.Show("Directory/plant name must be 8 characters or less.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// make path to new directory & check for existence.
|
||||
string curpath=null;
|
||||
curpath = pth + "\\" + this.tmpLocation;
|
||||
DirectoryInfo cur = new DirectoryInfo(curpath);
|
||||
|
||||
if (cur.Exists )
|
||||
{
|
||||
DirectoryInfo[] di = cur.GetDirectories("*");
|
||||
FileInfo[] fi = cur.GetFiles("*");
|
||||
if (di.Length>0 || fi.Length>0)
|
||||
{
|
||||
MessageBox.Show("The plant directory you specified already exists & has contents. Enter a different name.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// if the directory exists & it is already in the menu file, it didn't succeed
|
||||
// in adding the new item.
|
||||
if (cur.Exists && (usrRunTime.IsInMenuWin(this.tmpLocation)!=0))
|
||||
{
|
||||
MessageBox.Show("The plant directory you specified already exists and the plant name exists in the menu files.");
|
||||
return false;
|
||||
}
|
||||
try
|
||||
{
|
||||
if (cur.Exists == false)cur.Create();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MessageBox.Show("Error creating directory: " + e.Message);
|
||||
return false;
|
||||
}
|
||||
|
||||
// now add to end of menuwin & menuwin.xml.
|
||||
bool success = usrRunTime.AddToMenuWin(this.tmpTitle,this.tmpLocation);
|
||||
if (success==false)
|
||||
{
|
||||
MessageBox.Show("Could not add directory to ve-proms menuing files. Could not create plant directory.");
|
||||
cur.Delete();
|
||||
return false;
|
||||
}
|
||||
MessageBox.Show("The VE-PROMS Security Access Module (VESAM) may need to be used to set permissions to access the new plant.");
|
||||
_Title=tmpTitle;
|
||||
_Location=tmpLocation;
|
||||
changeTitle=false;
|
||||
changeLocation=false;
|
||||
// set a security flag for this. Cases could be that there is no security in vesam,
|
||||
// that it has security in vesam, though it didn't exist for this user until now,
|
||||
// or the user could be super user.
|
||||
accessFlags=0L;
|
||||
int idx = usrRunTime.sec.GetPlantSecurityIndex(curpath);
|
||||
accessFlags = usrRunTime.sec.GetPlantSecurity(idx);
|
||||
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_ProcSet ps = (VEO_ProcSet) Children[i];
|
||||
item = new ListViewItem(ps._Location,ps.icon);
|
||||
item.Tag = ps;
|
||||
item.SubItems.Add(ps._Title);
|
||||
veoListView.Items.Add(item);
|
||||
}
|
||||
}
|
||||
|
||||
public override bool CollapseSibling()
|
||||
{
|
||||
if (!usrRunTime.InMultiUserMode) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool mnuAllowLckDB()
|
||||
{
|
||||
if (!usrRunTime.InMultiUserMode) return false;
|
||||
//if (amILockedByMe()==true) return false;
|
||||
if (Lock.LockStatus==VENetwork.Status.LockedByOther)return false;
|
||||
// if there are no children, allow a lock in case the user is creating a plant level
|
||||
// with procedure set
|
||||
if (this.Children.Count==0) return true;
|
||||
if ((accessFlags&Security.LOCKSET)==Security.LOCKSET && Lock.LockStatus==VENetwork.Status.NoLock) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool mnuAllowUnlckDB()
|
||||
{
|
||||
if (!usrRunTime.InMultiUserMode) return false;
|
||||
if ((accessFlags&Security.LOCKSET)==Security.LOCKSET&&(Lock.LockStatus==VENetwork.Status.Locked||
|
||||
Lock.LockStatus==VENetwork.Status.LockPending)) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool mnuAllowDelete()
|
||||
{
|
||||
if (amILockedByMe()==false) return false;
|
||||
if(usrRunTime.sec.SystemAdminFlag) return true;
|
||||
return false;
|
||||
}
|
||||
public override bool mnuAllowNew()
|
||||
{
|
||||
if (amILockedByMe()==false) return false;
|
||||
if (usrRunTime.sec.PermissionToManageFlag) return true;
|
||||
return false;
|
||||
}
|
||||
public override bool canEdit()
|
||||
{
|
||||
if (amILockedByMe()==false) return false;
|
||||
if(usrRunTime.sec.SystemAdminFlag) return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// the following class is used to support the New plant option from the 'Properties'
|
||||
// dialog by making location to be editable.
|
||||
class VEO_PlantN : VEO_Plant
|
||||
{
|
||||
public VEO_PlantN(UserRunTime iusrRunTime, string ititle, string ipath)
|
||||
: base(iusrRunTime, ititle, ipath)
|
||||
{
|
||||
isNew=true;
|
||||
}
|
||||
|
||||
// this method is used so that if a new datapath is created, it is associated
|
||||
// with editable properties (such as path). When the object exists this is
|
||||
// not editable. So when a new object is created, if it's successful, it's
|
||||
// copied to an object which is not editable for the treeview & any further
|
||||
// operations.
|
||||
public override Object Copy()
|
||||
{
|
||||
VEO_Plant plnt = new VEO_Plant(usrRunTime,this._Title,this._Location);
|
||||
plnt.parentObj = this.parentObj;
|
||||
plnt.accessFlags = this.accessFlags;
|
||||
return (Object) plnt;
|
||||
}
|
||||
|
||||
public void SaveFields()
|
||||
{
|
||||
_Location=tmpLocation;
|
||||
_Title=tmpTitle;
|
||||
changeLocation=false;
|
||||
changeTitle=false;
|
||||
|
||||
}
|
||||
[Description("Location"),Category("Plant"),ReadOnly(false),EditorAttribute(typeof(VECreateFolderBrowserDlg), typeof(System.Drawing.Design.UITypeEditor))]public new string Location
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!changeLocation)
|
||||
return _Location;
|
||||
else
|
||||
return tmpLocation;
|
||||
}
|
||||
set
|
||||
{
|
||||
changeLocation=true;
|
||||
tmpLocation=value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user