using System; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; namespace VEPROMS.CSLA.Library { public partial class LinkText { public LinkText(string linkInfoText) { _LinkInfoText = linkInfoText; } public void ParseLink() { if (_MyParsedLinkType == ParsedLinkType.NotParsed) { if (_LinkInfoText == null) return; // First parse the string _LinkInfoText = _LinkInfoText.Replace(@"\v ", ""); // for tran : "2, #, #, # and 4#Link:TransitionRange:2 10 173 166" Match m = Regex.Match(_LinkInfoText, @"(.*)[#]Link:([A-Za-z]*):(.*)"); _MyValue = m.Groups[1].Value; _MyLink = "#Link:" + m.Groups[2].Value + ":" + m.Groups[3].Value; switch (m.Groups[2].Value) { case "ReferencedObject": _MyParsedLinkType = ParsedLinkType.ReferencedObject; string[] subs = m.Groups[3].Value.Split(" ".ToCharArray()); if (subs[0] == "") _MyRoUsageInfo = null; else { int roUsageid = Convert.ToInt32(subs[0]); _MyRoUsageInfo = RoUsageInfo.Get(roUsageid); } break; case "Transition": case "TransitionRange": _MyParsedLinkType = (ParsedLinkType)Enum.Parse(_MyParsedLinkType.GetType(), m.Groups[2].Value); if (m.Groups[3].Value.Split(" ".ToCharArray())[1] == "") _MyTransitionInfo = null; else { int transitionID = Convert.ToInt32(m.Groups[3].Value.Split(" ".ToCharArray())[1]); _MyTransitionInfo = TransitionInfo.Get(transitionID); } break; } } } private string _LinkInfoText; public string LinkInfoText { get { return _LinkInfoText; } } private TransitionInfo _MyTransitionInfo = null; public TransitionInfo MyTransitionInfo { get { ParseLink(); return _MyTransitionInfo; } } public ItemInfo MyTranToItemInfo { get { ParseLink(); return _MyTransitionInfo.MyItemToID; } } public ItemInfo MyTranRangeItemInfo { get { ParseLink(); return _MyTransitionInfo.MyItemRangeID; } } private string _MyValue = null; public string MyValue { get { ParseLink(); return _MyValue; } } private string _MyLink = null; public string MyLink { get { ParseLink(); return _MyLink; } } private RoUsageInfo _MyRoUsageInfo; public RoUsageInfo MyRoUsageInfo { get { ParseLink(); return _MyRoUsageInfo; } } //private string _Roid = null; // TODO: need to return Referenced Object rather than just roid //public string Roid //{ // get { ParseLink(); return _Roid; } //} //private string _RoUsageid = null; // TODO: need to return Referenced Object rather than just roid //public string RoUsageid //{ // get { ParseLink(); return _RoUsageid; } //} //private string _RoDbid = null; // TODO: need to return Referenced Object rather than just roid //public string RoDbid //{ // get { ParseLink(); return _RoDbid; } //} private ParsedLinkType _MyParsedLinkType = ParsedLinkType.NotParsed; public ParsedLinkType MyParsedLinkType { get { ParseLink(); return _MyParsedLinkType; } } } #region enums public enum ParsedLinkType : int { NotParsed = 0, Transition = 1, TransitionRange = 2, ReferencedObject = 3 } #endregion }