//────────────────────────────────────────
        /// <summary>
        /// アクション実行。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public override string Execute5_Main(Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);
            log_Method.BeginMethod(Info_Functions.Name_Library, this, "Execute5_Main",log_Reports);

            //
            //

            if (this.EnumEventhandler == EnumEventhandler.O_Lr)
            {
                this.Execute6_Sub(
                    log_Reports
                    );
            }
            else if (this.EnumEventhandler == EnumEventhandler.O_Ea)
            {
                this.Execute6_Sub(
                    log_Reports
                    );

            }

            //
            //
            log_Method.EndMethod(log_Reports);
            return "";
        }
        public override Expression_Node_Function NewInstance(
            Expression_Node_String parent_Expression, Configuration_Node cur_Conf,
            object owner_MemoryApplication, Log_Reports pg_Logging)
        {
            Log_Method pg_Method = new Log_MethodImpl(0);
            pg_Method.BeginMethod(Info_CSVEditorImpl.Name_Library, this, "NewInstance",pg_Logging);
            //

            Expression_Node_Function f0 = new Expression_Node_Function_BootCsvEditorExImpl(this.EnumEventhandler,this.List_NameArgumentInitializer,this.Functiontranslatoritem);
            f0.Parent_Expression = parent_Expression;
            f0.Cur_Configuration = cur_Conf;
            ((Expression_Node_FunctionAbstract)f0).Owner_MemoryApplication = (MemoryApplication)owner_MemoryApplication;
            //関数名初期化
            f0.Dictionary_Expression_Attribute.Set(PmNames.S_NAME.Name_Pm, new Expression_Leaf_StringImpl(NAME_FUNCTION, null, cur_Conf), pg_Logging);

            //「プロジェクト選択時」のイベントハンドラーを上書き要求。
            {
                Expression_Node_Function expr_Func2 = Collection_Function.NewFunction2(
                        Expression_Node_Function_OnEditorSelected_Impl.NAME_FUNCTION,
                        f0,
                        cur_Conf,
                        //EnumEventhandler.Tp_B_Wr_Rhn,
                        owner_MemoryApplication,
                        pg_Logging);

                ((Expression_Node_Function_BootCsvEditorExImpl)f0).Functionitem_OnProjectSelected = expr_Func2;
            }

            //
            pg_Method.EndMethod(pg_Logging);
            return f0;
        }
        //────────────────────────────────────────
        /// <summary>
        /// アクション実行。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public override string Execute5_Main(Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0);
            log_Method.BeginMethod(Info_Functions.Name_Library, this, "Execute5_Main",log_Reports);

            string sFncName0;
            this.TrySelectAttribute(out sFncName0, PmNames.S_NAME.Name_Pm, EnumHitcount.One_Or_Zero, log_Reports);

            if (this.EnumEventhandler == EnumEventhandler.O_Ea)
            {
                if (this.Functionparameterset.Sender is Customcontrol)
                {
                    Customcontrol ccFc = (Customcontrol)this.Functionparameterset.Sender;

                    string sName_Usercontrol = ccFc.ControlCommon.Expression_Name_Control.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports);

                    log_Reports.Comment_EventCreationMe = "[" + sName_Usercontrol + "]コントロールが、[" + sFncName0 + "]アクションを実行。";
                }
                else
                {
                    log_Reports.Comment_EventCreationMe = "[" + sFncName0 + "]アクションを実行。";
                }

                ListBox pcLst = (ListBox)this.Functionparameterset.Sender;

                this.Execute6_Sub(pcLst, log_Reports);
            }

            log_Method.EndMethod(log_Reports);
            return "";
        }
        //────────────────────────────────────────
        /// <summary>
        /// 内容をデバッグ出力します。
        /// </summary>
        public void CreateMessage_Debug(Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0);
            Log_Reports d_Logging_Dammy = new Log_ReportsImpl(log_Method);
            log_Method.BeginMethod(Info_MiddleImpl.Name_Library, this, "CreateMessage_Debug",d_Logging_Dammy);
            //
            //

            //ystem.Console.WriteLine(this.GetType().Name + "#DebugWrite: 【デバッグ出力】 project要素の個数=[" + this.Items.Count + "]");

            foreach (MemoryAatoolxml_Editor aatool_Editor in this.Dictionary_Item.Values)
            {
                //ystem.Console.WriteLine(this.GetType().Name + "#DebugWrite: 【デバッグ出力】 project名=[" + st_Project.Name + "]");

                aatool_Editor.WriteDebug_ToConsole(aatool_Editor.Dictionary_Fsetvar_Configurationtree, log_Reports);
            }

            //
            //
            d_Logging_Dammy.EndCreateReport();
            log_Method.EndMethod(d_Logging_Dammy);
            if (!d_Logging_Dammy.Successful)
            {
                log_Method.WriteDebug_ToConsole(d_Logging_Dammy.ToText());
            }
        }
Example #5
0
        //────────────────────────────────────────
        /// <summary>
        /// イベントハンドラーの作成。
        /// </summary>
        /// <param name="s_Action"></param>
        /// <param name="log_Reports"></param>
        /// <returns></returns>
        public Expression_Node_Function ConfigurationtreeToFunction(
            Configurationtree_Node action_Conf,
            MemoryApplication owner_MemoryApplication,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);
            log_Method.BeginMethod(Info_Functions.Name_Library, this, "ConfigurationtreeToFunction",log_Reports);

            if (log_Reports.CanStopwatch)
            {
                log_Method.Log_Stopwatch.Begin();
            }
            //

            Expression_Node_Function expr_Func;
            if (log_Reports.Successful)
            {
                expr_Func = owner_MemoryApplication.MemoryForms.ConfigurationtreeToFunction.Translate(
                    action_Conf,
                    true,
                    log_Reports
                    );
            }
            else
            {
                expr_Func = null;
            }

            goto gt_EndMethod;
            //
            gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return expr_Func;
        }
Example #6
0
        //────────────────────────────────────────
        /// <summary>
        /// 無条件で、全てのレコードを返す。
        /// </summary>
        /// <param name="dst_Row"></param>
        /// <param name="isRequired_ExpectedValue"></param>
        /// <param name="dataTable"></param>
        /// <param name="s_ParentNode_query"></param>
        /// <param name="log_Reports"></param>
        public void Select(
            out List<DataRow> out_List_DstRow,
            bool isRequired_ExpectedValue,
            DataTable dataTable,
            Configuration_Node parent_Conf,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl();
            log_Method.BeginMethod(Info_Table.Name_Library, this, "Select",log_Reports);

            //
            //
            //
            //

            out_List_DstRow = new List<DataRow>();

            foreach (DataRow row in dataTable.Rows)
            {
                out_List_DstRow.Add(row);
            }

            goto gt_EndMethod;

            //
            //
            //
            //

            gt_EndMethod:
            log_Method.EndMethod(log_Reports);
        }
        //────────────────────────────────────────
        /// <summary>
        /// 例えば ("access",”from”)と指定すれば、
        /// 指定リストの要素の中で <~ access=”from,to”> といった属性を持つものはヒットする。
        /// 
        /// 選択アイテムをリストから除外するなら bRemove=true にします。
        /// </summary>
        /// <param name="sName"></param>
        /// <param name="sExpectedValue"></param>
        /// <param name="request_Items"></param>
        /// <param name="log_Reports"></param>
        /// <returns></returns>
        public static List<Expression_Node_String> SelectItemsByPmAsCsv(
            List<Expression_Node_String> ecList_Item, string sPmName, string sExpectedValue,
            bool bRemove, EnumHitcount hits, Log_Reports log_Reports)
        {
            Log_Method pg_Method = new Log_MethodImpl(0);
            pg_Method.BeginMethod(Info_Controls.Name_Library, "Util_E_NodeImpl", "SelectItemsByAttrAsCsv",log_Reports);
            //
            //
            //Util_E_NodeImpl dammy_This = new Util_E_NodeImpl();

            List<Expression_Node_String> ecList_Result;
            ecList_Result =  Utility_Expression_NodeImpl.SelectItemsByPmAsCsv_Full_(
                ecList_Item,
                sPmName,
                false,
                sExpectedValue,
                bRemove,
                hits,
                log_Reports
                );

            goto gt_EndMethod;
            //
            //
            gt_EndMethod:
            pg_Method.EndMethod(log_Reports);

            // 正常終了
            return ecList_Result;
        }
        //────────────────────────────────────────
        /// <summary>
        /// 「ツール設定ウィンドウ」を開きます。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="eventMonitor"></param>
        /// <param name="log_Reports"></param>
        public override string Execute5_Main(Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0);
            log_Method.BeginMethod(Info_Functions.Name_Library, this, "Execute5_Main",log_Reports);

            if (this.EnumEventhandler == EnumEventhandler.O_Lr)
            {
                if (log_Reports.CanStopwatch)
                {
                    string sFncName;
                    this.TrySelectAttribute(out sFncName, PmNames.S_NAME.Name_Pm, EnumHitcount.One_Or_Zero, log_Reports);
                    log_Method.Log_Stopwatch.Message = "Nアクション[" + sFncName + "]実行";
                    log_Method.Log_Stopwatch.Begin();
                }

                //
                //
                //
                //

                // ツール設定モデルを共有します。
                this.Owner_MemoryApplication.MemoryForms.MemoryAatoolxmlDialog.MemoryAatoolxml = this.Owner_MemoryApplication.MemoryAatoolxml;

                // 「SelectedIndexイベント」を必ず動かすために、リストボックスを空にします。
                this.Owner_MemoryApplication.MemoryForms.Form_Toolwindow.Clear();

                // ダイアログボックスを出します。
                ((Form)this.Owner_MemoryApplication.MemoryForms.Form_Toolwindow).ShowDialog(this.Owner_MemoryApplication.MemoryForms.Mainwnd_FormWrapping.Form);
            }

            log_Method.EndMethod(log_Reports);
            return "";
        }
        //────────────────────────────────────────
        /// <summary>
        /// アクション実行。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public override string Execute5_Main(Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);
            log_Method.BeginMethod(Info_Functions.Name_Library, this, "Execute5_Main",log_Reports);

            string sFncName0;
            this.TrySelectAttribute(out sFncName0, PmNames.S_NAME.Name_Pm, EnumHitcount.One_Or_Zero, log_Reports);

            if (log_Reports.CanStopwatch)
            {
                log_Method.Log_Stopwatch.Message = "「E■[" + sFncName0 + "]アクション」実行(A)";
                log_Method.Log_Stopwatch.Begin();
            }
            //
            //

            if (this.EnumEventhandler == EnumEventhandler.O_Lr)
            {
                this.Execute6_Sub(log_Reports);
            }
            else if (this.EnumEventhandler == EnumEventhandler.O_Ea)
            {
                this.Execute6_Sub(log_Reports);
            }

            goto gt_EndMethod;
            //
            //
            gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return "";
        }
        //────────────────────────────────────────
        public static void ParseChild_InAnotherLibrary(
            Configurationtree_Node cur_Cf,
            Expression_Node_String parent_Expr,//nAcase,nFelemの両方の場合がある。
            MemoryApplication memoryApplication,
            Log_TextIndented_ConfigurationtreeToExpression pg_ParsingLog,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);
            log_Method.BeginMethod(Info_ConfigurationtreeToExpression.Name_Library, "SToE_AbstractImpl", "ParseChild_InAnotherLibrary",log_Reports);

            ConfigurationtreeToExpression_F14n16 dammy = new ConfigurationtreeToExpression_F14_FncImpl_();//メソッドが使いたいだけなので、何でもいい。
            dammy.ParseChild_InConfigurationtreeToExpression(
                cur_Cf,
                parent_Expr,
                memoryApplication,
                pg_ParsingLog,
                log_Reports
                );

            goto gt_EndMethod;
            //
            //
            gt_EndMethod:

            if (Log_ReportsImpl.BDebugmode_Static)
            {
                //d_ParsingLog.Decrement(s_Cur.Name_Node);
            }
            log_Method.EndMethod(log_Reports);
        }
