Beispiel #1
0
        //────────────────────────────────────────

        /// <summary>
        /// 追加。
        /// </summary>
        /// <param name="nItems"></param>
        /// <param name="request"></param>
        /// <param name="log_Reports"></param>
        public void Add(
            Expr_String eChild,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0);

            log_Method.BeginMethod(Info_Syntax.Name_Library, this, "Add", log_Reports);


            if (eChild is Expr_StringImpl)
            {
                ((Expr_StringImpl)eChild).Parent = this.owner_Expression;
            }
            else if (eChild is Expr_LeafStringImpl)
            {
                ((Expr_LeafStringImpl)eChild).Parent = this.owner_Expression;
            }
            else if (eChild is Expr_TexttemplateP1pImpl)
            {
                ((Expr_TexttemplateP1pImpl)eChild).Parent = this.owner_Expression;
            }
            else
            {
                log_Method.WriteWarning_ToConsole(" 想定外のクラス=[" + eChild.GetType().Name + "]");
            }
            this.items.Add(eChild);

            log_Method.EndMethod(log_Reports);
        }
Beispiel #2
0
        //────────────────────────────────────────

        /// <summary>
        ///
        /// </summary>
        /// <param name="name">引数名</param>
        /// <param name="value">その値</param>
        /// <param name="cElm">引数のコンフィグ</param>
        /// <param name="eParent">親Expr</param>
        /// <param name="isRequired"></param>
        /// <param name="log_Reports"></param>
        /// <returns></returns>
        public bool TryGetValue2(
            PmName name,
            out Expr_String value,
            Conf_String cElm,
            Expr_String eParent,
            bool isRequired,
            Log_Reports log_Reports
            )
        {
            bool isHit = false;

            string s;//コントロール名

            this.TryGetValue(name, out s, isRequired, log_Reports);

            if (log_Reports.Successful)
            {
                value = new Expr_LeafStringImpl(s, eParent, cElm);
                isHit = true;
            }
            else
            {
                value = null;
            }

            return(isHit);
        }
Beispiel #3
0
        //────────────────────────────────────────

        /// <summary>
        /// 子要素を追加します。
        /// </summary>
        /// <param name="name"></param>
        /// <param name="nItem"></param>
        /// <param name="request"></param>
        /// <param name="log_Reports"></param>
        public void Set(
            string name,
            Expr_String eItem,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0);

            log_Method.BeginMethod(Info_Syntax.Name_Library, this, "Set", log_Reports);


            if (!this.map.ContainsKey(name))
            {
                // 新規項目なら

                // そのまま追加。
                this.map.Add(name, eItem);
            }
            else
            {
                // 既存項目なら

                // 上書きします。
                this.map.Remove(name);
                this.map.Add(name, eItem);


                if (log_Method.CanDebug(1))
                {
                    log_Method.WriteDebug_ToConsole(" 既に追加されていた項目を削除して、上書きしました。[" + name + "]");
                }
            }

            log_Method.EndMethod(log_Reports);
        }
Beispiel #4
0
 /// <summary>
 /// 属性を上書きします。
 /// </summary>
 /// <param name="name_Attribute"></param>
 /// <param name="expr_Attribute"></param>
 /// <param name="log_Reports"></param>
 public void SetAttribute(
     string name_Attribute,
     Expr_String expr_Attribute,
     Log_Reports log_Reports
     )
 {
     this.Attributes.Set(name_Attribute, expr_Attribute, log_Reports);
 }
Beispiel #5
0
        //────────────────────────────────────────

        /// <summary>
        /// コンストラクター。
        /// </summary>
        /// <param name="parent_Expr"></param>
        /// <param name="cur_Conf">生成時に指定できないものもある。</param>
        public Expr_StringImpl(Expr_String parent_Expr, Conf_String cur_Conf)
        {
            this.parent_Expression = parent_Expr;
            this.conf_             = cur_Conf;

            enumHitcount     = EnumHitcount.Unconstraint;
            this.eChildNodes = new Expr_StringListImpl(this);
            this.attributes  = new ExprStringMapImpl(this.Conf);
        }
Beispiel #6
0
        /// <summary>
        /// コンストラクター。
        /// </summary>
        public Expr_LeafStringImpl(string sHumanInput, Expr_String parent_Expr, Conf_String cur_Conf)
        {
            this.sHumanInput       = sHumanInput;
            this.parent_Expression = parent_Expr;
            this.conf_             = cur_Conf;

            this.enumHitcount = EnumHitcount.Unconstraint;
            this.dictionary_Expression_Attribute = new ExprStringMapImpl(this.Conf);
        }
