//──────────────────────────────────────── /// <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()); } }
//──────────────────────────────────────── /// <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; }
//──────────────────────────────────────── /// <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); }
//──────────────────────────────────────── /// <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); }
//──────────────────────────────────────── /// <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); }
//──────────────────────────────────────── 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; }
//──────────────────────────────────────── /// <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(); }
//──────────────────────────────────────── /// <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 ""; }
//──────────────────────────────────────── /// <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; }
//──────────────────────────────────────── /// <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); }
//──────────────────────────────────────── /// <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; }
//──────────────────────────────────────── /// <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); }
//──────────────────────────────────────── /// <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); }
/// <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); }
//──────────────────────────────────────── #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); }
//──────────────────────────────────────── /// <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); }
//──────────────────────────────────────── /// <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); }
//──────────────────────────────────────── /// <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()); }
/// <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); }
//──────────────────────────────────────── 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); }
//──────────────────────────────────────── /// <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); }
//──────────────────────────────────────── /// <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); }
/// <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); }
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); }
//──────────────────────────────────────── /// <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); }
//──────────────────────────────────────── #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); }
/// <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); }
/// <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); }
//──────────────────────────────────────── 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()); }
//──────────────────────────────────────── /// <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); }
//──────────────────────────────────────── /// <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); }
//──────────────────────────────────────── /// <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); }
//──────────────────────────────────────── /// <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); }