Example #11
0
        //────────────────────────────────────────
        /// <summary>
        /// グリッド領域を追加します。(エラー対応処理付き)
        /// </summary>
        /// <param name="gridAreaName"></param>
        /// <param name="gridArea"></param>
        /// <param name="log_Reports"></param>
        public void Add(
            string sName_Gridarea,
            Grid gridArea,
            Log_Reports log_Reports,
            string sLogStack
            )
        {
            Log_Method pg_Method = new Log_MethodImpl(0);
            pg_Method.BeginMethod(Info_GridPanel.Name_Library, this, "Add",log_Reports);

            Exception err_Excp;
            try
            {
                this.Dictionary_Item.Add(sName_Gridarea, gridArea);
            }
            catch (Exception e)
            {
                // エラー
                err_Excp = e;
                goto gt_Error_Exception;
            }

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

                StringBuilder t = new StringBuilder();
                t.Append("グリッドパネルの利用");
                t.Append(Environment.NewLine);
                t.Append(Environment.NewLine);
                t.Append("[");
                t.Append(sName_Gridarea);
                t.Append("]要素の追加時に失敗しました。");
                t.Append(Environment.NewLine);
                t.Append(Environment.NewLine);
                t.Append("エラー:");
                t.Append(err_Excp.Message);
                t.Append(Environment.NewLine);
                t.Append(Environment.NewLine);
                t.Append("実行経路ヒント:");
                t.Append(sLogStack);

                r.Message = t.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
            //
            gt_EndMethod:
            pg_Method.EndMethod(log_Reports);
        }
        //────────────────────────────────────────
        /// <summary>
        /// 追加。
        /// </summary>
        /// <param name="nItems"></param>
        /// <param name="request"></param>
        /// <param name="log_Reports"></param>
        public void Add(
            Expression_Node_String ec_Child,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0);
            log_Method.BeginMethod(Info_Syntax.Name_Library, this, "Add",log_Reports);

            if (ec_Child is Expression_Node_StringImpl)
            {
                ((Expression_Node_StringImpl)ec_Child).Parent_Expression = this.owner_Expression;
            }
            else if (ec_Child is Expression_Leaf_StringImpl)
            {
                ((Expression_Leaf_StringImpl)ec_Child).Parent_Expression = this.owner_Expression;
            }
            else if (ec_Child is Expression_TexttemplateP1pImpl)
            {
                ((Expression_TexttemplateP1pImpl)ec_Child).Parent_Expression = this.owner_Expression;
            }
            else
            {
                log_Method.WriteWarning_ToConsole(" 想定外のクラス=[" + ec_Child.GetType().Name + "]");
            }
            this.listExpression_Item.Add(ec_Child);

            log_Method.EndMethod(log_Reports);
        }
Example #13
0
        //────────────────────────────────────────
        /// <summary>
        /// 再帰関数です。
        /// </summary>
        /// <param name="result">.luaファイルのパスが追加されます。</param>
        /// <param name="folderpath"></param>
        public void SearchLua(List<string> result, string folderpath, Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl();
            log_Method.BeginMethod(Info_Actorslist.Name_Library, this, "SearchLua", log_Reports);

            if (log_Reports.Successful)
            {
                if (!Directory.Exists(folderpath))
                {
                    System.Console.WriteLine("SearchLua エラー");
                    goto gt_Error_Folder;
                }

                string[] filepaths = Directory.GetFileSystemEntries(folderpath);
                foreach (string filepath in filepaths)
                {
                    if (Directory.Exists(filepath))
                    {
                        //System.Console.WriteLine("dir=[" + filepath + "]");
                        this.SearchLua(result, filepath, log_Reports);
                    }
                    else
                    {
                        Match m1 = this.Regex.Match(filepath);
                        if (m1.Success)
                        {
                            result.Add(filepath);
                            //System.Console.WriteLine("file=[" + filepath + "]");
                        }

                    }
                }
            }

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

                Log_TextIndented s = new Log_TextIndentedImpl();
                s.Append("存在するフォルダーを指定してください。");
                s.Append(Environment.NewLine);
                s.Append("  folderpath=[");
                s.Append(folderpath);
                s.Append("]");

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            gt_EndMethod:
            log_Method.EndMethod(log_Reports);
        }
Example #14
0
        //────────────────────────────────────────
        public XenonStyle Parse(string sText, Log_Reports log_Reports)
        {
            Log_Method pg_Method = new Log_MethodImpl(0);
            pg_Method.BeginMethod(Info_Operating.Name_Library, this, "Parse",log_Reports);

            XenonStyle o_Style = new XenonStyleImpl();

            string[] properties = sText.Split(';');

            foreach (string sProperty in properties)
            {
                string[] keyValue = sProperty.Split(':');

                if (2 <= keyValue.Length)
                {
                    if ("color" == keyValue[0].Trim().ToLower())
                    {
                        string sValue = keyValue[1].Trim().ToLower();

                        ColorResult colorResult = BuilderColor.Parse(keyValue[1].Trim().ToLower(), Color.Black, true);
                        if (colorResult.BNotFound)
                        {
                            // 該当がなければ

                            // #連続エラー処理
                            if (log_Reports.CanCreateReport)
                            {
                                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                                r.SetTitle("▲エラー4301!", pg_Method);
                                r.Message = "color属性に["+sValue+"]が指定されましたが、対応していない値です。";
                                log_Reports.EndCreateReport();
                            }
                        }
                        else
                        {
                            o_Style.ForeXenonColor = new XenonColorImpl();
                            o_Style.ForeXenonColor.Color = colorResult.Color;
                            o_Style.ForeXenonColor.Name_Color = sValue;
                        }
                    }
                    else
                    {
                        // 無視
                    }
                }
                else
                {
                    // エラー処理
                }
            }

            goto gt_EndMethod;
            //
            //
            gt_EndMethod:
            pg_Method.EndMethod(log_Reports);
            return o_Style;
        }
        //────────────────────────────────────────
        public override string P2b_GetStyleName(
            int nCurIx, CustomcontrolListbox cctLst, Log_Reports pg_Logging
            )
        {
            Log_Method pg_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);
            pg_Method.BeginMethod(Info_LayoutImpl.Name_Library, this, "P2_GetStyleAttrNames",pg_Logging);
            //
            //

            string sResult;

            // 行をセットしたので、取り出されるのも行です。
            // DataRowをセットしましたが、取り出されるのは DataRowViewになるようです。
            DataRowView row = (DataRowView)cctLst.Items[nCurIx];

            // スタイルのNAME値が入っている。
            Value_Humaninput valueH = Utility_Row.GetFieldvalue(
                NamesFld.S_EXPL_SS,
                row.Row,
                false,//該当なしも可
                pg_Logging,
                Info_LayoutImpl.Name_Library+":"+this.GetType().Name+"#P2_:リストボックスのEXPL-SS"
                );
            if (!pg_Logging.Successful)
            {
                // 既エラー。
                sResult = "";
                goto gt_EndMethod;
            }

            if (pg_Logging.Successful)
            {
                // 正常時

                if (null == valueH)
                {
                    sResult = "";
                }
                else
                {
                    sResult = ((Value_Humaninput)valueH).Text;
                }
            }
            else
            {
                sResult = "";
            }

            goto gt_EndMethod;

            //
            //
            //
            //
            gt_EndMethod:
            pg_Method.EndMethod(pg_Logging);
            return sResult;
        }