Beispiel #7
0
 /// <summary>
 /// E_Elm属性。
 /// </summary>
 /// <param name="out_E_Result">検索結果。</param>
 /// <param name="sName"></param>
 /// <param name="bRequired"></param>
 /// <param name="hits"></param>
 /// <param name="log_Reports"></param>
 /// <returns>検索結果が1件以上あれば真。</returns>
 public bool TrySelectAttribute(
     out Expr_String out_eResult,
     string sName,
     EnumHitcount hits,
     Log_Reports log_Reports
     )
 {
     return(this.Attributes.TrySelect(
                out out_eResult, sName, hits, log_Reports));
 }
Beispiel #8
0
 /// <summary>
 /// 属性。
 /// </summary>
 /// <param name="out_E_Result">検索結果。</param>
 /// <param name="name"></param>
 /// <param name="bRequired"></param>
 /// <param name="hits"></param>
 /// <param name="log_Reports"></param>
 /// <returns>検索結果が1件以上あれば真。</returns>
 public bool TrySelectAttribute(
     out Expr_String eResult_Out,
     string name,
     EnumHitcount hits,
     Log_Reports log_Reports
     )
 {
     // 使いません。
     eResult_Out = new Expr_StringImpl(this, this.Conf);
     return(false);
 }
Beispiel #9
0
 /// <summary>
 /// 属性。
 /// </summary>
 /// <param name="out_E_Result">検索結果。</param>
 /// <param name="sName"></param>
 /// <param name="bRequired"></param>
 /// <param name="hits"></param>
 /// <param name="log_Reports"></param>
 /// <returns>検索結果が1件以上あれば真。</returns>
 public bool TrySelectAttribute(
     out Expr_String out_eResult,
     string sName,
     EnumHitcount hits,
     Log_Reports log_Reports
     )
 {
     // 使いません。
     out_eResult = new Expr_StringImpl(this, null);
     return(false);
 }
Beispiel #10
0
        //────────────────────────────────────────

        /// <summary>
        /// コンストラクター。
        /// </summary>
        public Expr_TexttemplateP1pImpl(Expr_String eParent, Conf_String cElm)
        {
            this.parent_Expression = eParent;
            this.conf = cElm;

            this.requestItems = EnumHitcount.Unconstraint;

            this.dictionary_P1p                  = new Dictionary <int, string>();
            this.list_Expression_Child           = new Expr_StringListImpl(this);//使いません。
            this.dictionary_Expression_Attribute = new ExprStringMapImpl(this.Conf);
        }
Beispiel #11
0
        //────────────────────────────────────────

        public SelectstatementImpl(Expr_String parent_Expr, Conf_String parent_Conf)
        {
            this.parent = parent_Conf;
            this.List_SName_SelectField             = new List <string>();
            this.Expression_From                    = new Expr_StringImpl(parent_Expr, parent_Conf);
            this.Expression_Into                    = new Expr_StringImpl(parent_Expr, parent_Conf);
            this.Expression_Where_RecordSetLoadFrom = new Expr_StringImpl(parent_Expr, parent_Conf);
            this.EnumWherelogic       = EnumLogic.And;//whereのlogic属性のデフォルト。
            this.list_Recordcondition = new List <Recordcondition>();
            this.Required             = "";
            this.Storage     = "";
            this.Description = "";
        }
Beispiel #12
0
        public string GetMessage(Log_Reports log_Reports)
        {
            Expr_String eStr = this.p1pText.Compile(log_Reports);

            StringBuilder sb = new StringBuilder();

            sb.Append(eStr.Lv4Execute_OnImplement(EnumHitcount.Unconstraint, log_Reports));
            sb.Append(System.Environment.NewLine);

            // コールスタックを付けます。
            sb.Append(this.text_Callstack);

            return(sb.ToString());
        }
