Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
 /// <summary>
 /// Dispose()
 /// </summary>
 public virtual void Dispose()
 {
     this.text     = null;
     this.parent   = null;
     this.children = null;
     this.commnet  = null;
     this.preTree  = null;
 }
Exemplo n.º 5
0
 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);
     }
 }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
 /// <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);
     }
 }
Exemplo n.º 9
0
 /// <summary>
 /// 初期化実行
 /// </summary>
 /// <param name="root"></param>
 public void Run(RawlerBase root)
 {
     if (this.Count == 0)
     {
         return;
     }
     foreach (var item in this)
     {
         item.Run(root);
     }
 }
Exemplo n.º 10
0
        /// <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);
        }
Exemplo n.º 11
0
        /// <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);
        }
Exemplo n.º 12
0
        /// <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);
        }
Exemplo n.º 13
0
 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);
         }
     }
 }
Exemplo n.º 14
0
 /// <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);
     }
 }
Exemplo n.º 15
0
 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);
         }
     }
 }
Exemplo n.º 16
0
 /// <summary>
 /// イベントのコピー
 /// </summary>
 /// <param name="rawler"></param>
 protected virtual void CloneEvent(RawlerBase rawler)
 {
     rawler.BeginRunEvent = this.BeginRunEvent;
     rawler.EndRunEvent   = this.EndRunEvent;
 }
Exemplo n.º 17
0
 /// <summary>
 /// 最初に挿入する。
 /// </summary>
 /// <param name="rawler"></param>
 public void AddFirst(RawlerBase rawler)
 {
     children.Insert(0, rawler);
     rawler.SetParent(this);
 }
Exemplo n.º 18
0
 /// <summary>
 /// 子を追加する。
 /// </summary>
 /// <param name="rawler"></param>
 public void AddChildren(RawlerBase rawler)
 {
     children.Add(rawler);
     rawler.SetParent(this);
 }
Exemplo n.º 19
0
 /// <summary>
 /// 子を追加する。メソッドチェーン用。
 /// </summary>
 /// <param name="child"></param>
 /// <returns></returns>
 public RawlerBase Add(RawlerBase child)
 {
     this.AddChildren(child);
     return(child);
 }
Exemplo n.º 20
0
 public void SetParent(RawlerBase rawler)
 {
     parent = rawler;
     SetParent();
 }
Exemplo n.º 21
0
        /// <summary>
        /// Clone
        /// </summary>
        /// <param name="parent"></param>
        /// <returns></returns>
        public override RawlerBase Clone(RawlerBase parent)
        {
            var obj = base.Clone <RawlerMultiBase>(parent);

            return(obj);
        }