Example #16
0
        //────────────────────────────────────────

        /// <summary>
        /// イベント アクション リストを作成します。
        /// </summary>
        /// <param nFcName="eventName"></param>
        /// <param nFcName="nActionSuper"></param>
        /// <param nFcName="log_Reports"></param>
        public Functionlist CreateFunctionlist(
            ConfigurationtreeToExpression_Event sToE_Event,
            MemoryApplication owner_MemoryApplication,
            Log_Reports log_Reports
            )
        {
            Log_Method pg_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);
            pg_Method.BeginMethod(Info_Controls.Name_Library, this, "CreateFunctionlist",log_Reports);
            //
            //
            Functionlist fw_Result = null;

            //.WriteLine(this.GetType().Name + "#CreateEventActionList: <構築>【開始】 イベントに対応ついたアクションリストを追加します。 (ウィンドウ)");

            switch (sToE_Event.Name)
            {
                case NamesSe.S_LOAD:
                    {
                        //
                        // このコントロールの「アプリケーション起動時」。
                        //
                        //  (NActionPerformEnum.O_EA)
                        //

                        //
                        // 無視します。
                        //
                    }
                    break;

                default:
                    goto gt_Error_NotSupportedEvent;
            }

            goto gt_EndMethod;
        //
        //
            #region 異常系
        //────────────────────────────────────────
        gt_Error_NotSupportedEvent:
            {
                Builder_TexttemplateP1p tmpl = new Builder_TexttemplateP1pImpl();
                tmpl.SetParameter(1, this.GetType().Name, log_Reports);//クラス名
                tmpl.SetParameter(2, sToE_Event.Name, log_Reports);//イベント名
                tmpl.SetParameter(3, Log_RecordReportsImpl.ToText_Configuration(sToE_Event.Configurationtree_Event), log_Reports);//設定位置パンくずリスト

                this.ControlCommon.Owner_MemoryApplication.CreateErrorReport("Er:515;", tmpl, log_Reports);
            }
            goto gt_EndMethod;
        //────────────────────────────────────────
            #endregion
        //
        //
        gt_EndMethod:
            pg_Method.EndMethod(log_Reports);
            return fw_Result;
        }
        //────────────────────────────────────────
        /// <summary>
        /// ユーザー定義プログラムの実行。
        /// </summary>
        /// <param name="hits"></param>
        /// <param name="log_Reports"></param>
        /// <returns></returns>
        public override string Execute4_OnExpressionString(
            EnumHitcount hits,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);
            log_Method.BeginMethod(Info_Expr.Name_Library, this, "Execute4_OnExpressionString",log_Reports);
            //
            //

            //
            // 子<a-●●>要素の実行。

            //
            // 全部真なら真、1つでも偽なら偽。
            bool bResult = true;
            {
                List<Expression_Node_String> ecList_Child = this.List_Expression_Child.SelectList(//Nv_Elem
                    EnumHitcount.Unconstraint,
                    log_Reports
                    );

                // ★★★★★★★★★ここが遅い? 42項目あると、42個全部調べることになります。
                //ystem.Console.WriteLine(this.GetType().Name + "#GetString: 全部真か? childNList.Count=[" + childNList.Count + "]");

                foreach (Expression_Node_String ec_11 in ecList_Child)
                {
                    Expressionv_Elem99 ecv_Elem = (Expressionv_Elem99)ec_11;
                    ecv_Elem.SetDataRow(this.DataRow);
                    string str = ecv_Elem.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports);

                    // ★★★★★★★★★ここが遅い? 42項目あると、42個全部調べることになります。
                    //ystem.Console.WriteLine(this.GetType().Name + "#GetString: str=[" + str + "]");

                    bool bChild;
                    if (Boolean.TryParse(str, out bChild))
                    {
                        if (!bChild)
                        {
                            bResult = false;
                            goto loop_end;
                        }

                    }
                }
            loop_end:
                ;//空文
            }

            //
            //
            //
            //
            log_Method.EndMethod(log_Reports);
            return bResult.ToString();
        }
Example #18
0
        //────────────────────────────────────────
        /// <summary>
        /// tool-saveファイルへの絶対パスを取得します。
        /// 取得できなかった場合、空文字列を返します。
        /// </summary>
        /// <returns></returns>
        public string GetFilepathabsolute(
            string sFpath,
            bool bRequired,
            Log_Reports pg_Logging
            )
        {
            Log_Method pg_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);
            pg_Method.BeginMethod(Info_Toolwindow.Name_Library, this, "GetFilepathabsolute", pg_Logging);

            string sFpatha_xml;

            if (pg_Logging.Successful)
            {
                // 正常時

                // ツールの設定のファイルパス
                Configurationtree_Node parent_Cf = new Configurationtree_NodeImpl("!ハードコーディング_Flow0010#GetFileAbsPath", null);

                Configurationtree_NodeFilepath cf_Fpath = new Configurationtree_NodeFilepathImpl("ファイルパス出典未指定L09TcDlg_1", parent_Cf);
                cf_Fpath.InitPath(
                    sFpath,
                    pg_Logging
                    );
                if (!pg_Logging.Successful)
                {
                    // 既エラー。
                    sFpatha_xml = "";
                    goto gt_EndMethod;
                }

                Expression_Node_Filepath ec_Fpath = new Expression_Node_FilepathImpl(cf_Fpath);
                sFpatha_xml = ec_Fpath.Execute4_OnExpressionString(
                    EnumHitcount.Unconstraint, pg_Logging);
                if (!pg_Logging.Successful)
                {
                    // 既エラー。
                    sFpatha_xml = "";
                    goto gt_EndMethod;
                }
            }
            else
            {
                // 既エラー。
                sFpatha_xml = "";
                goto gt_EndMethod;
            }

            goto gt_EndMethod;
            //
            //
            gt_EndMethod:
            pg_Method.EndMethod(pg_Logging);
            return sFpatha_xml;
        }
        //────────────────────────────────────────
        /// <summary>
        /// アクション実行。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public override string Execute5_Main(Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);
            log_Method.BeginMethod(Info_Functions.Name_Library, this, "Execute5_Main",log_Reports);

            //
            //

            if (this.EnumEventhandler == EnumEventhandler.O_Lr)
            {
                if (this.Functionparameterset.Sender is Customcontrol)
                {
                    Customcontrol ccFc = (Customcontrol)this.Functionparameterset.Sender;

                    string sName_Usercontrol = ccFc.ControlCommon.Expression_Name_Control.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports);

                    log_Reports.Comment_EventCreationMe = "[" + sName_Usercontrol + "]コントロールが、NAction27を実行。";
                }
                else
                {
                    log_Reports.Comment_EventCreationMe = "NAction27を実行。";
                }

                this.Execute6_Sub(log_Reports);
            }
            else if (this.EnumEventhandler == EnumEventhandler.O_Ea)
            {
                if (this.Functionparameterset.Sender is Customcontrol)
                {
                    Customcontrol ccFc = (Customcontrol)this.Functionparameterset.Sender;

                    string sName_Usercontrol = ccFc.ControlCommon.Expression_Name_Control.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports);

                    log_Reports.Comment_EventCreationMe = "[" + sName_Usercontrol + "]コントロールが、NAction27を実行。";
                }
                else
                {
                    log_Reports.Comment_EventCreationMe = "NAction27を実行。";
                }

                if (log_Reports.Successful)
                {
                    this.Execute6_Sub(
                        log_Reports
                        );
                }
            }

            //
            //
            log_Method.EndMethod(log_Reports);
            return "";
        }
Example #20
0
        //────────────────────────────────────────
        /// <summary>
        /// new された直後の内容に戻します。
        /// </summary>
        public void Clear( string sName, Configurationtree_Node parent_Conf_OrNull, Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0);
            log_Method.BeginMethod(Info_Syntax.Name_Library, this, "Clear", log_Reports);

            //
            //
            //
            // 親
            //
            //
            //
            this.Parent = parent_Conf_OrNull;

            //
            //
            //
            // 自
            //
            //
            //
            this.Name = sName;

            //
            //
            //
            // 属性
            //
            //
            //
            this.Dictionary_Attribute.Clear( this, log_Reports);

            //
            //
            //
            // 子
            //
            //
            //
            this.list_Child.Clear(log_Reports);

            //
            //
            //
            // 親への連結は維持。
            //
            //
            //

            //
            //
            log_Method.EndMethod(log_Reports);
        }
        //────────────────────────────────────────
        /// <summary>
        /// 実行。
        /// 
        /// 全てのコントロールの、指定のイベントを実行します。
        /// 
        /// アプリケーション起動時に、"OnLoad"を全て実行するなど。
        /// 
        /// 別の関数から呼び出されます。
        /// </summary>
        /// <param name="oEventName"></param>
        /// <param name="oEventName"></param>
        /// <param name="log_Reports"></param>
        public void Execute1_AllUsercontrols(
            List<string> sFcNameList,
            object sender,
            XenonName o_Name_Event,
            MemoryApplication owner_MemoryApplication,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);
            log_Method.BeginMethod(Info_Functions.Name_Library, this, "Execute1_AllUsercontrols", log_Reports);
            //
            //
            Configurationtree_Node cf_ThisMethod = new Configurationtree_NodeImpl(log_Method.Fullname, null);

            foreach (string sName_Usercontrol in sFcNameList)
            {
                if ("" == sName_Usercontrol)
                {
                    // 空行。飛ばす。
                    goto end_row;
                }

                Expression_Leaf_StringImpl ec_FcName = new Expression_Leaf_StringImpl(null, cf_ThisMethod);
                ec_FcName.SetString( sName_Usercontrol, log_Reports);

                List<Usercontrol> list_UcFc = owner_MemoryApplication.MemoryForms.GetUsercontrolsByName(ec_FcName, true, log_Reports);
                if (list_UcFc.Count < 1)
                {
                    // 正常。
                    // 特に設定をすることのないコントロールは、XMLファイルが用意されていない。
                    // 無視する。
                }
                else
                {
                    Usercontrol ucFc = list_UcFc[0];

                    this.Execute1_UsercontrolImpl(
                        sender,
                        ucFc,
                        o_Name_Event,
                        owner_MemoryApplication,
                        log_Reports
                        );
                }

            end_row:
                ;
            }

            //
            //
            log_Method.EndMethod(log_Reports);
        }
        //────────────────────────────────────────
        /// <summary>
        /// パスはルートかどうか。
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public static bool IsRooted_Path(
            string filepath,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0);
            log_Method.BeginMethod(Info_Syntax.Name_Library, "Utility_Configurationtree_Filepath", "IsRooted_Path", log_Reports);
            //
            //
            bool bPathRooted;

            Exception err_Excp;
            try
            {
                // 「絶対パス」か、「相対パス」かを判断します。
                bPathRooted = System.IO.Path.IsPathRooted(filepath);
            }
            catch (ArgumentException e)
            {
                // エラー
                err_Excp = e;
                goto gt_Error_MissInput;
            }

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

                StringBuilder sb = new StringBuilder();
                sb.Append("エラー 入力パス=[" + filepath + "]:(" + err_Excp.GetType().Name + ") ");
                sb.Append(err_Excp.Message);

                r.Message = sb.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
            //
            gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return bPathRooted;
        }
        //────────────────────────────────────────
        /// <summary>
        /// アクション実行。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public override string Execute5_Main(Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0);
            log_Method.BeginMethod(Info_Functions.Name_Library, this, "Execute5_Main", log_Reports);

            if (log_Method.CanWarning())
            {
                log_Method.WriteWarning_ToConsole(" ▲▲▲▲▲オーバーライド実装してください。");
            }

            log_Method.EndMethod(log_Reports);
            return "";
        }
        //────────────────────────────────────────
        /// <summary>
        /// 実行。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="eventMonitor"></param>
        /// <param name="log_Reports"></param>
        public override string Execute5_Main(Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);
            log_Method.BeginMethod(Info_Functions.Name_Library, this, "Execute5_Main", log_Reports);

            string sFncName0;
            this.TrySelectAttribute(out sFncName0, PmNames.S_NAME.Name_Pm, EnumHitcount.One_Or_Zero, log_Reports);

            if (log_Reports.CanStopwatch)
            {
                log_Method.Log_Stopwatch.Message = "「E■[" + sFncName0 + "]アクション」実行(A)";
                log_Method.Log_Stopwatch.Begin();
            }

            if (this.Functionparameterset.Sender is Customcontrol)
            {
                Customcontrol ccFc = (Customcontrol)this.Functionparameterset.Sender;

                string sName_Usercontrol = ccFc.ControlCommon.Expression_Name_Control.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports);

                log_Reports.Comment_EventCreationMe = "/追記:[" + sName_Usercontrol + "]コントロールが、[" + sFncName0 + "]アクションを実行。";
            }
            else
            {
                log_Reports.Comment_EventCreationMe = "/追記:[" + sFncName0 + "]アクションを実行。";
            }

            //
            //
            //
            //

            if (this.EnumEventhandler == EnumEventhandler.O_Lr)
            {
                this.Execute6_Sub(log_Reports);
            }
            else if (this.EnumEventhandler == EnumEventhandler.O_Ea)
            {
                this.Execute6_Sub(log_Reports);
            }
            else
            {
            }

            //
            // デバッグ
            //

            log_Method.EndMethod(log_Reports);
            return "";
        }
        //────────────────────────────────────────
        public override string Execute5_Main(
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);
            log_Method.BeginMethod(Info_Expr.Name_Library, this, "Execute5_Main", log_Reports);
            //
            //
            string sResult;

            //
            List<Usercontrol> ucList_Fc = this.Owner_MemoryApplication.MemoryForms.GetUsercontrolsByName(this.Expression_UsercontrolName, true, log_Reports);
            if (log_Reports.Successful)
            {
                if (1 != ucList_Fc.Count)
                {
                    // TODO:エラー
                    sResult = "";
                    goto gt_Error_No1Hit;
                }

                Usercontrol ucFc = ucList_Fc[0];
                sResult = ucFc.UsercontrolText;
            }
            else
            {
                // エラー
                sResult = "";
            }

            goto gt_EndMethod;
            //
            //
            #region 異常系
            //────────────────────────────────────────
            gt_Error_No1Hit:
            {
                Builder_TexttemplateP1p tmpl = new Builder_TexttemplateP1pImpl();
                tmpl.SetParameter(1, this.Expression_UsercontrolName.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports), log_Reports);//コントロールの値

                this.Owner_MemoryApplication.CreateErrorReport("Er:6041;", tmpl, log_Reports);
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
            //
            gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return sResult;
        }
        //────────────────────────────────────────
        /// <summary>
        /// Exe_2ActionImpl#SToFc で使用。
        /// </summary>
        /// <param name="s_Action"></param>
        /// <param name="bRequired"></param>
        /// <param name="log_Reports"></param>
        /// <returns></returns>
        public Expression_Node_Function Translate(
            Configurationtree_Node action_Conf,
            bool bRequired,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0);
            log_Method.BeginMethod(Info_Functions.Name_Library, this, "Translate",log_Reports);
            //
            //

            string sName_Fnc;
            if (action_Conf.Dictionary_Attribute.ContainsKey(PmNames.S_NAME.Name_Pm))
            {
                action_Conf.Dictionary_Attribute.TryGetValue(PmNames.S_NAME, out sName_Fnc, true, log_Reports);
            }
            else
            {
                sName_Fnc = "<エラー:" + log_Method.Fullname + ">";
            }

            Expression_Node_Function expr_Func = Collection_Function.NewFunction2( sName_Fnc,
                null, action_Conf, this.Owner_MemoryApplication, log_Reports);

            if (log_Reports.Successful)
            {
                if (null != expr_Func)
                {
                    Log_TextIndented_ConfigurationtreeToExpressionImpl pg_ParsingLog = new Log_TextIndented_ConfigurationtreeToExpressionImpl();
                    pg_ParsingLog.BEnabled = false;
                    expr_Func = ((Expression_Node_FunctionAbstract)expr_Func).Functiontranslatoritem.Translate(
                        sName_Fnc,
                        action_Conf,//これは生成時に指定できない?
                        pg_ParsingLog,
                        this.Owner_MemoryApplication,
                        log_Reports
                        );
                    if (Log_ReportsImpl.BDebugmode_Static && pg_ParsingLog.BEnabled)
                    {
                        log_Method.WriteInfo_ToConsole(" pg_ParsingLog=" + Environment.NewLine + pg_ParsingLog.ToString());
                    }
                }
            }

            goto gt_EndMethod;
            //
            gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return expr_Func;
        }