Beispiel #13
0
        //────────────────────────────────────────

        /// <summary>
        /// このデータは、ファイルパス型だ、と想定して、ファイルパスを取得します。
        /// </summary>
        /// <returns></returns>
        public static Expr_Filepath Execute4_OnExpressionString_AsFilepath_Impl(
            Expr_String eCaller,
            EnumHitcount request,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl();

            log_Method.BeginMethod(Info_Syntax.Name_Library, eCaller, "Execute4_OnExpressionString_AsFilepath_Impl", log_Reports);
            //
            //
            //
            //

            Expr_Filepath reulst_eRel;

            //
            // ファイルパス。
            string sFpath = eCaller.Lv5_Implement(log_Reports);

            {
                reulst_eRel = Expr_FilepathImpl.Init2(
                    "",
                    sFpath,
                    "ファイルパス出典未指定L01_1",
                    eCaller.Conf,
                    log_Reports
                    );

                if (!log_Reports.Successful)
                {
                    // 既エラー。
                    reulst_eRel = null;
                    goto gt_EndMethod;
                }
            }

            goto gt_EndMethod;
            //
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return(reulst_eRel);
        }
Beispiel #14
0
        //────────────────────────────────────────

        /// <summary>
        /// 親E_Stringを遡って検索。一致するものがなければヌル。
        /// </summary>
        /// <param name="nodeName">ノード名</param>
        /// <returns></returns>
        public static Expr_String GetParentEOrNull_(Expr_String eMe, string nodeName)
        {
            Expr_String result;


            if (eMe.Parent == null)
            {
                result = null;
            }
            else if (eMe.Parent.Conf.Name == nodeName)
            {
                result = eMe.Parent;
            }
            else
            {
                result = eMe.Parent.GetParentExpressionOrNull(nodeName);
            }

            return(result);
        }
Beispiel #15
0
        //────────────────────────────────────────

        /// <summary>
        /// 子要素を追加します。
        /// </summary>
        /// <param name="items"></param>
        /// <param name="request"></param>
        /// <param name="log_Reports"></param>
        public void AddChildElement(
            Expr_String eChild,
            Log_Reports log_Reports
            )
        {
            //
            // エラー。

            Log_Method log_Method = new Log_MethodImpl();

            log_Method.BeginMethod(Info_Syntax.Name_Library, this, "AddChildElement", log_Reports);

            //
            //
            //
            //

            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);

                r.SetTitle("▲エラー201!", log_Method);

                Log_TextIndented t = new Log_TextIndentedImpl();
                t.Append("このメソッド " + log_Method.Fullname + " は使わないでください。");

                // ヒント
                t.Append(r.Message_Conf(this.Conf));

                r.Message = t.ToString();

                log_Reports.EndCreateReport();
            }

            //
            //
            log_Method.EndMethod(log_Reports);
        }
Beispiel #16
0
        //────────────────────────────────────────

        public void ForEach(DELEGATE_Expression_Nodes dlgt1)
        {
            bool bBreak  = false;
            bool bRemove = false;

            for (int nI = 0; nI < this.items.Count; nI++)
            {
                Expr_String cur_Expression = this.items[nI];

                dlgt1(cur_Expression, ref bRemove, ref bBreak);

                if (bRemove)
                {
                    this.items.RemoveAt(nI);
                    nI--;
                    bRemove = false;
                }

                if (bBreak)
                {
                    break;
                }
            }
        }
Beispiel #17
0
        //────────────────────────────────────────

        /// <summary>
        /// コンストラクター。
        /// </summary>
        public Expr_StringListImpl(Expr_String owner)
        {
            this.owner_Expression = owner;
            this.items            = new List <Expr_String>();
        }
