/// <summary> /// 直近の上流に指定の型があったら取得する。 /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public T GetUpperRawler <T>() where T : RawlerBase { T result = null; RawlerBase rawler = this.Parent; if (rawler != null) { while (true) { if (rawler is T) { result = rawler as T; break; } else if (rawler.Parent == null) { break; } else { rawler = rawler.Parent; } } } return(result); }
public RawlerBase GetUpperInterface <T>() { bool flag = false; RawlerBase rawler = this.Parent; while (true) { if (rawler == null) { break; } if (rawler is T) { flag = true; break; } else if (rawler.Parent == null) { break; } else { rawler = rawler.Parent; } } if (flag) { return(rawler); } else { return(null); } }
/// <summary> /// クローンを作る /// </summary> /// <typeparam name="T"></typeparam> /// <param name="parent"></param> /// <returns></returns> public virtual T Clone <T>(RawlerBase parent) where T : RawlerBase, new() { T clone = new T(); // RawlerLib.ObjectLib.FildCopy(this as T, clone); clone.SetParent(parent); CloneEvent(clone); clone.Children.Clear(); //foreach (var item in clone.GetType().GetProperties()) //{ // if (item.PropertyType.IsSubclassOf(typeof(RawlerBase))) // { // var r = item.GetValue(this as T, null) as RawlerBase; // item.SetValue(clone, r.Clone(), null); // } //} foreach (var item in this.Children) { var child = item.Clone(clone); clone.AddChildren(child); } return(clone); }
/// <summary> /// Dispose() /// </summary> public virtual void Dispose() { this.text = null; this.parent = null; this.children = null; this.commnet = null; this.preTree = null; }
public void Run(RawlerBase parent) { try { var type = parent.GetType(); var field = type.GetRuntimeProperty(PropertyName); var text = RawlerBase.GetText(string.Empty, Child, parent); if (field.PropertyType == typeof(string)) { field.SetValue(parent, text, null); } else if (field.PropertyType == typeof(int)) { int num; if (int.TryParse(text, out num)) { field.SetValue(parent, num, null); } else { ReportManage.ErrReport(parent, "InitTreeで" + PropertyName + "の値をint型に変換に失敗しました"); } } else if (field.PropertyType == typeof(double)) { double num; if (double.TryParse(text, out num)) { field.SetValue(parent, num, null); } else { ReportManage.ErrReport(parent, "InitTreeで" + PropertyName + "の値をdouble型に変換に失敗しました"); } } else if (field.PropertyType == typeof(bool)) { if (text.ToLower() == "true") { field.SetValue(parent, true, null); } else if (text.ToLower() == "false") { field.SetValue(parent, false, null); } else { ReportManage.ErrReport(parent, "InitTreeで" + PropertyName + "の値をbool型に変換に失敗しました。Valueは" + text); } } } catch (Exception ex) { ReportManage.ErrReport(parent, "InitTreeで" + PropertyName + "でエラーが発生しました。" + ex.Message); } }
public override T Clone <T>(RawlerBase parent) { var obj = base.Clone <T>(parent); if (obj is RawlerMultiBase) { (obj as RawlerMultiBase).Query = this.Query.Clone(); } return(obj); }
public static string GetText(string text, RawlerBase rawler) { Document doc = new Document(); doc.SetText(text); rawler.SetParent(doc); var last = rawler.GetDescendantRawler().Last(); rawler.Run(); return(last.Text); }
/// <summary> /// 指定したテキストをPreTreeにかける。 /// </summary> /// <param name="text"></param> /// <returns></returns> protected string GetText(string preText) { if (preTree != null) { return(RawlerBase.GetText(preText, PreTree)); } else { return(preText); } }
/// <summary> /// 初期化実行 /// </summary> /// <param name="root"></param> public void Run(RawlerBase root) { if (this.Count == 0) { return; } foreach (var item in this) { item.Run(root); } }
/// <summary> /// クローンを作る /// </summary> /// <param name="parent"></param> /// <returns></returns> public virtual RawlerBase Clone(RawlerBase parent) { RawlerBase clone = new RawlerBase(); // RawlerLib.ObjectLib.FildCopy(this, clone); clone.SetParent(parent); CloneEvent(clone); clone.Children.Clear(); foreach (var item in this.Children) { var child = item.Clone(clone); clone.AddChildren(child); } return(clone); }
/// <summary> /// 自身を含む、すべての子、孫を取得する。 /// </summary> /// <returns></returns> public IEnumerable <RawlerBase> GetDescendantRawler() { List <RawlerBase> list = new List <RawlerBase>(); Queue <RawlerBase> queueRawler = new Queue <RawlerBase>(); queueRawler.Enqueue(this); while (queueRawler.Count > 0) { RawlerBase tmp = queueRawler.Dequeue(); list.Add(tmp); foreach (var item in tmp.Children) { queueRawler.Enqueue(item); } } return(list); }
/// <summary> /// 自身を含む、すべての祖先を取得する。 /// </summary> /// <returns></returns> public IEnumerable <RawlerBase> GetAncestorRawler() { List <RawlerBase> list = new List <RawlerBase>(); Queue <RawlerBase> queueRawler = new Queue <RawlerBase>(); queueRawler.Enqueue(this); while (queueRawler.Count > 0) { RawlerBase tmp = queueRawler.Dequeue(); list.Add(tmp); if (tmp.Parent != null) { queueRawler.Enqueue(tmp.Parent); } } return(list); }
private IEnumerable <string> Convert(IEnumerable <string> list) { if (ConvertTree != null) { ConvertTree.SetParent(this.Parent); foreach (var item in list) { yield return(RawlerBase.GetText(item, ConvertTree, this.Parent)); } } else { foreach (var item in list) { yield return(item); } } }
/// <summary> /// PreTreeを通したあとのText /// </summary> /// <returns></returns> protected string GetText() { if (this.Parent != null) { if (preTree != null) { preTree.SetParent(); return(RawlerBase.GetText(this.Parent.Text, PreTree, this.Parent)); } else { return(this.Parent.Text); } } else { return(this.text); } }
private IEnumerable <TextPair <T> > Convert <T>(IEnumerable <TextPair <T> > list, Func <T, string> textFunc) { if (ConvertTree != null) { ConvertTree.SetParent(this.Parent); foreach (var item in list) { item.Text = RawlerBase.GetText(item.Text, ConvertTree, this.Parent); yield return(item); //yield return RawlerBase.GetText(item, ConvertTree, this.Parent); } } else { foreach (var item in list) { yield return(item); } } }
/// <summary> /// イベントのコピー /// </summary> /// <param name="rawler"></param> protected virtual void CloneEvent(RawlerBase rawler) { rawler.BeginRunEvent = this.BeginRunEvent; rawler.EndRunEvent = this.EndRunEvent; }
/// <summary> /// 最初に挿入する。 /// </summary> /// <param name="rawler"></param> public void AddFirst(RawlerBase rawler) { children.Insert(0, rawler); rawler.SetParent(this); }
/// <summary> /// 子を追加する。 /// </summary> /// <param name="rawler"></param> public void AddChildren(RawlerBase rawler) { children.Add(rawler); rawler.SetParent(this); }
/// <summary> /// 子を追加する。メソッドチェーン用。 /// </summary> /// <param name="child"></param> /// <returns></returns> public RawlerBase Add(RawlerBase child) { this.AddChildren(child); return(child); }
public void SetParent(RawlerBase rawler) { parent = rawler; SetParent(); }
/// <summary> /// Clone /// </summary> /// <param name="parent"></param> /// <returns></returns> public override RawlerBase Clone(RawlerBase parent) { var obj = base.Clone <RawlerMultiBase>(parent); return(obj); }