Example #27
0
        //────────────────────────────────────────
        /// <summary>
        /// レコードセットの追加。
        /// </summary>
        /// <param name="eName"></param>
        /// <param name="recordSet"></param>
        /// <param name="log_Reports"></param>
        public void Add(
            Expression_Node_String ec_Name, RecordSet recordSet,
            MemoryApplication memoryApplication,
            Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);
            log_Method.BeginMethod(Info_Expr.Name_Library, this, "Add",log_Reports);
            //
            //

            string sName = ec_Name.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports).Trim();

            try
            {
                this.dictionary_Recordset.Add(sName, recordSet);

                //// debug: 追加したレコードセットの内容。
                //{
                //    ystem.Console.WriteLine(Info_N.LibraryName + ":" + this.GetType().Name + "#Add: 追加したレコードセットの内容"+
                //        " fld=["+oRecordSet.NField.E_Execute(EnumHitcount.Unconstraint, log_Reports)+"]" +
                //        " lookup-value=["+oRecordSet.NLookupValue.E_Execute(EnumHitcount.Unconstraint, log_Reports)+"]" +
                //        " required=[" + oRecordSet.NRequired.E_Execute(EnumHitcount.Unconstraint, log_Reports) + "]" +
                //        " from=[" + oRecordSet.NFrom.E_Execute(EnumHitcount.Unconstraint, log_Reports) + "]" +
                //        " description=[" + oRecordSet.NDescription.E_Execute(EnumHitcount.Unconstraint, log_Reports) + "]" +
                //        " Storage=[" + oRecordSet.NStorage.E_Execute(EnumHitcount.Unconstraint, log_Reports) + "]"
                //        );

                //}
            }
            catch (ArgumentException ex)
            {
                //return;

                {
                    Builder_TexttemplateP1p tmpl = new Builder_TexttemplateP1pImpl();
                    tmpl.SetParameter(1, sName, log_Reports);//名前
                    tmpl.SetParameter(2, Log_RecordReportsImpl.ToText_Configuration(ec_Name.Cur_Configuration), log_Reports);//設定位置パンくずリスト
                    tmpl.SetParameter(3, Log_RecordReportsImpl.ToText_Exception(ex), log_Reports);//例外メッセージ

                    memoryApplication.CreateErrorReport("Er:6042;", tmpl, log_Reports);
                }
            }

            //
            //
            //
            //

            log_Method.EndMethod(log_Reports);
        }
Example #28
0
        //────────────────────────────────────────
        /// <summary>
        /// 一時記憶から、レコードセット取得。
        /// </summary>
        /// <param name="RecordSetLoadFrom"></param>
        /// <param name="s_ParentNode"></param>
        /// <param name="log_Reports"></param>
        /// <returns>該当がなければヌル。</returns>
        public RecordSet P1_Load(
            Expression_Node_String ec_RecordSetLoadFrom,//Where
            Configuration_Node parent_Conf,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);
            log_Method.BeginMethod(Info_Expr.Name_Library, this, "P1_Load",log_Reports);
            //
            //

            //
            // レコードセットを求めます。
            RecordSet recordSet;

            if (null != ec_RecordSetLoadFrom)
            {
                string sRecordSetLoadFrom = ec_RecordSetLoadFrom.Execute4_OnExpressionString(EnumHitcount.Unconstraint, log_Reports).Trim();

                if ("" != sRecordSetLoadFrom)
                {
                    //
                    // レコードセットを取得。
                    recordSet = this.Owner_MemoryApplication.MemoryRecordset.RecordsetStorage.Get(
                        ec_RecordSetLoadFrom,
                        this.Owner_MemoryApplication,
                        log_Reports);
                }
                else
                {
                    recordSet = null;
                }

            }
            else
            {
                recordSet = null;
            }

            goto gt_EndMethod;

            //
            //
            //
            //
            gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return recordSet;
        }
Example #29
0
        //────────────────────────────────────────
        /// <summary>
        /// コンストラクター。
        /// </summary>
        public ControlCommonImpl()
        {
            Log_Method log_Method = new Log_MethodImpl();
            Log_Reports log_Reports_ThisMethod = new Log_ReportsImpl(log_Method);
            log_Method.BeginMethod(Info_Controls.Name_Library, this, "ControlCommonImpl", log_Reports_ThisMethod);

            // コントロールを作った時に、必ずnameプロパティを設定してください。
            // ただし、直接 Visual Studio のビジュアルエディターで配置した場合は設定できません。
            Configurationtree_Node cur_Cf = new Configurationtree_NodeImpl(log_Method.Fullname+"<init>", null);

            this.configurationtree_Control = new Configurationtree_NodeImpl(NamesNode.S_CONTROL1, cur_Cf);//ダミーのデフォルト・オブジェクト?
            this.expression_Name_Control = new Expression_Node_StringImpl(null, cur_Cf);

            log_Method.EndMethod(log_Reports_ThisMethod);
            log_Reports_ThisMethod.EndLogging(log_Method);
        }
        //────────────────────────────────────────
        protected override void LinkToParent(
            Configurationtree_Node cur_Cf, Configurationtree_Node parent_Cf, MemoryApplication memoryApplication, Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);
            log_Method.BeginMethod(Info_XmlToConf.Name_Library, this, "LinkToParent", log_Reports);

            Usercontrol uct = null;
            if (log_Reports.Successful)
            {
                Configuration_Node cf_Control = cur_Cf.GetParentByNodename(
                    NamesNode.S_CONTROL1, EnumConfiguration.Tree, true, log_Reports);

                if (log_Reports.Successful)
                {
                    uct = Utility_XmlToConfigurationtree_NodeImpl.GetUsercontrol(
                        (Configurationtree_Node)cf_Control, memoryApplication, log_Reports);
                }
            }

            uct.ControlCommon.Configurationtree_Control.List_Child.Add(cur_Cf, log_Reports);
            goto gt_EndMethod;
            //
            #region 異常系
            //────────────────────────────────────────
            gt_Error_UndefinedClass:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("▲エラー386!", log_Method);

                StringBuilder s = new StringBuilder();
                s.Append("なんらかのエラー。");
                s.Append(Environment.NewLine);

                // ヒント

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

        /// <summary>
        /// ノードを、リストのindexで指定して、取得します。
        /// 該当がなければヌルを返します。
        /// </summary>
        /// <param select="index">リストのインデックス</param>
        /// <param select="bRequired">該当するデータがない場合、エラー</param>
        /// <param select="log_Reports">警告メッセージ</param>
        /// <returns></returns>
        public Configurationtree_Node GetNodeByIndex(
            int nIndex,
            bool bRequired,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl();

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

            Configurationtree_Node gcav_FoundItem;

            if (0 <= nIndex && nIndex < this.list_Configurationtree_Node.Count)
            {
                gcav_FoundItem = this.list_Configurationtree_Node[nIndex];
            }
            else
            {
                gcav_FoundItem = null;

                if (bRequired)
                {
                    // エラーとして扱います。
                    goto gt_Error_BadIndex;
                }
            }

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

                StringBuilder sb = new StringBuilder();
                sb.Append("指定されたノードは存在しませんでした。");
                sb.Append(Environment.NewLine);
                sb.Append(Environment.NewLine);
                sb.Append("リストのインデックス=[");
                sb.Append(nIndex);
                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(gcav_FoundItem);
        }