Beispiel #18
0
        //────────────────────────────────────────

        public virtual string Lv5_Implement(
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl();

            log_Method.BeginMethod(Info_Syntax.Name_Library, this, "Lv5_Implement", log_Reports);

            //
            //

            StringBuilder sb_Result = new StringBuilder();

            List <Expr_String> eChildList = this.ChildNodes.SelectList(EnumHitcount.Unconstraint, log_Reports);

            switch (this.enumHitcount)
            {
            case EnumHitcount.First_Exist:
            {
                //
                // 最初の1件のみ。存在しない場合エラー。
                //
                if (0 < eChildList.Count)
                {
                    Expr_String eChild = eChildList[0];
                    string      s      = eChild.Lv4Execute_OnImplement(this.enumHitcount, log_Reports);

                    sb_Result.Append(s);
                }
                else
                {
                    //
                    // エラー
                    goto gt_Error_NotFoundOne;
                }
            }
            break;

            case EnumHitcount.First_Exist_Or_Zero:
            {
                //
                // 最初の1件のみ。存在しない場合、空文字列。
                //
                if (0 < eChildList.Count)
                {
                    Expr_String eChild = eChildList[0];
                    string      s      = eChild.Lv4Execute_OnImplement(this.enumHitcount, log_Reports);

                    sb_Result.Append(s);
                }
                else
                {
                    //
                    // 存在しないので、空文字列。
                    //

                    // そのままスルー。
                }
            }
            break;

            case EnumHitcount.Unconstraint:
            {
                //
                // 制限なし
                //

                foreach (Expr_String eChild in eChildList)
                {
                    string s = eChild.Lv4Execute_OnImplement(this.enumHitcount, log_Reports);

                    sb_Result.Append(s);
                }
            }
            break;

            default:
            {
                //
                // エラー
                goto gt_Error_UndefinedEnum;
            }
            }

            goto gt_EndMethod;
            //
            #region 異常系
            //────────────────────────────────────────
gt_Error_NotFoundOne:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー111!", log_Method);

                StringBuilder sb = new StringBuilder();
                sb.Append("必ず、最初の1件を取得する指定でしたが、1件も存在しませんでした。");
                sb.Append(Environment.NewLine);
                sb.Append(Environment.NewLine);

                // ヒント

                r.Message = sb_Result.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
gt_Error_UndefinedEnum:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー113!", log_Method);

                StringBuilder sb = new StringBuilder();
                sb.Append("this.requestItems.VolumeConstraintEnum=[");
                sb.Append(this.enumHitcount.ToString());
                sb.Append("]には、プログラム側でまだ未対応です。");

                // ヒント

                r.Message = sb_Result.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return(sb_Result.ToString());
        }
Beispiel #19
0
        //────────────────────────────────────────

        /// <summary>
        /// コンストラクター。
        /// </summary>
        public Expr_LeafStringImpl(Expr_String parent_Expr, Conf_String cur_Conf)
            : this("", parent_Expr, cur_Conf)
        {
        }
Beispiel #20
0
 /// <summary>
 /// コンストラクター。
 /// node_Configurationtree を後で InitializeBeforeuse を使って指定する必要がある。
 /// </summary>
 /// <param name="eParent"></param>
 public Expr_StringImpl(Expr_String eParent)
     : this(eParent, null)
 {
 }
Beispiel #21
0
        //────────────────────────────────────────

        /// <summary>
        /// 例えば "data" と指定すれば、
        /// 直下の子要素の中で <data > といったノード名を持つものはヒットする。
        /// </summary>
        /// <param name="sName"></param>
        /// <param name="sExpectedValue"></param>
        /// <param name="request"></param>
        /// <param name="log_Reports"></param>
        /// <returns></returns>
        public static List <Expr_String> SelectItemByNodeName(
            List <Expr_String> eItems, string sName_ExpectedNode, bool bRemove, EnumHitcount request, Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0);

            log_Method.BeginMethod(Info_Syntax.Name_Library, "Expression_Node_StringImpl", "SelectItemByNodeName", log_Reports);

            List <Expr_String> result = new List <Expr_String>();


            for (int nI = 0; nI < eItems.Count; nI++)
            {
                Expr_String eItem = eItems[nI];

                if (log_Reports.Successful)
                {
                    if (eItem.Conf.Name == sName_ExpectedNode)
                    {
                        result.Add(eItem);

                        if (bRemove)
                        {
                            // 削除を要求します。
                            eItems.RemoveAt(nI);
                            nI--;
                        }


                        if (EnumHitcount.First_Exist == request ||
                            EnumHitcount.First_Exist_Or_Zero == request)
                        {
                            // 最初の1件で終了。複数件ヒットするかどうかは判定しない。
                            break;
                        }
                    }
                }
            }


            if (EnumHitcount.One == request)
            {
                // 必ず1件だけヒットする想定。

                if (result.Count != 1)
                {
                    goto gt_errorNotOne;
                }
            }
            else if (EnumHitcount.First_Exist == request)
            {
                // 必ずヒットする。複数件あれば、最初の1件だけ取得。

                if (0 == result.Count)
                {
                    goto gt_errorNoHit;
                }
                else if (1 < result.Count)
                {
                    result.RemoveRange(1, result.Count - 1);
                }
            }
            else if (EnumHitcount.First_Exist_Or_Zero == request)
            {
                // ヒットすれば最初の1件だけ、ヒットしなければ0件の想定。

                if (1 < result.Count)
                {
                    result.RemoveRange(1, result.Count - 1);
                }
            }
            else
            {
            }

            goto gt_EndMethod;
            //
            //
            #region 異常系
            //────────────────────────────────────────
