#define ItemWithContent using System; using System.Collections.Generic; using System.Text; using Csla; using Csla.Data; using System.Data; using System.Data.SqlClient; using System.Xml; using System.Drawing; using System.Text.RegularExpressions; namespace VEPROMS.CSLA.Library { #region Item public partial class Item : IVEDrillDown { public static void ShowAllocated(string title) { Console.WriteLine("{0} - {1} Items in the dictionary", title, _CacheByPrimaryKey.Count); foreach (List itmlst in _CacheByPrimaryKey.Values) foreach(Item itm in itmlst) Console.WriteLine("Item {0} UniqueID {1}", itm.ItemID, itm.MyItemUnique); Console.WriteLine("- - - - - -"); } public override string ToString() { return string.Format("{0} {1}", MyContent.Number, MyContent.Text).Trim(); } // TODO: Move to ItemInfo Extension #region IVEDrillDown public System.Collections.IList GetChildren() { return this.MyContent.ContentParts; } public bool HasChildren { get { return this.MyContent.ContentPartCount > 0; } } public Item MyProcedure { get { // Walk up active parents until the parent is not an item Item tmp = this; while (tmp.ActiveParent.GetType() != typeof(DocVersion)) tmp = (Item)tmp.ActiveParent; return tmp; } } private IVEDrillDown _ActiveParent = null; public IVEDrillDown ActiveParent { get { if (_ActiveParent == null) { if (MyPrevious != null) _ActiveParent = _MyPrevious.ActiveParent; else { if (ItemDocVersionCount > 0) _ActiveParent = this.ItemDocVersions[0].MyDocVersion; else { if (this.ItemParts == null || this.ItemPartCount == 0) _ActiveParent = this; else _ActiveParent = this.ItemParts[0].MyContent.ContentItems[0].MyItem; } } } return _ActiveParent == this ? null : _ActiveParent; } } private Format _ActiveFormat = null;// Added to cache ActiveFormat public Format ActiveFormat { get { if (_ActiveFormat == null) _ActiveFormat = (LocalFormat != null ? LocalFormat : ActiveParent.ActiveFormat); return _ActiveFormat; } set { _ActiveFormat = null; // Reset } } public Format LocalFormat { get { return MyContent.MyFormat; } } public ConfigDynamicTypeDescriptor MyConfig { get { return null; } } #endregion public void MoveItem(IVEDrillDownReadOnly pInfo, int index) { bool wasfirstchild = false; ItemInfo parentInfo = pInfo as ItemInfo; DocVersionInfo parentInfoDV = pInfo as DocVersionInfo; IList children = null; E_FromType partType = 0; // this is needed later to determine sub-group type. if (parentInfo != null) { // this may have subgroups, need to use part type to get children list... ItemInfo thisinfo = ItemInfo.Get(ItemID); partType = thisinfo.FirstSibling.ItemParts[0].PartType; children = (IList)parentInfo.Lookup((int)partType); } else children = (IList)parentInfoDV.GetChildren(); int numChild = children.Count; if (this.MyPrevious == null) wasfirstchild = true; Item origNextItem = null; // First, remove from this item from its list. To do this, get the current item's next point and redirect it's myprevious // to this item's previous... if (NextItems != null && NextItems.Count > 0) { origNextItem = NextItems.Items[0]; origNextItem.MyPrevious = this.MyPrevious; this.Save(); } // check to see if the item is being moved into the middle of some items. newPreviousItem is the item defined // by index-1, i.e. inserting below newPreviousItem. ItemInfo newPreviousInfo = (index == 0) ? null : children[index - 1]; ItemInfo newNextInfo = (index == children.Count) ? null : children[index]; // Adjust the new next proc to be me. if (newNextInfo != null) { using (Item newNextItem = newNextInfo.Get()) { newNextItem.MyPrevious = this; newNextItem.Save().Dispose(); } } // adjust the previous node, i.e. may either be at same level or, if first in list, adjust the parent... // if 'newPreviousItem' isn't null, then adding to the middle of the list. if (newPreviousInfo != null) { using (Item newPreviousItem = newPreviousInfo.Get()) { MyPrevious = newPreviousItem; Save(); } } // newPreviousInfo == null if moving into first child, and wasfirstchild == true if moving out of first child. // This will require adjusting the DocVersion to point to the correct first child if a procedure is moved. if (newPreviousInfo == null || wasfirstchild) { if (parentInfo != null) // Moving Item within procedure, i.e. moving a section or step { using (Item parentItem = parentInfo.Get()) { // moving first child out... reset parent to point to the original next item if (wasfirstchild) parentItem.MyContent.ContentParts[(int)partType].MyItem = origNextItem; else parentItem.MyContent.ContentParts[(int)partType].MyItem = this; parentItem.Save().Dispose(); } } else if (parentInfoDV != null) // Moving Item (Procedure) within DocVersion { using (DocVersion parentItemDV = parentInfoDV.Get()) { ItemInfo firstinfo = parentInfoDV.FirstChild(); parentItemDV.MyItem = wasfirstchild?parentInfoDV.Procedures[1].Get():this; parentItemDV.Save().Dispose(); if (!wasfirstchild && firstinfo != null) { using (Item firstchild = firstinfo.Get()) { firstchild.MyPrevious = this; firstchild.Save().Dispose(); } } } } if (!wasfirstchild) { this.MyPrevious = null; this.Save(); } if (origNextItem != null) origNextItem.Dispose(); if (parentInfo != null) parentInfo.MyContent.RefreshContentParts(); if (parentInfoDV != null) parentInfoDV.ResetProcedures(); } } protected static int MakeNewItem(IVEDrillDownReadOnly parentInfoDD, ItemInfo previousInfo, string number, string title, int type, E_FromType partType) { int newitemid = 0; if (parentInfoDD == null) parentInfoDD = previousInfo.ActiveParent; ItemInfo parentInfo = parentInfoDD as ItemInfo; DocVersionInfo parentInfoDV = parentInfoDD as DocVersionInfo; using (Content cont = Content.New(number, title, type, null, null)) { using (Item fromitem = previousInfo == null ? null : previousInfo.Get()) { ItemInfo nextInfo = null; // Check to see if the item is being inserted in the middle of some items. if (previousInfo != null && previousInfo.NextItems != null && previousInfo.NextItems.Count > 0) nextInfo = previousInfo.NextItems[0]; using (Item itm = Item.MakeItem(fromitem, cont)) { newitemid = itm.ItemID; if (nextInfo != null) { using (Item nextItem = nextInfo.Get()) { nextItem.MyPrevious = itm;// Aim the next item back at the new item. nextItem.Save().Dispose(); } } if (fromitem == null) { if (parentInfo != null) // Adding Item to Procedure, Section or Step { using (Item parentItem = parentInfo.Get()) { ItemInfo firstinfo = parentInfo.FirstChild(partType); if (firstinfo != null) { using (Item firstchild = firstinfo.Get()) { parentItem.MyContent.ContentParts[(int)partType].MyItem = itm;// First update the parent to point to the new first child parentItem.Save().Dispose(); firstchild.MyPrevious = itm;// Aim the old first child to point to the new first child. firstchild.Save().Dispose(); } } else { parentItem.MyContent.ContentParts.Add((int)partType, itm);// update the parent to point to the new first child parentItem.Save().Dispose(); } } } if (parentInfoDV != null) // Adding Item (Procedure) to DocVersion { using (DocVersion parentItemDV = parentInfoDV.Get()) { ItemInfo firstinfo = parentInfoDV.FirstChild(); parentItemDV.MyItem = itm;// First update the parent to point to the new first child parentItemDV.Save().Dispose(); if (firstinfo != null) { using (Item firstchild = firstinfo.Get()) { firstchild.MyPrevious = itm;// Aim the old first child to point to the new first child. firstchild.Save().Dispose(); } } } } } } } } if (parentInfo != null) parentInfo.MyContent.RefreshContentParts(); if (parentInfoDV != null) parentInfoDV.ResetProcedures(); return newitemid; } } #endregion #region ItemInfo public partial class ItemInfo:IVEDrillDownReadOnly { protected void ExtensionRefreshFields(Item tmp) { _ActiveParent = null; } #region LoadAtOnce2 public static ItemInfo GetItemAndChildren2(int? itemID) { try { ItemInfo tmp = DataPortal.Fetch(new ItemAndChildrenCriteria2(itemID)); AddToCache(tmp); if (tmp.ErrorMessage == "No Record Found") tmp = null; return tmp; } catch (Exception ex) { throw new DbCslaException("Error on ItemInfoList.GetItemAndChildren2", ex); } } // Criteria to get Item and children [Serializable()] private class ItemAndChildrenCriteria2 { public ItemAndChildrenCriteria2(int? itemID) { _ItemID = itemID; } private int? _ItemID; public int? ItemID { get { return _ItemID; } set { _ItemID = value; } } } // Data Portal to Get Item and Children private void DataPortal_Fetch(ItemAndChildrenCriteria2 criteria) { try { using (SqlConnection cn = Database.VEPROMS_SqlConnection) { ApplicationContext.LocalContext["cn"] = cn; using (SqlCommand cm = cn.CreateCommand()) { cm.CommandType = CommandType.StoredProcedure; cm.CommandText = "getItem"; cm.Parameters.AddWithValue("@ItemID", criteria.ItemID); using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) { if (!dr.Read()) { _ErrorMessage = "No Record Found"; return; } ReadData(dr); } } SpinThroughChildren(); // removing of item only needed for local data portal if (ApplicationContext.ExecutionLocation == ApplicationContext.ExecutionLocations.Client) ApplicationContext.LocalContext.Remove("cn"); } } catch (Exception ex) { Database.LogException("ItemInfoList.DataPortal_Fetch", ex); throw new DbCslaException("ItemInfoList.DataPortal_Fetch", ex); } RemoveFromCache(this); } private void SpinThroughChildren() { if(MyContent.ContentPartCount > 0) foreach(PartInfo partInfo in MyContent.ContentParts) foreach (ItemInfo itemInfo in partInfo.MyItems) itemInfo.SpinThroughChildren(); } #endregion #region LoadAtOnce // Method to Get Item and children public static ItemInfo GetItemAndChildren(int? itemID,int? parentID) { try { ItemInfo tmp = DataPortal.Fetch(new ItemAndChildrenCriteria(itemID,parentID)); AddToCache(tmp); if (tmp.ErrorMessage == "No Record Found") tmp = null; return tmp; } catch (Exception ex) { throw new DbCslaException("Error on ItemInfoList.GetChildren", ex); } } // Criteria to get Item and children [Serializable()] private class ItemAndChildrenCriteria { public ItemAndChildrenCriteria(int? itemID, int? parentID) { _ItemID = itemID; _ParentID = parentID; } private int? _ItemID; public int? ItemID { get { return _ItemID; } set { _ItemID = value; } } private int? _ParentID; public int? ParentID { get { return _ParentID; } set { _ParentID = value; } } } // Data Portal to Get Item and Children private void DataPortal_Fetch(ItemAndChildrenCriteria criteria) { //ItemInfo tmp = null; Dictionary lookup = new Dictionary(); ; try { using (SqlConnection cn = Database.VEPROMS_SqlConnection) { using (SqlCommand cm = cn.CreateCommand()) { cm.CommandType = CommandType.StoredProcedure; cm.CommandText = "vesp_ListItemAndChildren"; cm.Parameters.AddWithValue("@ItemID", criteria.ItemID); cm.Parameters.AddWithValue("@ParentID", criteria.ParentID); using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) { while (dr.Read()) { if (dr.GetInt32("Level")==0) { //tmp = itemInfo; ReadData(dr); AddContent(dr); lookup[this.ItemID] = this; } else { ItemInfo itemInfo = null; int itemType = dr.GetInt32("Type") / 10000; switch (itemType) { case 0: itemInfo = new ProcedureInfo(dr); break; case 1: itemInfo = new SectionInfo(dr); break; case 2: itemInfo = new StepInfo(dr); break; } // Load Children itemInfo.AddContent(dr); ItemInfo parent = lookup[dr.GetInt32("ParentID")]; itemInfo._ActiveParent = parent; itemInfo._ActiveSection = (itemInfo.IsSection ? itemInfo : parent._ActiveSection); parent.AddPart(dr, itemInfo); lookup.Add(itemInfo.ItemID, itemInfo); } } //Console.WriteLine("I'm here {0}",this.MyContent.ContentPartCount); } } } } catch (Exception ex) { Database.LogException("ItemInfoList.DataPortal_Fetch", ex); throw new DbCslaException("ItemInfoList.DataPortal_Fetch", ex); } } private void AddPart(SafeDataReader dr, ItemInfo itemInfo) { // Either a new PartInfo or an existing PartInfo if (dr.IsDBNull(dr.GetOrdinal("PreviousID"))) { //PartInfo prt = new PartInfo(dr, itemInfo); _MyContent.AddPart(dr, itemInfo); } else { foreach (PartInfo pi in MyContent.ContentParts) { if (dr.GetInt32("FromType") == (int)pi.PartType) { if (pi._MyItems == null) pi._MyItems = new ItemInfoList(itemInfo); else pi.MyItems.AddItem(itemInfo); } } } } #endregion public bool IsCautionStructure { get { return ((ItemPartCount > 0) && (ItemParts[0].PartType == E_FromType.Caution)); } } public bool IsNoteStructure { get { return ((ItemPartCount > 0) && (ItemParts[0].PartType == E_FromType.Note)); } } public bool IsCautionStructureFirstSib { get { return ((FirstSibling.ItemPartCount > 0) && (FirstSibling.ItemParts[0].PartType == E_FromType.Caution)); } } public bool IsNoteStructureFirstSib { get { return ((FirstSibling.ItemPartCount > 0) && (FirstSibling.ItemParts[0].PartType == E_FromType.Note)); } } public bool IsType(string type) { int stepType = ((int)MyContent.Type) % 10000; StepDataList sdlist = ActiveFormat.PlantFormat.FormatData.StepDataList; StepData sd = sdlist[stepType]; // TODO: RHM20071115 while (sd.Index != 0) // TODO: RHM20071115 { // TODO: RHM20071115 if (sd.Type == type) return true; // TODO: RHM20071115 sd = sdlist[sd.ParentType]; // TODO: RHM20071115 } return false; } public bool IsCaution { get { return IsType("CAUTION"); } } public bool IsNote { get { return IsType("NOTE"); } } public bool IsTable { get { return IsType("TABLE"); } } public bool IsFigure { get { return IsType("FIGURE"); } } public bool IsOr { get { return IsType("OR"); } } public bool IsAnd { get { return IsType("AND"); } } public bool IsEquipmentList { get { return IsType("EQUIPMENTLIST"); } } public bool IsTitle { get { return IsType("TITLE"); } } public bool IsAccPages { get { return IsType("ACCPAGES"); } } public bool IsParagraph { get { return IsType("PARAGRAPH"); } } public bool IsDefault { get { return IsType("DEFAULT"); } } public bool IsContAcSequential { get { return IsType("CONTACSEQUENTIAL"); } } public bool IsHigh { get { // check to see if ActiveParent is a section, if so it is a high level step if (MyContent.Type / 10000 != 2) return false; ItemInfo parent = ActiveParent as ItemInfo; if (parent == null) return false; if ((parent.MyContent.Type / 10000) == 1) return true; return false; } } public bool IsSequential { get { if (((MyContent.Type / 10000) == 2) && ((((int)MyContent.Type) % 10000) == 1)) return true; return false; } } public bool IsRNO { get { return ((ItemPartCount > 0) && (ItemParts[0].PartType == E_FromType.RNO)); } } public bool IsInRNO { get { if (IsHigh) return false; if (IsRNO) return true; ItemInfo parent = ActiveParent as ItemInfo; if (parent == null) return false; return parent.IsInRNO; } } public int RNOLevel { get { return ((IsProcedure || IsSection || IsHigh)?0:(IsRNO?1:0)+((ItemInfo)ActiveParent).RNOLevel); } } public int Columns { get { // check config value on my section, if null/default use Pmode of active format SectionInfo si = SectionInfo.Get(ActiveSection.ItemID); //ActiveSection as SectionInfo; if (si != null) { if (si.SectionConfig.Section_ColumnMode != SectionConfig.SectionColumnMode.Default) return (int)si.SectionConfig.Section_ColumnMode; } return ActiveFormat.PlantFormat.FormatData.SectData.StepSectionData.StepSectionLayoutData.PMode ?? 2; } } /// /// FormatStepType - Maps to step type in format file. All types map directly from step type in content /// to step type in format except rno. The '39' is the RNO index in the format file. Note that we /// could loop through the format's stepdata to find rnotype if we want this to be more flexible? /// public int FormatStepType { get { if (IsRNO) return 40; else return (((int)MyContent.Type) % 10000); } } /// /// /// public StepData FormatStepData { get { if (IsRNO) return ActiveFormat.PlantFormat.FormatData.StepDataList[40]; int typ = (int)MyContent.Type - 20000; foreach (StepData sd in ActiveFormat.PlantFormat.FormatData.StepDataList) { if (sd.Index == typ) return sd; } return null; } } public ItemInfo FirstSibling { get { ItemInfo temp = this; while (temp.MyPrevious != null) temp = temp.MyPrevious; return temp; } } public ItemInfo LastSibling { get { ItemInfo temp = this; while (temp.NextItems != null) temp = temp.NextItems[0]; return temp; } } public ItemInfo LastChild(E_FromType partType) { ItemInfoList myitems = Lookup((int)partType); if (myitems !=null) return myitems[myitems.Count-1]; return null; } public ItemInfo FirstChild(E_FromType partType) { ItemInfoList myitems = Lookup((int)partType); if (myitems != null) return myitems[0]; return null; } public bool IsSubStep { get { ItemInfo temp = FirstSibling; return ((temp.ItemPartCount > 0) && (temp.ItemParts[0].PartType == E_FromType.Step)); } } public bool IsInSubStep { get { if (IsHigh) return false; if (IsSubStep) return true; ItemInfo parent = ActiveParent as ItemInfo; if (parent == null) return false; return parent.IsInSubStep; } } public bool IsInFirstLevelSubStep { get { ItemInfo temp = FirstSibling; if(temp.ActiveParent.GetType() == typeof(VEPROMS.CSLA.Library.DocVersionInfo))return false; while (((ItemInfo)temp.ActiveParent).IsHigh == false) temp = ((ItemInfo)temp.ActiveParent).FirstSibling; return temp.IsSubStep; } } public bool IsStepSection { get { if (MyContent.Type == 10000) return true; return false; } } public bool IsSection { get { if ((MyContent.Type / 10000) == 1) return true; return false; } } public bool IsDefaultSection { get { // check to see if ActiveParent is a section, if so it is a high level step if (MyContent.Type / 10000 != 1) return false; // get procedure section and then ItemInfo parent = (ItemInfo)ActiveParent; if (!parent.IsProcedure) return false; ProcedureConfig pc = (ProcedureConfig)parent.MyConfig; int sectstartid = -1; string ss = pc == null ? null : pc.SectionStart; if (ss != null) sectstartid = System.Convert.ToInt32(ss); else return false; if (ItemID == sectstartid) return true; return false; } } public bool IsProcedure { get { if ((MyContent.Type / 10000) == 0) return true; return false; } } public bool IsStep { get { if ((MyContent.Type / 10000) == 2) return true; return false; } } private E_FromType ItemType { get { if (MyContent.Type == 0) return E_FromType.Procedure; if (MyContent.Type < 20000) return E_FromType.Section; return E_FromType.Step; } } public Item GetByType() { Item tmp = null; switch (ItemType) { case E_FromType.Procedure: tmp = Procedure.Get(_ItemID); break; //case E_FromType.Section: // itemInfo = new Section(dr); // break; //default: // itemInfo = new Step(dr); // break; } return tmp; } private int? _Ordinal; public int Ordinal { get { if (_Ordinal == null) { if (MyPrevious != null) _Ordinal = MyPrevious.Ordinal + 1; else _Ordinal = 1; } return (int) _Ordinal; } } public string CslaType { get { return this.GetType().FullName; } } public override string ToString() { //Item editable = Item.GetExistingByPrimaryKey(_ItemID); //return string.Format("{0}{1} {2}", (editable == null ? "" : (editable.IsDirty ? "* " : "")), // (MyContent.Type >= 20000 ? Ordinal.ToString() + "." : MyContent.Number), MyContent.Text); ContentInfo cont = MyContent; string number = cont.Number; if (cont.Type >= 20000) number = Ordinal.ToString() + "."; return string.Format("{0} {1}", number, cont.Text).Trim(); //return string.Format("{0} {1}", cont.Number, cont.Text); //return "Now is the time for all good men to come to the aid of their country!"; } //public string ToString(string str,System.IFormatProvider ifp) //{ // return ToString(); //} public string nz(string str, string def) { return (str == null ? def : str); } internal string _SearchDVPath; public string SearchDVPath { get { return _SearchDVPath; } } internal string _SearchPath; public string SearchPath { get { return _SearchPath; } } public string ShortSearchPath { get { return Regex.Replace(_SearchPath, "\x11.*?\x07", "\x07"); } } internal int _SearchAnnotationID; public int SearchAnnotationID { get { return _SearchAnnotationID; } } internal string _SearchAnnotationText; public string SearchAnnotationText { get { return _SearchAnnotationText; } } internal string _SearchAnnotationType; public string SearchAnnotationType { get { return _SearchAnnotationType; } } public string DisplayText { get { return ConvertToDisplayText(MyContent.Text); } } public static string ConvertToDisplayText(string txt) { string retval = txt; retval = StripRtfFormatting(retval); retval = StripLinks(retval); retval = ReplaceSpecialCharacters(retval); return retval; } private static string StripRtfFormatting(string rtf) { string retval = rtf; retval = Regex.Replace(retval, @"\\b0 ?", ""); retval = Regex.Replace(retval, @"\\b ?", ""); retval = Regex.Replace(retval, @"\\ul0 ?", ""); retval = Regex.Replace(retval, @"\\ul ?", ""); retval = Regex.Replace(retval, @"\\i0 ?", ""); retval = Regex.Replace(retval, @"\\i ?", ""); retval = Regex.Replace(retval, @"\\super ?", ""); retval = Regex.Replace(retval, @"\\sub ?", ""); retval = Regex.Replace(retval, @"\\nosupersub ?", ""); return retval; } private static string StripLinks(string rtf) { string retval = rtf; retval = Regex.Replace(retval, @"\\v.*?\\v0", ""); retval = retval.Replace("\u252C", "");// Unicode 9516 Transition retval = retval.Replace("\u2566", "");// Unicode 9574 Transition retval = retval.Replace("\u0015", "");// Unicode 21 RO return retval; } private static string ReplaceSpecialCharacter(Match m) { StringBuilder sb = new StringBuilder(); int i = int.Parse(m.ToString().Substring(2,m.ToString().Length-3)); sb.Append((char)i); return sb.ToString(); } private static string ReplaceSpecialHexCharacter(Match m) { StringBuilder sb = new StringBuilder(); int i = int.Parse(m.ToString().Substring(2), System.Globalization.NumberStyles.HexNumber); sb.Append((char)i); return sb.ToString(); } private static string ReplaceSpecialCharacters(string rtf) { string retval = rtf; retval = retval.Replace("`", "\u00BA");// Degree retval = Regex.Replace(retval, @"\\u[0-9]+[?]", new MatchEvaluator(ReplaceSpecialCharacter)); retval = Regex.Replace(retval, @"\\'[0-9A-Fa-f][0-9A-Fa-f]", new MatchEvaluator(ReplaceSpecialHexCharacter)); return retval; } public string Path { get { string number = (MyContent.Type >= 20000 ? Ordinal.ToString() + "." : (nz(MyContent.Number,"")==""? MyContent.Text: MyContent.Number)); ItemInfo parent = this; while (parent.MyPrevious != null) parent = parent.MyPrevious; if (parent.ItemPartCount == 0) return number + ", " + MyContent.Text; else { PartInfo partInfo = parent.ItemParts[0]; return partInfo.MyContent.ContentItems.Items[0].Path + " " + ((E_FromType)partInfo.FromType).ToString() + " " + number; } } } public ContentInfo ParentContent { get { string number = (MyContent.Type >= 20000 ? Ordinal.ToString() + "." : (nz(MyContent.Number, "") == "" ? MyContent.Text : MyContent.Number)); ItemInfo parent = this; while (parent.MyPrevious != null) parent = parent.MyPrevious; if (parent.ItemPartCount == 0) return null; else { return parent.ItemParts[0].MyContent; } } } public ItemInfo MyParent { get { //if (ItemDocVersionCount > 0) return ItemDocVersions[0]; Need to create one interface to support Folders, DocVersions and Items ContentInfo parentContent = ParentContent; if (parentContent == null || parentContent.ContentItemCount == 0) return null; return parentContent.ContentItems[0]; } } private ItemInfoList Lookup(int fromType, ref ItemInfoList itemInfoList) { if (itemInfoList == null) itemInfoList = Lookup(fromType); return itemInfoList; } internal ItemInfoList Lookup(int fromType) { ItemInfoList itemInfoList = null; if (MyContent.ContentPartCount != 0) foreach (PartInfo partInfo in MyContent.ContentParts) if (partInfo.FromType == fromType) { itemInfoList = partInfo._MyItems = ItemInfoList.GetList(partInfo.ItemID, partInfo.FromType); return itemInfoList; } return null; } public static void ResetParts(int itemID) { string key = itemID.ToString(); if (_CacheByPrimaryKey.ContainsKey(key)) foreach (ItemInfo itm in _CacheByPrimaryKey[key]) itm.ResetParts(); } public void ResetParts() { _Procedures = null; _Sections = null; _Cautions = null; _Notes = null; _RNOs = null; _Steps = null; _Tables = null; } private ItemInfoList _Procedures; public ItemInfoList Procedures { get { return Lookup(1,ref _Procedures); } } private ItemInfoList _Sections; public ItemInfoList Sections { get { return Lookup(2,ref _Sections); } } private ItemInfoList _Cautions; public ItemInfoList Cautions { get { return Lookup(3,ref _Cautions); } } private ItemInfoList _Notes; public ItemInfoList Notes { get { return Lookup(4,ref _Notes); } } private ItemInfoList _RNOs; public ItemInfoList RNOs { get { return Lookup(5,ref _RNOs); } } private ItemInfoList _Steps; public ItemInfoList Steps { get { return Lookup(6,ref _Steps); } } private ItemInfoList _Tables; public ItemInfoList Tables { get { return Lookup(7,ref _Tables); } } //public XmlDocument ToXml() //{ // XmlDocument retval = new XmlDocument(); // retval.LoadXml(""); // return ToXml(retval.DocumentElement); //} //public void AddList(XmlNode xn,string name, ItemInfoList itemInfoList) //{ // if (itemInfoList != null) // { // XmlNode nd = xn.OwnerDocument.CreateElement(name); // xn.AppendChild(nd); // itemInfoList.ToXml(xn); // } //} //public XmlDocument ToXml(XmlNode xn) //{ // XmlNode nd = MyContent.ToXml(xn); // // Now add the children // AddList(nd, "Procedures", Procedures); // AddList(nd, "Sections", Sections); // AddList(nd, "Cautions", Cautions); // AddList(nd, "Notes", Notes); // AddList(nd, "RNOs", RNOs); // AddList(nd, "Steps", SubItems); // AddList(nd, "Tables", Tables); // return xn.OwnerDocument; //} public string TabToolTip { get { if (MyContent.MyEntry == null) return MyContent.Number + " - " + MyContent.Text; string toolTip = MyProcedure.TabToolTip + "\r\n"; if (MyContent.Number != "") toolTip += MyContent.Number + " - " + MyContent.Text; else toolTip += MyContent.Text; DocumentInfo myDocument = MyContent.MyEntry.MyDocument; if (myDocument.LibTitle != "") { toolTip += string.Format("\r\n(Library Document - {0})", myDocument.LibTitle); toolTip += myDocument.LibraryDocumentUsage; } return toolTip; } } public string TabTitle { get { if (MyContent.MyEntry == null) return MyContent.Number; if (MyContent.Number != "") return MyContent.Number; if (MyContent.Text.Length <= 10) return MyContent.Text; return MyContent.Text.Split(" ,.;:-_".ToCharArray())[0] + "..."; } } #region IVEReadOnlyItem PartInfoList _PartInfoList; public System.Collections.IList GetChildren() { _PartInfoList = this.MyContent.ContentParts; if (_PartInfoList.Count == 1 && ( _PartInfoList[0].ToString() == "Sections" || _PartInfoList[0].ToString() == "Steps")) return _PartInfoList[0].GetChildren(); return _PartInfoList; } public System.Collections.IList GetChildren(bool allParts) { _PartInfoList = this.MyContent.ContentParts; if (allParts) { if (_PartInfoList.Count == 1 && (_PartInfoList[0].ToString() == "Sections" || _PartInfoList[0].ToString() == "Steps")) return _PartInfoList[0].GetChildren(); return _PartInfoList; } else // Steps and Sections only { for(int i = 0;i<_PartInfoList.Count;i++) if(_PartInfoList[i].ToString() == "Sections" || _PartInfoList[i].ToString() == "Steps") return _PartInfoList[i].GetChildren(); return null; } } //public bool ChildrenAreLoaded //{ // get { return _PartInfoList == null; } //} public bool HasChildren { get { return this.MyContent.ContentPartCount > 0; } } public bool HasWordContent { get { return this.MyContent.MyEntry != null; } } public bool HasStepContent { get { if (MyContent.ContentPartCount == 0) return false; if (MyContent.ContentPartCount == 1 && MyContent.ContentParts[0].PartType == E_FromType.Section) return false; return true; } } public ItemInfo MyProcedure { get { // Walk up active parents until the parent is not an item ItemInfo tmp = this; while (tmp.ActiveParent != null && tmp.ActiveParent.GetType() != typeof(DocVersionInfo)) tmp = (ItemInfo)tmp.ActiveParent; return tmp; } } private IVEDrillDownReadOnly _ActiveParent = null; public IVEDrillDownReadOnly MyActiveParent { get { return _ActiveParent; } } public IVEDrillDownReadOnly ActiveParent { get { //if (_ActiveParent == this)_ActiveParent = null; if (_ActiveParent == null) { if (MyPrevious != null) _ActiveParent = _MyPrevious.ActiveParent; else { if (this.ItemDocVersions != null && this.ItemDocVersions.Count > 0) _ActiveParent = this.ItemDocVersions[0]; else { ContentInfo parentContent = ParentContent; if (parentContent == null || parentContent.ContentItemCount == 0) _ActiveParent = this; else _ActiveParent = parentContent.ContentItems[0]; } } } return _ActiveParent==this ? null : _ActiveParent; } internal set //set { _ActiveParent = value; } } private ItemInfo _ActiveSection = null; public ItemInfo MyActiveSection { get { return _ActiveSection; } } public ItemInfo ActiveSection { get { if (_ActiveSection == null) { if (IsSection) _ActiveSection = this; else { ItemInfo parent = ActiveParent as ItemInfo; if (parent != null) _ActiveSection = parent.ActiveSection; else _ActiveSection = this; } } return _ActiveSection.IsSection ? _ActiveSection : null; } set { _ActiveSection = value; } } private FormatInfo _ActiveFormat = null; public FormatInfo ActiveFormat { get { if (_ActiveFormat == null) _ActiveFormat = (LocalFormat != null ? LocalFormat : ActiveParent.ActiveFormat); return _ActiveFormat; } //get { return LocalFormat != null ? LocalFormat : ActiveParent.ActiveFormat; } } public FormatInfo LocalFormat { get { return MyContent.MyFormat; } } private ConfigDynamicTypeDescriptor _MyConfig=null; public ConfigDynamicTypeDescriptor MyConfig { get { if (_MyConfig == null) { switch (MyContent.Type / 10000) { case 0: _MyConfig = new ProcedureConfig(MyContent.Config); break; case 1: _MyConfig = new SectionConfig(MyContent.Config); break; case 2: _MyConfig = new StepConfig(MyContent.Config); break; } } return _MyConfig; } set { if (_MyConfig == null) return; // MyContent.Config = value; } } //public bool HasStandardSteps() //{ return MyContent.ContentItemCount > 1; } public Color ForeColor { get { return (HasBrokenRules != null ? Color.Red : (MyContent.ContentItemCount > 1 ? Color.Blue : Color.Black)); } } public Color BackColor { get { return (ItemAnnotationCount > 0 ? Color.Yellow : Color.White); } } #endregion internal ItemInfo(SafeDataReader dr, bool forItem) { if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] ItemInfo.Constructor", GetHashCode()); try { ReadData(dr); AddContent(dr); } catch (Exception ex) { if (_MyLog.IsErrorEnabled) _MyLog.Error("ItemInfo.Constructor", ex); throw new DbCslaException("ItemInfo.Constructor", ex); } } internal void AddContent(SafeDataReader dr) { _MyContent = new ContentInfo(dr, true); } } #endregion ItemInfo #region ItemInfoList public partial class ItemInfoList { //public void ToXml(XmlNode xn) //{ // foreach (ItemInfo itemInfo in this) // { // itemInfo.ToXml(xn); // } //} internal ItemInfoList(ItemInfo itemInfo) { AddItem(itemInfo); } public static ItemInfoList GetList(int? itemID,int type) { try { ItemInfoList tmp = DataPortal.Fetch(new ItemListCriteria(itemID,type)); ItemInfo.AddList(tmp); tmp.AddEvents(); #if (!ItemWithContent) // If ItemWithContent is set, the content is returned with the ItemInfoList ContentInfoList.GetList(itemID); // Performance - Load All Content #endif return tmp; } catch (Exception ex) { throw new DbCslaException("Error on ItemInfoList.GetChildren", ex); } } [Serializable()] private class ItemListCriteria { public ItemListCriteria(int? itemID,int type) { _ItemID = itemID; _Type = type; } private int? _ItemID; public int? ItemID { get { return _ItemID; } set { _ItemID = value; } } private int _Type; public int Type { get { return _Type; } set { _Type = value; } } } private void DataPortal_Fetch(ItemListCriteria criteria) { this.RaiseListChangedEvents = false; try { using (SqlConnection cn = Database.VEPROMS_SqlConnection) { using (SqlCommand cm = cn.CreateCommand()) { cm.CommandType = CommandType.StoredProcedure; #if ItemWithContent cm.CommandText = "vesp_ListItemsAndContent"; #else cm.CommandText = "vesp_ListItems"; #endif cm.Parameters.AddWithValue("@ItemID", criteria.ItemID); using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) { while (dr.Read()) { ItemInfo itemInfo = null; switch ((E_FromType)criteria.Type) { case E_FromType.Procedure: itemInfo = new ProcedureInfo(dr); break; case E_FromType.Section: itemInfo = new SectionInfo(dr); break; default: itemInfo = new StepInfo(dr); break; } IsReadOnly = false; this.Add(itemInfo); IsReadOnly = true; } } } } } catch (Exception ex) { Database.LogException("ItemInfoList.DataPortal_Fetch", ex); throw new DbCslaException("ItemInfoList.DataPortal_Fetch", ex); } this.RaiseListChangedEvents = true; } internal void AddItem(ItemInfo itemInfo) { IsReadOnly = false; this.Add(itemInfo); IsReadOnly = true; } #region Text Search public static ItemInfoList GetListFromTextSearch(string docVersionList, string stepTypeList, string searchString, bool caseSensitive, ItemSearchIncludeLinks includeLinks, bool includeRtfFormatting, bool includeSpecialCharacters) { try { ItemInfoList tmp = DataPortal.Fetch(new ItemListSearchCriteria(docVersionList, stepTypeList, searchString, caseSensitive, includeLinks, includeRtfFormatting, includeSpecialCharacters)); ItemInfo.AddList(tmp); tmp.AddEvents(); return tmp; } catch (Exception ex) { throw new DbCslaException("Error on ItemInfoList.GetChildren", ex); } } [Serializable()] private class ItemListSearchCriteria { private string _DocVersionList; public string DocVersionList { get { return _DocVersionList; } set { _DocVersionList = value; } } private string _StepTypeList; public string StepTypeList { get { return _StepTypeList; } set { _StepTypeList = value; } } private string _SearchString; public string SearchString { get { return _SearchString; } set { _SearchString = value; } } private bool _CaseSensitive; public bool CaseSensitive { get { return _CaseSensitive; } set { _CaseSensitive = value; } } private ItemSearchIncludeLinks _IncludeLinks; public ItemSearchIncludeLinks IncludeLinks { get { return _IncludeLinks; } set { _IncludeLinks = value; } } private bool _IncludeRtfFormatting; public bool IncludeRtfFormatting { get { return _IncludeRtfFormatting; } set { _IncludeRtfFormatting = value; } } private bool _IncludeSpecialCharacters; public bool IncludeSpecialCharacters { get { return _IncludeSpecialCharacters; } set { _IncludeSpecialCharacters = value; } } public ItemListSearchCriteria(string docVersionList, string stepTypeList, string searchString, bool caseSensitive, ItemSearchIncludeLinks includeLinks, bool includeRtfFormatting, bool includeSpecialCharacters) { _DocVersionList = docVersionList; _StepTypeList = stepTypeList; _SearchString = searchString; _CaseSensitive = caseSensitive; _IncludeLinks = includeLinks; _IncludeRtfFormatting = includeRtfFormatting; _IncludeSpecialCharacters = includeSpecialCharacters; } } private void DataPortal_Fetch(ItemListSearchCriteria criteria) { this.RaiseListChangedEvents = false; try { using (SqlConnection cn = Database.VEPROMS_SqlConnection) { using (SqlCommand cm = cn.CreateCommand()) { cm.CommandType = CommandType.StoredProcedure; cm.CommandText = "vesp_SearchItemAndChildren"; cm.Parameters.AddWithValue("@DocVersionList", criteria.DocVersionList); cm.Parameters.AddWithValue("@StepTypeList", criteria.StepTypeList); cm.Parameters.AddWithValue("@SearchString", criteria.SearchString); cm.Parameters.AddWithValue("@CaseSensitive", criteria.CaseSensitive ? 1 : 0); cm.Parameters.AddWithValue("@IncludeLinks", (int) criteria.IncludeLinks); cm.Parameters.AddWithValue("@IncludeRtfFormatting", criteria.IncludeRtfFormatting ? 1 : 0); cm.Parameters.AddWithValue("@IncludeSpecialCharacters", criteria.IncludeSpecialCharacters ? 1 : 0); using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) { while (dr.Read()) { ItemInfo itemInfo = null; int itemType = dr.GetInt32("Type") / 10000; switch (itemType) { case 0: itemInfo = new ProcedureInfo(dr); break; case 1: itemInfo = new SectionInfo(dr); break; default: itemInfo = new StepInfo(dr); break; } itemInfo.AddContent(dr); itemInfo._SearchDVPath = dr.GetString("DVPath"); itemInfo._SearchPath = dr.GetString("Path"); IsReadOnly = false; this.Add(itemInfo); IsReadOnly = true; } } } } } catch (Exception ex) { Database.LogException("ItemInfoList.DataPortal_Fetch", ex); throw new DbCslaException("ItemInfoList.DataPortal_Fetch", ex); } this.RaiseListChangedEvents = true; } #endregion #region RO Search public static ItemInfoList GetListFromROSearch(string docVersionList, string stepTypeList, string roSearchString) { try { ItemInfoList tmp = DataPortal.Fetch(new ItemListROSearchCriteria(docVersionList, stepTypeList, roSearchString)); ItemInfo.AddList(tmp); tmp.AddEvents(); return tmp; } catch (Exception ex) { throw new DbCslaException("Error on ItemInfoList.GetChildren", ex); } } [Serializable()] private class ItemListROSearchCriteria { private string _DocVersionList; public string DocVersionList { get { return _DocVersionList; } set { _DocVersionList = value; } } private string _StepTypeList; public string StepTypeList { get { return _StepTypeList; } set { _StepTypeList = value; } } private string _ROSearchString; public string ROSearchString { get { return _ROSearchString; } set { _ROSearchString = value; } } public ItemListROSearchCriteria(string docVersionList, string stepTypeList, string roSearchString) { _DocVersionList = docVersionList; _StepTypeList = stepTypeList; _ROSearchString = roSearchString; } } private void DataPortal_Fetch(ItemListROSearchCriteria criteria) { this.RaiseListChangedEvents = false; try { using (SqlConnection cn = Database.VEPROMS_SqlConnection) { using (SqlCommand cm = cn.CreateCommand()) { cm.CommandType = CommandType.StoredProcedure; cm.CommandText = "vesp_SearchROItemAndChildren"; cm.Parameters.AddWithValue("@DocVersionList", criteria.DocVersionList); cm.Parameters.AddWithValue("@StepTypeList", criteria.StepTypeList); cm.Parameters.AddWithValue("@ROSearchString", criteria.ROSearchString); using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) { while (dr.Read()) { ItemInfo itemInfo = null; int itemType = dr.GetInt32("Type") / 10000; switch (itemType) { case 0: itemInfo = new ProcedureInfo(dr); break; case 1: itemInfo = new SectionInfo(dr); break; default: itemInfo = new StepInfo(dr); break; } itemInfo.AddContent(dr); itemInfo._SearchDVPath = dr.GetString("DVPath"); itemInfo._SearchPath = dr.GetString("Path"); IsReadOnly = false; this.Add(itemInfo); IsReadOnly = true; } } } } } catch (Exception ex) { Database.LogException("ItemInfoList.DataPortal_Fetch", ex); throw new DbCslaException("ItemInfoList.DataPortal_Fetch", ex); } this.RaiseListChangedEvents = true; } #endregion #region Annotation Search public static ItemInfoList GetListFromAnnotationSearch(string docVersionList, string stepTypeList, string annotationTypeList, string searchString, bool caseSensitive) { try { ItemInfoList tmp = DataPortal.Fetch(new ItemListAnnotationSearchCriteria(docVersionList, stepTypeList, annotationTypeList, searchString, caseSensitive)); ItemInfo.AddList(tmp); tmp.AddEvents(); return tmp; } catch (Exception ex) { throw new DbCslaException("Error on ItemInfoList.GetChildren", ex); } } [Serializable()] private class ItemListAnnotationSearchCriteria { private string _DocVersionList; public string DocVersionList { get { return _DocVersionList; } set { _DocVersionList = value; } } private string _StepTypeList; public string StepTypeList { get { return _StepTypeList; } set { _StepTypeList = value; } } private string _AnnotationTypeList; public string AnnotationTypeList { get { return _AnnotationTypeList; } set { _AnnotationTypeList = value; } } private string _SearchString; public string SearchString { get { return _SearchString; } set { _SearchString = value; } } private bool _CaseSensitive; public bool CaseSensitive { get { return _CaseSensitive; } set { _CaseSensitive = value; } } public ItemListAnnotationSearchCriteria(string docVersionList, string stepTypeList, string annotationTypeList, string searchString, bool caseSensitive) { _DocVersionList = docVersionList; _StepTypeList = stepTypeList; _AnnotationTypeList = annotationTypeList; _SearchString = searchString; _CaseSensitive = caseSensitive; } } private void DataPortal_Fetch(ItemListAnnotationSearchCriteria criteria) { this.RaiseListChangedEvents = false; try { using (SqlConnection cn = Database.VEPROMS_SqlConnection) { using (SqlCommand cm = cn.CreateCommand()) { cm.CommandType = CommandType.StoredProcedure; cm.CommandText = "vesp_SearchAnnotationItemAndChildren"; cm.Parameters.AddWithValue("@DocVersionList", criteria.DocVersionList); cm.Parameters.AddWithValue("@StepTypeList", criteria.StepTypeList); cm.Parameters.AddWithValue("@AnnotationTypeList", criteria.AnnotationTypeList); cm.Parameters.AddWithValue("@SearchString", criteria.SearchString); cm.Parameters.AddWithValue("@CaseSensitive", criteria.CaseSensitive ? 1 : 0); using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) { while (dr.Read()) { ItemInfo itemInfo = null; int itemType = dr.GetInt32("Type") / 10000; switch (itemType) { case 0: itemInfo = new ProcedureInfo(dr); break; case 1: itemInfo = new SectionInfo(dr); break; default: itemInfo = new StepInfo(dr); break; } itemInfo.AddContent(dr); itemInfo._SearchDVPath = dr.GetString("DVPath"); itemInfo._SearchPath = dr.GetString("Path"); itemInfo._SearchAnnotationID = dr.GetInt32("SearchAnnotationID"); itemInfo._SearchAnnotationText = dr.GetString("SearchText"); itemInfo._SearchAnnotationType = dr.GetString("AnnotationType"); IsReadOnly = false; this.Add(itemInfo); IsReadOnly = true; } } } } } catch (Exception ex) { Database.LogException("ItemInfoList.DataPortal_Fetch", ex); throw new DbCslaException("ItemInfoList.DataPortal_Fetch", ex); } this.RaiseListChangedEvents = true; } #endregion } #endregion #region ProcedureInfo [Serializable()] public partial class ProcedureInfo : ItemInfo, IVEDrillDownReadOnly { protected override void RefreshFields(Item tmp) { base.RefreshFields(tmp); ExtensionRefreshFields(tmp); } #if ItemWithContent public ProcedureInfo(SafeDataReader dr) : base(dr, true) { } #else public ProcedureInfo(SafeDataReader dr) : base(dr) { } #endif private ProcedureInfo() : base() { ;} public new static ProcedureInfo Get(int itemID) { //if (!CanGetObject()) // throw new System.Security.SecurityException("User not authorized to view a Item"); try { ProcedureInfo tmp = GetCachedByPrimaryKey(itemID) as ProcedureInfo; if (tmp == null) { tmp = DataPortal.Fetch(new PKCriteria(itemID)); AddToCache(tmp); } if (tmp.ErrorMessage == "No Record Found") tmp = null; return tmp; } catch (Exception ex) { throw new DbCslaException("Error on Item.Get", ex); } } public void MoveProcedure(IVEDrillDownReadOnly pInfo, int index) { using (Item ii = Item.Get(this.ItemID)) { ii.MoveItem(pInfo, index); } } public new Procedure Get() { return (Procedure) (_Editable = Procedure.Get(ItemID)); } #region ProcedureConfig [NonSerialized] private ProcedureConfig _ProcedureConfig; public ProcedureConfig ProcedureConfig { get { return (_ProcedureConfig != null ? _ProcedureConfig : _ProcedureConfig = new ProcedureConfig(this)); } } #endregion public new ConfigDynamicTypeDescriptor MyConfig { get { return ProcedureConfig ; } } } #endregion #region Procedure [Serializable()] public partial class Procedure : Item { public new static Procedure Get(int itemID) { if (!CanGetObject()) throw new System.Security.SecurityException("User not authorized to view a Item"); try { Item itm = GetCachedByPrimaryKey(itemID); Procedure tmp = itm as Procedure; //Procedure tmp = (Procedure)GetExistingByPrimaryKey(itemID); if (tmp == null) { if (itm != null) Console.WriteLine("type = {0}", itm.GetType().Name); tmp = DataPortal.Fetch(new PKCriteria(itemID)); AddToCache(tmp); } if (tmp.ErrorMessage == "No Record Found") tmp = null; return tmp; } catch (Exception ex) { throw new DbCslaException("Error on Item.Get", ex); } } public new Procedure Save() { return (Procedure)base.Save(); } public static Procedure MakeProcedure(IVEDrillDownReadOnly parentInfo, ItemInfo previousInfo, string procNumber, string procTitle, int procType) { int newitemid = MakeNewItem(parentInfo, previousInfo, procNumber, procTitle, procType, E_FromType.Procedure); return Procedure.Get(newitemid); } #region ProcedureConfig [NonSerialized] private ProcedureConfig _ProcedureConfig; public ProcedureConfig ProcedureConfig { get { if (_ProcedureConfig == null) { _ProcedureConfig = new ProcedureConfig(this); _ProcedureConfig.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(_ProcedureConfig_PropertyChanged); } return _ProcedureConfig; } } private void _ProcedureConfig_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { MyContent.Config = _ProcedureConfig.ToString(); } #endregion } #endregion #region SectionInfo [Serializable()] public partial class SectionInfo : ItemInfo, IVEDrillDownReadOnly { protected override void RefreshFields(Item tmp) { base.RefreshFields(tmp); ExtensionRefreshFields(tmp); } #if ItemWithContent public SectionInfo(SafeDataReader dr) : base(dr, true) { } #else public SectionInfo(SafeDataReader dr) : base(dr) { } #endif private SectionInfo() : base() { ;} public new static SectionInfo Get(int itemID) { //if (!CanGetObject()) // throw new System.Security.SecurityException("User not authorized to view a Item"); try { SectionInfo tmp = GetCachedByPrimaryKey(itemID) as SectionInfo; if (tmp == null) { tmp = DataPortal.Fetch(new PKCriteria(itemID)); AddToCache(tmp); } if (tmp.ErrorMessage == "No Record Found") tmp = null; return tmp; } catch (Exception ex) { throw new DbCslaException("Error on Item.Get", ex); } } public void MoveSection(IVEDrillDownReadOnly pInfo, int index) { using (Item ii = Item.Get(this.ItemID)) { ii.MoveItem(pInfo, index); } } public new Section Get() { return (Section)(_Editable = Section.Get(ItemID)); } #region SectionConfig [NonSerialized] private SectionConfig _SectionConfig; public SectionConfig SectionConfig { get { return (_SectionConfig != null ? _SectionConfig : _SectionConfig = new SectionConfig(this)); } } #endregion public new ConfigDynamicTypeDescriptor MyConfig { get { return SectionConfig; } } } #endregion #region Section [Serializable()] public partial class Section : Item { public new static Section Get(int itemID) { if (!CanGetObject()) throw new System.Security.SecurityException("User not authorized to view a Item"); try { Section tmp = GetCachedByPrimaryKey(itemID) as Section; if (tmp == null) { tmp = DataPortal.Fetch
(new PKCriteria(itemID)); AddToCache(tmp); } if (tmp.ErrorMessage == "No Record Found") tmp = null; return tmp; } catch (Exception ex) { throw new DbCslaException("Error on Item.Get", ex); } } public new Section Save() { return (Section)base.Save(); } public static Section MakeSection(IVEDrillDownReadOnly parentInfo, ItemInfo previousInfo, string sectNumber, string sectTitle, int sectType) { int newitemid = MakeNewItem(parentInfo, previousInfo, sectNumber, sectTitle, sectType, E_FromType.Section); return Section.Get(newitemid); } #region SectionConfig [NonSerialized] private SectionConfig _SectionConfig; public SectionConfig SectionConfig { get { if (_SectionConfig == null) { _SectionConfig = new SectionConfig(this); _SectionConfig.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(_SectionConfig_PropertyChanged); } return _SectionConfig; } } private void _SectionConfig_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { MyContent.Config = _SectionConfig.ToString(); } #endregion } #endregion #region StepInfo [Serializable()] public partial class StepInfo : ItemInfo { protected override void RefreshFields(Item tmp) { base.RefreshFields(tmp); ExtensionRefreshFields(tmp); } //public override string ToString() //{ // return "Step " + base.ToString(); //} #if ItemWithContent public StepInfo(SafeDataReader dr) : base(dr, true) { } #else public StepInfo(SafeDataReader dr) : base(dr) { } #endif private StepInfo() : base() { ;} public new static StepInfo Get(int itemID) { //if (!CanGetObject()) // throw new System.Security.SecurityException("User not authorized to view a Item"); try { StepInfo tmp = GetCachedByPrimaryKey(itemID) as StepInfo; if (tmp == null) { tmp = DataPortal.Fetch(new PKCriteria(itemID)); AddToCache(tmp); } if (tmp.ErrorMessage == "No Record Found") tmp = null; return tmp; } catch (Exception ex) { throw new DbCslaException("Error on Item.Get", ex); } } public void MoveStep(IVEDrillDownReadOnly pInfo, int index) { using (Item ii = Item.Get(this.ItemID)) { ii.MoveItem(pInfo, index); } } public new Step Get() { return (Step)(_Editable = Step.Get(ItemID)); } //public E_FromType FromType //{ get { return E_FromType.Step; } } } #endregion #region Step [Serializable()] public partial class Step : Item { public new static Step Get(int itemID) { if (!CanGetObject()) throw new System.Security.SecurityException("User not authorized to view a Item"); try { Step tmp = (Step)GetCachedByPrimaryKey(itemID); if (tmp == null) { tmp = DataPortal.Fetch(new PKCriteria(itemID)); AddToCache(tmp); } if (tmp.ErrorMessage == "No Record Found") tmp = null; return tmp; } catch (Exception ex) { throw new DbCslaException("Error on Item.Get", ex); } } // TODO :MakeCaution; // TODO :MakeNote; // TODO :MakeRNO; // TODO :MakeSection; // TODO :MakeSubStep; // TODO :MakeTable; public static Step MakeStep(IVEDrillDownReadOnly parentInfo, ItemInfo previousInfo, string stepNumber, string stepTitle, int stepType, E_FromType fromType) { int newitemid = MakeNewItem(parentInfo, previousInfo, stepNumber, stepTitle, stepType, fromType); return Step.Get(newitemid); } //#region StepConfig //[NonSerialized] //private StepConfig _StepConfig; //public StepConfig StepConfig //{ // get // { // if (_StepConfig == null) // { // _StepConfig = new StepConfig(this); // _StepConfig.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(_StepConfig_PropertyChanged); // } // return _SectionConfig; // } //} //private void _StepConfig_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) //{ // MyContent.Config = _StepConfig.ToString(); //} //#endregion } #endregion public enum ItemSearchIncludeLinks { Nothing = 0, Value = 1, Everything =2 } }