Example #32
0
        /// <summary>
        /// 空白は、無いのと同じに扱う。
        /// </summary>
        /// <param name="name"></param>
        /// <param name="result"></param>
        /// <param name="isRequired"></param>
        /// <param name="log_Reports"></param>
        /// <returns></returns>
        public bool TryGetValue(
            PmName name,//Pmオブジェクトにしたい。
            out string result,
            bool isRequired,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl();

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


            bool bHit = this.map.TryGetValue(name.Pm, out result);

            if (!bHit || "" == result)
            {
                if (isRequired)
                {
                    goto gt_Error_NoHit;
                }
            }

            goto gt_EndMethod;
            //
            //
            #region 異常系
            //────────────────────────────────────────
gt_Error_NoHit:
            if (log_Reports.CanCreateReport)
            {
                Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                r.SetTitle("Er:004;", log_Method);

                Log_TextIndented s = new Log_TextIndentedImpl();


                s.Append("name=\"");
                s.Append(name.Plain);
                s.Append("\" 属性か、または <arg name=\"");
                s.Append(name.Pm);
                s.Append("\" ~> 要素のどちらかが必要でしたが、違う方を書いたか、記述されていないか、空文字列でした。");
                s.Newline();
                s.Newline();

                if (null != this.owner)
                {
                    //ヒント
                    s.Append(r.Message_Conf(this.owner));
                }
                else
                {
                    s.Append("どの要素かは不明。");
                    s.Newline();
                }

                // ヒント

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



        #region アクション
        //────────────────────────────────────────

        /// <summary>
        /// フォルダー絶対パスを指定すると、そのフォルダーパスを切り落とした文字列を返します。
        ///
        /// 違うフォルダーだった場合、失敗します。
        ///
        /// 先頭がディレクトリー区切り文字にならないようにして結果を返します。
        /// </summary>
        /// <param name="folerpath"></param>
        public void TryCutFolderpath(
            out string out_Filepath_New,
            Expr_Filepath folderpath,
            bool isRequired,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0);

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

            //まず、自分の絶対パス
            string my = this.Lv4Execute_OnImplement(EnumHitcount.Unconstraint, log_Reports);
            //if(log_Method.CanDebug(1))
            //{
            //    log_Method.WriteDebug_ToConsole("my=[" + my + "]");
            //}

            //指定されたフォルダーの絶対パス
            string you = folderpath.Lv4Execute_OnImplement(EnumHitcount.Unconstraint, log_Reports);

            //if (log_Method.CanDebug(1))
            //{
            //    log_Method.WriteDebug_ToConsole("you=[" + you + "]");
            //}

            //if (log_Method.CanDebug(1))
            //{
            //    log_Method.WriteDebug_ToConsole("my.StartsWith(you)=[" + my.StartsWith(you) + "]");
            //}

            if (my.StartsWith(you))
            {
                out_Filepath_New = my.Substring(you.Length);
                //if (log_Method.CanDebug(1))
                //{
                //    log_Method.WriteDebug_ToConsole("you.Length=[" + you.Length + "]");
                //    log_Method.WriteDebug_ToConsole("filepath_New1=[" + filepath_New1 + "]");
                //    log_Method.WriteDebug_ToConsole("filepath_New1.StartsWith(System.IO.Path.DirectorySeparatorChar.ToString())=[" + filepath_New1.StartsWith(System.IO.Path.DirectorySeparatorChar.ToString()) + "]");
                //    if (filepath_New1.StartsWith(System.IO.Path.DirectorySeparatorChar.ToString()))
                //    {
                //        log_Method.WriteDebug_ToConsole("filepath_New1=[" + filepath_New1.Substring(1) + "]");
                //    }
                //}

                // 先頭がディレクトリー区切り文字だった場合、それを切り捨てます。
                if (out_Filepath_New.StartsWith(System.IO.Path.DirectorySeparatorChar.ToString()))
                {
                    out_Filepath_New = out_Filepath_New.Substring(1);
                }

                //Conf_Filepath filepath_Conf_New = new Conf_FilepathImpl(log_Method.Fullname, null);
                //filepath_Conf_New.I nitPath(filepath_New1, log_Reports);
                //out_Filepath_ExprNew = new Expression_Node_FilepathImpl(filepath_Conf_New);
            }
            else
            {
                //失敗
                out_Filepath_New = "";

                if (isRequired)
                {
                    // エラー。
                    goto gt_Error_Failure;
                }
            }

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

                Log_TextIndented s = new Log_TextIndentedImpl();
                s.Append("ファイルパスの加工に失敗しました。\n");
                s.Append("[" + my + "]の頭から、フォルダー[" + you + "]を切りぬこうとしましたが、フォルダーが違いました。");


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

        /// <summary>
        /// 絶対パスを取得します。
        ///
        /// 未設定の場合は、空文字列を返します。
        ///
        /// ・ファイルパスとして利用できない文字や、予約語が含まれていると例外を投げます。
        /// ・絶対パスの文字列の長さが、ファイルシステムで使える制限を越えると例外を投げます。
        ///
        /// 設定されたパスが相対パスだった場合に、ベース・パスが設定されていなければ、
        /// 起動「.exe」のあったパスが頭に付く。
        /// </summary>
        /// <returns></returns>
        public override string Lv4Execute_OnImplement(
            EnumHitcount request,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl();

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

            // 絶対パスにして返します。

            string sFpath;

            if (this.Conf is Conf_Filepath)
            {
                Conf_Filepath cf_Fpath = (Conf_Filepath)this.Conf;

                bool bCheckPathTooLong = false;

                if (log_Reports.Successful)
                {
                    sFpath = Util_Filepath.ToAbsolute(
                        this.Directory_Base,
                        cf_Fpath.GetHumaninput(), //this.SHumanInput相当
                        ref bCheckPathTooLong,    //ファイル名の長さチェックは、もう済んでいるものとして、行いません。
                        false,                    //ファイル名の長さが上限超過ならエラー
                        log_Reports,              //out sErrorMsg,
                        this.Conf
                        );
                }
                else
                {
                    sFpath = "";
                }
            }
            else
            {
                // エラー。
                sFpath = "";
                if (log_Reports.CanCreateReport)
                {
                    Log_RecordReports r = log_Reports.BeginCreateReport(EnumReport.Error);
                    r.SetTitle("▲エラー901!", log_Method);

                    Log_TextIndented s = new Log_TextIndentedImpl();
                    s.Append(Environment.NewLine);
                    s.Append("#GetSAbsoluteFilePath:型が違います。[" + this.Conf.GetType().Name + "]");

                    r.Message = s.ToString();
                    log_Reports.EndCreateReport();
                }
            }

            goto gt_EndMethod;
            //
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return(sFpath);
        }
Example #35
0
        //────────────────────────────────────────

        /// <summary>
        /// 「ディレクトリー」と「入力値」の2つを入力すると、「絶対パス」を返します。
        ///
        /// ──────────
        ///
        /// 未設定の場合は、空文字列を返します。
        /// ※bug:フォルダーパスの場合も空文字列になる??
        ///
        /// ・ファイルパスとして利用できない文字や、予約語が含まれていると例外を投げます。
        /// ・絶対パスの文字列の長さが、ファイルシステムで使える制限を越えると例外を投げます。
        ///
        /// もし、設定されたパスが相対パスだった場合に、ベース・パスが設定されていなければ、
        /// 起動「.exe」のあったパスが頭に付く。
        /// </summary>
        /// <param name="baseDirectory"></param>
        /// <param name="humanInputText"></param>
        /// <param name="flagCheckPathTooLong">絶対パスの文字列の長さが、ファイルシステムで使える上限を超えていた場合に真、そうでない場合 偽にセットされます。</param>
        /// <param name="okPathTooLong">絶対パスの文字列の長さが、ファイルシステムで使える上限を超えていた場合に、「正常扱いにするなら」真、「エラー扱いにするなら」偽。</param>
        /// <param name="cur_Conf">デバッグ用情報。人間オペレーターが修正するべき箇所などの情報。</param>
        /// <returns></returns>
        public static string ToAbsolute(
            string directory_Base,
            string humaninput,
            ref bool isTooLong,
            bool isSafe_TooLong,
            Log_Reports log_Reports,
            Conf_String cur_Conf
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0);

            log_Method.BeginMethod(Info_Syntax.Name_Library, "Util_Filepath", "ToAbsolute②", log_Reports);
            //
            //

            //
            // 修正履歴(2009-12-02)
            //
            // ・カレント・ディレクトリの移動を使ったコードを書いてはいけない。
            //   MS-DOSの名残り?
            //
            // ・起動「.exe」のディレクトリは Application.StartupPath で取得できる。
            //
            // ・備考:
            // System.IO.Directory.GetCurrentDirectory()は、
            // 「プロセスが開始されたディレクトリ」を返すので、
            // openFileDialogで開いたディレクトリを返すこともある。
            //
            // System.IO.Path.GetFullPath(path)も同じ。

            Exception err_Excp;

            string result_Filepath;//ファイルパス

            // フラグのクリアー。
            isTooLong = false;

            //
            // 人間がCSVファイルに記述しているファイル・パス。
            //
            // 「絶対パス」「相対パス」のどちらでも指定されます。
            //
            string filepath_Source = humaninput.Trim();

            if ("" == filepath_Source)
            {
                // 未設定の場合。
                result_Filepath = "";//ファイルパスとしては使えない文字列。
                goto gt_EndMethod;
            }

            // 「絶対パス」か、「相対パス」かを判断します。
            bool isRooted_Path = Util_Filepath.IsRooted(
                filepath_Source,
                log_Reports
                );

            if (!log_Reports.Successful)
            {
                // 既エラー。
                result_Filepath = "";//ファイルパスとしては使えない文字列。
                goto gt_EndMethod;
            }

            if (!isRooted_Path)
            {
                // 相対パスの場合

                // 「相対パス」に「ベース・ディレクトリー文字列」を連結して、「絶対パス」に変換します。

                if ("" != directory_Base)
                {
                    // 相対パスの相対元となるディレクトリーが設定されていれば。

                    if (!directory_Base.EndsWith(Path.DirectorySeparatorChar.ToString()))
                    {
                        filepath_Source = directory_Base + Path.DirectorySeparatorChar + filepath_Source;
                    }
                    else
                    {
                        filepath_Source = directory_Base + filepath_Source;
                    }
                }
                else
                {
                    // 起動「.exe」のあったパスを、相対の元となるディレクトリーとします。

                    if (!directory_Base.EndsWith(Path.DirectorySeparatorChar.ToString()))
                    {
                        filepath_Source = Application.StartupPath + Path.DirectorySeparatorChar + filepath_Source;
                    }
                    else
                    {
                        filepath_Source = Application.StartupPath + filepath_Source;
                    }
                }
            }

            // ここで、パスは 絶対パスに変換されています。

            try
            {
                // カレントディレクトリは使わない。

                // 絶対パスの場合、GetFullPathを通す必要はないが、
                // ファイルパスに使えない文字列を判定するために、
                // 例外を返すメソッドを使っています。
                result_Filepath = System.IO.Path.GetFullPath(filepath_Source);
            }
            catch (ArgumentException e)
            {
                // 指定のファイルパスに「*」など、ファイルパスとして使えない文字列が含まれていた場合など。

                result_Filepath = "";//ファイルパスとしては使えない文字列。

                err_Excp = e;
                goto gt_Error_ArgumentException;
            }
            catch (PathTooLongException e)
            {
                // ディレクトリーの文字数が、制限数を超えた場合などのエラー。

                result_Filepath = "";//ファイルパスとしては使えない文字列。

                if (isSafe_TooLong)
                {
                    // 正常処理扱いとします。
                }
                else
                {
                    // 異常扱いとします。

                    err_Excp = e;
                    goto gt_Error_PathTooLongException;
                }


                isTooLong = true;
            }
            catch (NotSupportedException e)
            {
                //パスのフォーマットが間違っているなどのエラー。
                result_Filepath = "";//ファイルパスとしては使えない文字列。
                err_Excp        = e;
                goto gt_Error_NotSupportedException;
            }
            catch (Exception e)
            {
                // それ以外のエラー。
                result_Filepath = "";//ファイルパスとしては使えない文字列。
                err_Excp        = e;
                goto gt_Error_Exception;
            }

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

                Log_TextIndented s = new Log_TextIndentedImpl();
                s.Append(Environment.NewLine);
                s.Append("使えないファイルパスです。[");
                s.Append(filepath_Source);
                s.Append("] :");

                s.Append(err_Excp.Message);
                cur_Conf.ToText_Locationbreadcrumbs(s);

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

                Log_TextIndented s = new Log_TextIndentedImpl();
                s.Append(Environment.NewLine);
                s.Append("エラー 入力パス=[" + filepath_Source + "]:(" + err_Excp.GetType().Name + ") ");

                s.Append(err_Excp.Message);
                cur_Conf.ToText_Locationbreadcrumbs(s);

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

                Log_TextIndented s = new Log_TextIndentedImpl();
                s.Append(Environment.NewLine);
                s.Append("ファイルパスが間違っているかもしれません。");
                s.Newline();
                s.AppendI(1, "入力パス=[" + filepath_Source + "]");
                s.Newline();

                // ヒント
                s.Append(r.Message_SException(err_Excp));
                cur_Conf.ToText_Locationbreadcrumbs(s);

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

                Log_TextIndented s = new Log_TextIndentedImpl();
                s.Append(Environment.NewLine);
                s.Append("エラー 入力パス=[" + filepath_Source + "]");
                s.Newline();

                // ヒント
                s.Append(r.Message_SException(err_Excp));
                cur_Conf.ToText_Locationbreadcrumbs(s);

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

        /// <summary>
        /// 警告が出ていれば、そのテキスト。
        /// </summary>
        /// <returns></returns>
        public string ToText(string sGroupTag)
        {
            Log_Method  log_Method             = new Log_MethodImpl(0);
            Log_Reports log_Reports_ThisMethod = new Log_ReportsImpl(log_Method);

            log_Method.BeginMethod(Info_Syntax.Name_Library, this, "ToText", log_Reports_ThisMethod);

            Log_TextIndented s = new Log_TextIndentedImpl();



            s.Append("ログ出力:");
            s.Newline();

            int nErrorCount = 0;


            List <Log_RecordReports> listCopy = new List <Log_RecordReports>(this.list_Record);

            foreach (Log_RecordReports log_RecordReport in listCopy)//todo:bug:ここで リストが変更されているときに例外を出してしまう。
            {
                // グループ・タグが指定されていれば、
                // グループ・タグが一致するメッセージだけを出力します。

                if (log_RecordReport.EnumReport == EnumReport.Error)
                {
                    if ("" == sGroupTag || sGroupTag == log_RecordReport.Tag_Group)
                    {
                        s.Append("(No.");
                        s.Append(nErrorCount);
                        s.Append(") ");

                        // タイトル
                        s.Append(log_RecordReport.ErrorSymbol);

                        if ("" != log_RecordReport.Tag_Group)
                        {
                            // グループ・タグ
                            s.Append(log_RecordReport.Tag_Group);
                        }

                        s.Newline();
                        s.Newline();

                        if ("" != log_RecordReport.Logstack)
                        {
                            s.Append("エラー発生元データの推測ヒント:");
                            s.Append(log_RecordReport.Logstack);
                            s.Newline();
                            s.Newline();
                        }

                        s.Append(log_RecordReport.GetMessage(this));
                        s.Newline();
                        s.Newline();

                        if ("" != log_RecordReport.Logstack)
                        {
                            s.Append("プログラム実行経路推測ヒント:");
                            s.Append(this.Log_Callstack.ToString());
                            s.Newline();
                            s.Newline();
                        }

                        s.Newline();
                        s.Newline();

                        // エラーが発生したメソッド。
                        s.Append(log_RecordReport.FullnameMethod);

                        s.Newline();
                    }

                    // カウンターは、読み飛ばしたエラーもきちんとカウント。
                    nErrorCount++;
                }
            }

            {
                s.Append(Log_RecordReportsImpl.ToText_Separator());
            }

            {
                if ("" != this.Comment_EventCreationMe)
                {
                    s.Append("ロガーの作成に関するコメント:");
                    s.Append(this.Comment_EventCreationMe);
                    s.Newline();
                }
            }

            {
                if (null != this.log_Method_CreationMe)
                {
                    s.Append("ロガー生成場所:");
                    s.Append(this.Log_Method_CreationMe.Fullname);
                    s.Newline();
                }
                else
                {
                    s.Append("ロガー生成場所:ヌル");
                    s.Newline();
                }
            }

            {
                s.Append("このエラーメッセージを作っているロガー:");
                s.Append(log_Method.Fullname);
                s.Newline();
            }

            if (!Log_ReportsImpl.BDebugmode_Static)
            {
                s.Newline();
                s.Newline();
                s.Append("このデバッグ情報は、DebugModeフラグが立っていない状態でのものです。");
                s.Newline();
                s.Append("DDebuggerImpl.DebugModeフラグを立てると、今より詳細な情報が出力されるかもしれません。");
                s.Newline();
            }


            log_Method.EndMethod(log_Reports_ThisMethod);
            log_Reports_ThisMethod.EndLogging(log_Method);
            return(s.ToString());
        }
Example #37
0
        /// <summary>
        /// 直近の1件の子要素を返します。
        /// 該当がなければヌルを返します。
        /// </summary>
        /// <param name="projectName"></param>
        /// <param name="isRequired">該当がない場合にエラー扱いにするなら真</param>
        /// <returns></returns>
        public Conf_String GetFirstChildByAttr(
            PmName expectedName,
            string sExpectedValue,
            bool isRequired,
            Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);

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

            Conf_String cResult = null;

            if (log_Reports.Successful)
            {
                bool isHit = false;

                this.ChildNodes.ForEach(delegate(Conf_String item2, ref bool isBreak2)
                {
                    string value;
                    item2.Attributes.TryGetValue(expectedName, out value, false, log_Reports);

                    if (value == sExpectedValue)
                    {
                        isHit    = true;
                        cResult  = item2;
                        isBreak2 = true;
                    }
                });

                if (!isHit)
                {
                    cResult = null;

                    if (isRequired)
                    {
                        // エラーとして扱います。
                        goto gt_Error_NotFound;
                    }
                }
            }

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

                StringBuilder s = new StringBuilder();
                s.Append("指定された要素は存在しませんでした。");
                s.Append(Environment.NewLine);
                s.Append(Environment.NewLine);

                s.Append("指定属性=[");
                s.Append(expectedName.Pm);
                s.Append("]");
                s.Append(Environment.NewLine);

                s.Append("指定値=[");
                s.Append(sExpectedValue);
                s.Append("]");
                s.Append(Environment.NewLine);

                //s.Append("┌──────────┐");
                //this.ChildNodes.ForEach(delegate(Conf_String item2, ref bool isBreak2)
                //{
                //    string value;
                //    item2.Attributes.TryGetValue(expectedName, out value, false, log_Reports);

                //    if (value == sExpectedValue)
                //    {
                //        isHit = true;
                //        cResult = item2;
                //        isBreak2 = true;
                //    }
                //});
                //s.Append("└──────────┘");

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

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

        public Expression_Node_String Compile(
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl();

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

            String sTxtTmpl = this.Text;



            Configurationtree_Node     parent_Cnf = new Configurationtree_NodeImpl("!ハードコーディング_TextTemplateImpl#Compile", null);
            Expression_Node_StringImpl result     = new Expression_Node_StringImpl(null, parent_Cnf);

            int nCur = 0;

            while (nCur < sTxtTmpl.Length)
            {
                int nPreCur = nCur;

                // 開き%記号(open percent)
                int nOp = sTxtTmpl.IndexOf('%', nCur);

                if (nOp != -1)
                {
                    // 開き%記号があった。

                    nCur = nOp + 1;//「開き%」の次へ。

                    // 閉じ%記号(close percent)
                    int cp = sTxtTmpl.IndexOf('%', nCur);

                    if (cp != -1)
                    {
                        // 閉じ%記号があれば。

                        nCur = cp + 1;//「閉じ%」の次へ。

                        // 「%」と「%」の間に数字があるはず。
                        // 「開き%」の次から、「閉じ% - 開き% - 1」文字分。(-1しないと、終了%を含んでしまう)
                        string sMarker = sTxtTmpl.Substring(nOp + 1, cp - nOp - 1);


                        // 「%1%」といった記号の数字部分。
                        int nParameterIndex;


                        try
                        {
                            nParameterIndex = Int32.Parse(sMarker);


                            // 開き「%」までを、まず文字列化。
                            int    nPreLen = nOp - nPreCur;
                            string sPre    = sTxtTmpl.Substring(nPreCur, nPreLen);
                            result.AppendTextNode(
                                sPre,
                                parent_Cnf,
                                log_Reports
                                );



                            // 引数から値を取得。

                            // %数字%を、Expression化して追加。
                            Expression_TexttemplateP1pImpl expr_P1p = new Expression_TexttemplateP1pImpl(null, parent_Cnf);
                            expr_P1p.NumberP1p      = nParameterIndex;
                            expr_P1p.Dictionary_P1p = this.Dictionary_NumberAndValue_Parameter;

                            result.List_Expression_Child.Add(
                                expr_P1p,
                                log_Reports
                                );

                            // 続行。
                        }
                        catch (Exception)
                        {
                            // 数字でないようなら。

                            // 今回の判定は失敗したものとして、残りの長さ全て
                            int nRestLen = sTxtTmpl.Length - nPreCur;

                            result.AppendTextNode(
                                sTxtTmpl.Substring(nPreCur, nRestLen),
                                parent_Cnf,
                                log_Reports
                                );


                            nCur = sTxtTmpl.Length;//終了(最後の文字の次へカーソルを出す)
                        }
                    }
                    else
                    {
                        // 閉じ%がなければ。

                        // 今回の判定は失敗したものとして、残りの長さ全て
                        int nRestLen = sTxtTmpl.Length - nPreCur;

                        result.AppendTextNode(
                            sTxtTmpl.Substring(nPreCur, nRestLen),
                            parent_Cnf,
                            log_Reports
                            );

                        nCur = sTxtTmpl.Length;//終了(最後の文字の次へカーソルを出す)
                    }
                }
                else
                {
                    // 開き%がなければ。

                    // 残りの長さ全て
                    int nRestLen = sTxtTmpl.Length - nCur;

                    result.AppendTextNode(
                        sTxtTmpl.Substring(nCur, nRestLen),
                        parent_Cnf,
                        log_Reports
                        );

                    nCur = sTxtTmpl.Length;//終了(最後の文字の次へカーソルを出す)
                }
            }


            //
            //
            log_Method.EndMethod(log_Reports);
            return(result);
        }
Example #39
0
        //────────────────────────────────────────

        /// <summary>
        /// 使えません。
        /// </summary>
        /// <param name="sName"></param>
        /// <param name="sExpectedValue"></param>
        /// <param name="request"></param>
        /// <param name="log_Reports"></param>
        /// <returns></returns>
        public List <Expression_Node_String> SelectDirectchildByNodename(
            string sExpectedNodeName, bool bRemove, EnumHitcount request, Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0);

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

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

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

                if (result.Count != 1)
                {
                    goto gt_errorNotOne;
                }
            }
            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_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);
        }