gt_errorNoHit:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー102!", log_Method);

                StringBuilder sb = new StringBuilder();
                sb.Append("必ず、1件以上ヒットする指定でしたが、[");
                sb.Append(result.Count);
                sb.Append("]件ヒットしました。");
                sb.Append(Environment.NewLine);
                sb.Append(Environment.NewLine);

                // ヒント

                r.Message = sb.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //
            //
gt_errorNotOne:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー101!", log_Method);

                StringBuilder sb = new StringBuilder();
                sb.Append("必ず、1件のみ取得する指定でしたが、[");
                sb.Append(result.Count);
                sb.Append("]件取得しました。");
                sb.Append(Environment.NewLine);
                sb.Append(Environment.NewLine);

                // ヒント

                r.Message = sb.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return(result);
        }
Beispiel #22
0
        //────────────────────────────────────────

        /// <summary>
        ///
        /// </summary>
        /// <param name="e_Result">検索結果。</param>
        /// <param name="name"></param>
        /// <param name="bRequired"></param>
        /// <param name="hits"></param>
        /// <param name="log_Reports"></param>
        /// <returns>検索結果が1件以上あれば真。</returns>
        public bool TrySelect(
            out Expr_String out_eResult,
            string name,
            EnumHitcount hits,
            Log_Reports log_Reports//bug:ヌルのことがある?
            )
        {
            Log_Method log_Method = new Log_MethodImpl();

            log_Method.BeginMethod(Info_Syntax.Name_Library, this, "TrySelect", log_Reports);
            //

            bool isHit;

            if (this.map.ContainsKey(name))
            {
                // ヒット。
                out_eResult = this.map[name];
                isHit       = true;
            }
            else
            {
                // 一致なし。
                isHit = false;

                if (Utility_Hitcount.IsError_IfNoHit(hits, log_Reports))
                {
                    //エラーにする。
                    out_eResult = null;
                    goto gt_Error_NotFoundOne;
                }
                else
                {
                    // 該当しないキーを指定され、値を取得できなかったが、エラー報告しない。
                    Conf_String parent_Conf = new Conf_StringImpl("!ハードコーディング_NStringDictionaryImpl#Get", null);
                    out_eResult = new Expr_LeafStringImpl(null, parent_Conf);
                }
            }

            goto gt_EndMethod;
            //
            #region 異常系
            //────────────────────────────────────────
gt_Error_NotFoundOne:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー141!", log_Method);

                Log_TextIndented s = new Log_TextIndentedImpl();
                s.Append("指定された名前[");
                s.Append(name);
                s.Append("]は、“EDic(連想配列)”の中にありませんでした。");
                s.Newline();

                s.Append("┌────────┐キー一覧(個数=[");
                s.Append(this.map.Count);
                s.Append("])");
                s.Newline();
                foreach (string sKey in this.map.Keys)
                {
                    s.Append("[");
                    s.Append(sKey);
                    s.Append("]");
                    s.Newline();
                }
                s.Append("└────────┘");
                s.Newline();

                // ヒント

                if (null != this.Owner_Conf)
                {
                    s.Append("◆オーナー情報1");
                    s.Newline();
                    this.Owner_Conf.ToText_Content(s);
                }

                if (0 < this.map.Count)
                {
                    foreach (Expr_String eItem in this.map.Values)
                    {
                        Expr_String eParent = eItem.Parent;
                        if (null != eParent)//親要素が設定されていないことがある。
                        {
                            // 最初の1個。
                            s.Append("◆最初の要素の親の情報。");
                            s.Newline();
                            eParent.ToText_Snapshot(s);
                        }
                        break;
                    }
                }

                //
                // オーナーの情報。
                if (null != this.owner_Conf)//オーナー要素が設定されていないことがある。
                {
                    s.Newline();
                    s.Newline();
                    s.Append("◆オーナー情報2。");
                    s.Newline();
                    this.owner_Conf.ToText_Locationbreadcrumbs(s);
                }


                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return(isHit);
        }