Example #40
0
        //────────────────────────────────────────

        /// <summary>
        /// ノード名を指定して、直近の親ノードを取得したい。
        /// </summary>
        /// <param name="sName"></param>
        /// <param name="enumConf">「Configuration_Node」「Configurationtree_Node」のいずれか。</param>
        /// <param name="bRequired">偽を指定した時は、不一致の時ヌルを返す。</param>
        /// <param name="log_Reports"></param>
        /// <returns></returns>
        public virtual Configuration_Node GetParentByNodename(
            string sName, EnumConfiguration enumConf, bool bRequired, Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);

            log_Method.BeginMethod(Info_Syntax.Name_Library, this, "GetParentByNodename", log_Reports);
            //
            //
            Configuration_Node result;

            Configuration_Node err_Parent_Conf;

            if (log_Reports.Successful)
            {
                if (null != this.Parent)
                {
                    // 親要素があるとき

                    if (sName == this.Parent.Name)
                    {
                        // ノード名が一致
                        result = this.Parent;
                    }
                    else
                    {
                        // ノード名が一致しないとき
                        result = this.Parent.GetParentByNodename(sName, enumConf, bRequired, log_Reports);
                    }
                }
                else
                {
                    // 親要素がないとき

                    result          = null;
                    err_Parent_Conf = null;
                    goto gt_Error_NotFoundParent;
                }
            }
            else
            {
                // 既にエラーが出ているとき

                result = null;
            }

            if (enumConf == EnumConfiguration.Tree)
            {
                if (!(result is Configurationtree_Node))
                {
                    //エラー
                    goto gt_Error_AnotherClass;
                }
            }
            else if (enumConf == EnumConfiguration.Unknown)
            {
                if (!(result is Configuration_Node))
                {
                    //エラー
                    goto gt_Error_AnotherClass;
                }
            }
            else
            {
                //エラー
                goto gt_Error_UnsupportedConfigurationType;
            }

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

                    Log_TextIndented s = new Log_TextIndentedImpl();
                    s.Append("親要素の取得に失敗しました。");
                    s.Newline();


                    s.Append("指定ノード名[");
                    s.Append(sName);
                    s.Append("]");
                    s.Newline();

                    s.Append("親要素はヌルです。");
                    s.Newline();

                    if (null != err_Parent_Conf)
                    {
                        s.Append("親要素ノード名[");
                        s.Append(err_Parent_Conf.Name);
                        s.Append("]");
                        s.Newline();
                    }

                    // ヒント
                    s.Append(r.Message_Configuration(this));

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

                    Log_TextIndented s = new Log_TextIndentedImpl();
                    s.Append("(内部プログラム・エラー)取得した親要素は、指定のクラスとは異なりました。");
                    s.Newline();

                    s.Append("指定コンフィグ形[");
                    s.Append(enumConf);
                    s.Append("]");
                    s.Newline();

                    s.Append("取得した親要素のクラス名[");
                    s.Append(result.GetType().Name);
                    s.Append("]");
                    s.Newline();

                    // ヒント
                    s.Append(r.Message_Configuration(this));

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

                    Log_TextIndented s = new Log_TextIndentedImpl();
                    s.Append("(内部プログラム・エラー)コンフィグ・クラスの指定に対応できませんでした。");
                    s.Newline();

                    s.Append("指定コンフィグ形[");
                    s.Append(enumConf);
                    s.Append("]");
                    s.Newline();

                    //s.Append("取得した親要素のクラス名[");
                    //s.Append(result.GetType().Name);
                    //s.Append("]");
                    //s.Newline();

                    // ヒント
                    s.Append(r.Message_Configuration(this));

                    r.Message = s.ToString();
                    log_Reports.EndCreateReport();
                }
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return(result);
        }
Example #41
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="e_Result">検索結果。</param>
        /// <param name="name_Attribute"></param>
        /// <param name="bRequired"></param>
        /// <param name="hits"></param>
        /// <param name="log_Reports"></param>
        /// <returns>検索結果が1件以上あれば真。</returns>
        public bool TrySelect_ExpressionFilepath(
            out Expression_Node_Filepath out_Fliepath_Expr,
            string name_Attribute,
            EnumHitcount hits,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl();

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


            string value;
            bool   isResult = this.TrySelect(out value, name_Attribute, hits, log_Reports);


            Configurationtree_NodeFilepath filepath_Conf = new Configurationtree_NodeFilepathImpl(log_Method.Fullname, null);

            filepath_Conf.InitPath(value, log_Reports);

            out_Fliepath_Expr = new Expression_Node_FilepathImpl(filepath_Conf);

            //switch (hits)
            //{
            //    case EnumHitcount.One:
            //        {
            //            if (!isResult)
            //            {
            //                //エラー
            //                goto gt_Error_NotFoundOne;
            //            }
            //        }
            //        break;
            //    //todo:他の制約も。
            //}

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

            //        StringBuilder s = new StringBuilder();
            //        s.Append("必ず、1件を取得する指定でしたが、1件も存在しませんでした。キー=[");
            //        s.Append(name_Attribute);
            //        s.Append("]");

            //        // ヒント

            //        r.Message = s.ToString();
            //        log_Reports.EndCreateReport();
            //    }
            //    goto gt_EndMethod;
            ////────────────────────────────────────────
            //    #endregion
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return(isResult);
        }
Example #42
0
        public bool TrySelect(
            out string out_Result,
            string name,
            EnumHitcount hits,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0);

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

            bool isResult;
            Expression_Node_String string_Expr;

            bool isSuccessful = this.TrySelect(out string_Expr, name, hits, log_Reports);

            if (isSuccessful)
            {
                out_Result = string_Expr.Execute4_OnExpressionString(hits, log_Reports);
                isResult   = true;
            }
            else
            {
                out_Result = "";
                isResult   = false;
            }

            //switch (hits)
            //{
            //    case EnumHitcount.One:
            //        {
            //            if (!isResult)
            //            {
            //                //エラー
            //                goto gt_Error_NotFoundOne;
            //            }
            //        }
            //        break;
            //    //todo:他の制約も。
            //}

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

            //        StringBuilder s = new StringBuilder();
            //        s.Append("必ず、1件を取得する指定でしたが、1件も存在しませんでした。キー=[");
            //        s.Append(name);
            //        s.Append("]");

            //        // ヒント

            //        r.Message = s.ToString();
            //        log_Reports.EndCreateReport();
            //    }
            //    goto gt_EndMethod;
            ////────────────────────────────────────────
            //    #endregion
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return(isResult);
        }
Example #43
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 Expression_Node_String out_Result_Expr,
            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.dicExpression_Item.ContainsKey(name))
            {
                // ヒット。
                out_Result_Expr = this.dicExpression_Item[name];
                isHit           = true;
            }
            else
            {
                // 一致なし。
                isHit = false;

                if (Utility_Hitcount.IsError_IfNoHit(hits, log_Reports))
                {
                    //エラーにする。
                    out_Result_Expr = null;
                    goto gt_Error_NotFoundOne;
                }
                else
                {
                    // 該当しないキーを指定され、値を取得できなかったが、エラー報告しない。
                    Configurationtree_Node parent_Conf = new Configurationtree_NodeImpl("!ハードコーディング_NStringDictionaryImpl#Get", null);
                    out_Result_Expr = new Expression_Leaf_StringImpl(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.dicExpression_Item.Count);
                s.Append("])");
                s.Newline();
                foreach (string sKey in this.dicExpression_Item.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.dicExpression_Item.Count)
                {
                    foreach (Expression_Node_String e_Item in this.dicExpression_Item.Values)
                    {
                        Expression_Node_String e_Parent = e_Item.Parent_Expression;
                        if (null != e_Parent)//親要素が設定されていないことがある。
                        {
                            // 最初の1個。
                            s.Append("◆最初の要素の親の情報。");
                            s.Newline();
                            e_Parent.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);
        }
Example #44
0
        //────────────────────────────────────────
        #endregion



        #region アクション
        //────────────────────────────────────────

        /// <summary>
        /// attr系要素の追加。
        ///
        /// 既に追加されている要素は、追加できない。
        /// </summary>
        public void Add(
            string key,
            string value,
            Conf_String cValue,
            bool isRequired,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl(0);

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

            //
            //

            if (!this.map.ContainsKey(key))
            {
                this.map.Add(key, value);
            }
            else
            {
                if (isRequired)
                {
                    // エラー
                    goto gt_Error_Duplicate;
                }
            }

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

                Log_TextIndented s = new Log_TextIndentedImpl();

                s.Append("要素<");
                s.Append(this.owner.Name);
                s.Append(">に、同じ名前の属性が重複していました。");
                s.Newline();

                s.Append("入れようとした要素の名前=[");
                s.Append(key);
                s.Append("]");
                s.Newline();

                // ヒント
                s.Append(r.Message_Conf(cValue));

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
        }
Example #45
0
        /// <summary>
        /// ヒットした件数がなかったとき、エラーになるか否か。
        /// </summary>
        /// <param name="hits"></param>
        /// <param name="log_Reports"></param>
        /// <returns></returns>
        public static bool IsError_IfNoHit(EnumHitcount hits, Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0);

            log_Method.BeginMethod(Info_Syntax.Name_Library, "Utility_Hitcount", "IsError_IfNoHit", log_Reports);

            bool result;

            switch (hits)
            {
            case EnumHitcount.Exists:
                result = true;    //エラーになる。
                break;

            case EnumHitcount.First_Exist:
                result = true;    //エラーになる。
                break;

            case EnumHitcount.First_Exist_Or_Zero:
                result = false;    //セーフ。
                break;

            case EnumHitcount.One:
                result = true;    //エラーになる。
                break;

            case EnumHitcount.One_Or_Zero:
                result = false;    //セーフ。
                break;

            case EnumHitcount.Unconstraint:
                result = false;    //セーフ。
                break;

            default:
                //エラー
                result = true;    //意味が変わるが、エラーにする。
                goto gt_Error_Default;
            }

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

                    Log_TextIndented t = new Log_TextIndentedImpl();
                    t.Append("Enum型の対応していない値[");
                    t.Append(hits.ToString());
                    t.Append("]");
                    t.Newline();

                    r.Message = t.ToString();
                    log_Reports.EndCreateReport();
                }
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return(result);
        }
Example #46
0
        /// <summary>
        /// 登録されている「%1%」、「%2%」といった記号の数字を一覧します。
        /// リストに「1」、「2」といった数字に置き換えて返します。
        /// </summary>
        /// <returns></returns>
        public List <int> ExistsP1pNumbers(
            Dictionary_Expression_Node_String ecDic_Attr,
            Log_Reports log_Reports
            )
        {
            Log_Method log_Method = new Log_MethodImpl();

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

            //
            //
            //
            //

            List <int> list = new List <int>();


            Dictionary <string, Expression_Node_String> .KeyCollection ecDic_Key = ecDic_Attr.Keys(log_Reports);

            foreach (string sKey in ecDic_Key)
            {
                //
                //
                //
                // p1p,p2p,p3p...といった名前かどうかを判定。
                //
                //
                //
                int nParamNameMatchedCount = 0;
                int nP1pNumber             = 0;
                {
                    //正規表現
                    System.Text.RegularExpressions.Regex regexp =
                        new System.Text.RegularExpressions.Regex(
                            @"p([0-9])+p",
                            //                            @"p[0-9]+p",
                            System.Text.RegularExpressions.RegexOptions.IgnoreCase
                            );

                    //文字列検索を1回する。
                    System.Text.RegularExpressions.Match match = regexp.Match(sKey);

                    while (match.Success)
                    {
                        nParamNameMatchedCount++;

                        bool parsedSuccessful = int.TryParse(match.Groups[1].Value, out nP1pNumber);

                        match = match.NextMatch();
                    }
                }

                if (1 == nParamNameMatchedCount)
                {
                    //
                    //
                    //
                    // p1p,p2p,p3p...といった名前。
                    //
                    //
                    //
                    list.Add(nP1pNumber);
                }
                else
                {
                }
            }


            //
            //
            log_Method.EndMethod(log_Reports);
            return(list);
        }
Example #47
0
        //────────────────────────────────────────

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

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

            //
            //

            StringBuilder sb_Result = new StringBuilder();

            List <Expression_Node_String> ecList_Child = this.List_Expression_Child.SelectList(EnumHitcount.Unconstraint, log_Reports);

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

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

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

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

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

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

                foreach (Expression_Node_String ec_Child in ecList_Child)
                {
                    string s1 = ec_Child.Execute4_OnExpressionString(this.enumHitcount, log_Reports);

                    sb_Result.Append(s1);
                }
            }
            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());
        }
Example #48
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 <Expression_Node_String> SelectItemByNodeName(
            List <Expression_Node_String> listExpression, 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 <Expression_Node_String> result = new List <Expression_Node_String>();


            for (int nI = 0; nI < listExpression.Count; nI++)
            {
                Expression_Node_String ec_Item = listExpression[nI];

                if (log_Reports.Successful)
                {
                    if (ec_Item.Cur_Configuration.Name == sName_ExpectedNode)
                    {
                        result.Add(ec_Item);

                        if (bRemove)
                        {
                            // 削除を要求します。
                            listExpression.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);
        }
Example #49
0
        //────────────────────────────────────────

        /// <summary>
        /// ノード名を指定して、直近の子ノードを取得したい。
        /// </summary>
        /// <param name="sName"></param>
        /// <param name="bRequired">偽を指定した時は、要素数0のリストを返す。</param>
        /// <param name="log_Reports"></param>
        /// <returns></returns>
        public List <Configurationtree_Node> GetChildrenByNodename(string sName, bool bRequired, Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);

            log_Method.BeginMethod(Info_Syntax.Name_Library, this, "GetChildrenByNodename", log_Reports);
            //
            //
            List <Configurationtree_Node> result = new List <Configurationtree_Node>();

            if (log_Reports.Successful)
            {
                this.list_Child.ForEach(delegate(Configurationtree_Node child_Conf, ref bool bBreak)
                {
                    if (sName == child_Conf.Name)
                    {
                        // ノード名が一致
                        result.Add(child_Conf);
                    }
                    else
                    {
                        // ノード名が一致しないとき
                    }
                });
            }
            else
            {
                // 既にエラーが出ているとき
                goto gt_EndMethod;
            }

            if (result.Count < 1 && bRequired)
            {
                if (bRequired)
                {
                    goto gt_Error_EmptyHitChild;
                }
            }

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

                Log_TextIndented s = new Log_TextIndentedImpl();
                s.Append("該当した子要素がありませんでした。");
                s.Newline();


                s.Append("指定ノード名[");
                s.Append(sName);
                s.Append("]");
                s.Newline();

                // ヒント
                s.Append(r.Message_Configuration(this));

                r.Message = s.ToString();
                log_Reports.EndCreateReport();
            }
            goto gt_EndMethod;
            //────────────────────────────────────────
            #endregion
            //
            //
gt_EndMethod:
            log_Method.EndMethod(log_Reports);
            return(result);
        }
Example #50
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 List <Expression_Node_String> SelectDirectchildByNodename(
            string sExpectedNodeName, bool bRemove, EnumHitcount request, Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0);

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

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

            this.List_Expression_Child.ForEach(delegate(Expression_Node_String ec_Child, ref bool bRemove2, ref bool bBreak2)
            {
                if (log_Reports.Successful)
                {
                    if (ec_Child.Cur_Configuration.Name == sExpectedNodeName)
                    {
                        result.Add(ec_Child);

                        if (bRemove)
                        {
                            // 削除要求1があるとき、削除要求2を出します。
                            bRemove2 = true;
                        }


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

            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);
        }
Example #51
0
        //────────────────────────────────────────

        /// <summary>
        /// ノード名を指定して、直近の親ノードを取得したい。
        /// </summary>
        /// <param name="name"></param>
        /// <param name="isRequired">偽を指定した時は、不一致の時ヌルを返す。</param>
        /// <param name="log_Reports"></param>
        /// <returns></returns>
        public virtual Conf_String GetParentByName(
            string name, bool isRequired, Log_Reports log_Reports)
        {
            Log_Method log_Method = new Log_MethodImpl(0, Log_ReportsImpl.BDebugmode_Static);

            log_Method.BeginMethod(Info_Syntax.Name_Library, this, "GetParentByNodename", log_Reports);
            //
            //
            Conf_String result;

            Conf_String err_cParent;

            if (log_Reports.Successful)
            {
                if (null != this.Parent)
                {
                    // 親要素があるとき

                    if (name == this.Parent.Name)
                    {
                        // ノード名が一致
                        result = this.Parent;
                    }
                    else
                    {
                        // ノード名が一致しないとき
                        result = this.Parent.GetParentByName(name, isRequired, log_Reports);
                    }
                }
                else
                {
                    // 親要素がないとき

                    result      = null;
                    err_cParent = null;
                    goto gt_Error_NotFoundParent;
                }
            }
            else
            {
                // 既にエラーが出ているとき

                result = null;
            }

            if (!(result is Conf_String))
            {
                //エラー
                goto gt_Error_AnotherClass;
            }

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

                    Log_TextIndented s = new Log_TextIndentedImpl();
                    s.Append("親要素の取得に失敗しました。");
                    s.Newline();


                    s.Append("指定ノード名[");
                    s.Append(name);
                    s.Append("]");
                    s.Newline();

                    s.Append("親要素はヌルです。");
                    s.Newline();

                    if (null != err_cParent)
                    {
                        s.Append("親要素ノード名[");
                        s.Append(err_cParent.Name);
                        s.Append("]");
                        s.Newline();
                    }

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

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

                    Log_TextIndented s = new Log_TextIndentedImpl();
                    s.Append("(内部プログラム・エラー)取得した親要素は、指定のクラスとは異なりました。");
                    s.Newline();

                    s.Append("取得した親要素のクラス名[");
                    s.Append(result.GetType().Name);
                    s.Append("]");
                    s.Newline();

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

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