public ScenarioFindReplaceResultsForm(FindReplaceScriptEditor find_replaceScriptEditor) { InitializeComponent(); this.find_replaceScriptEditor = find_replaceScriptEditor; this.SelectRecordCondition = find_replaceScriptEditor.SelectRecordCondition; this.SelectFieldCondition = find_replaceScriptEditor.SelectFieldCondition; this.SelectSubfieldCondition = find_replaceScriptEditor.SelectSubfieldCondition; this.FindTextStr = find_replaceScriptEditor.FindTextString; this.ReplaceTextStr = find_replaceScriptEditor.ReplaceTextString; workMode = (WorkMode)find_replaceScriptEditor.activeTabIndex; templateMode = (TemplateMode)find_replaceScriptEditor.cmbTemplateType.SelectedIndex; applyActions = new StringCollection(); applyActions.Add("ПОДТВЕРДИТЬ"); applyActions.Add("ОТМЕНИТЬ"); applyActionsToAll = new StringCollection(); applyActionsToAll.Add("ПОДТВЕРДИТЬ ВСЕ"); applyActionsToAll.Add("ОТМЕНИТЬ ВСЕ"); ScriptEngine = new EcmaScriptComponent(); RemObjectUtils.ExposeAssembly(ScriptEngine, typeof(ManagedClient.ManagedClient64).Assembly); ScriptEngine.Globals.SetVariable("client", find_replaceScriptEditor.client); ScriptEngine.Globals.SetVariable("curDatabase", find_replaceScriptEditor.curDatabase); }
private void PerformSearch() { SelectRecordEmpty = String.IsNullOrWhiteSpace(SelectRecordCondition); SelectFieldEmpty = String.IsNullOrWhiteSpace(SelectFieldCondition); SelectSubfieldEmpty = String.IsNullOrWhiteSpace(SelectSubfieldCondition); find_replaceScriptEditor.SearchScriptResultList = new List <SearchScriptResult>(); IrbisRecord Record; MatchCollection searchMatches; List <MyMatch> searchMatchesList; RecordField[] fields; int fieldOcc; String fieldText, fieldTextProtected; int index0, index1, index2; String[] RecordStr = new string[] { "Record" }; String[] FieldStr = new string[] { "Field" }; String[] SubFieldStr = new string[] { "Subfield" }; RegexOptions regexMatchCase = find_replaceScriptEditor.chkMatchCase.Checked ? RegexOptions.IgnoreCase : RegexOptions.None; int index = 0; StringBuilder templateProlog = new StringBuilder(); if (templateMode == TemplateMode.T4) { templateProlog.AppendLine("<#@ template language=\"C#\" #>"); templateProlog.AppendLine("<#@ assembly name=\"System.Core.dll\" #>"); templateProlog.AppendLine("<#@ import namespace=\"System.Collections.Generic\" #>"); templateProlog.AppendLine("<#@ assembly name=\"$(ProjectDir)$(OutDir)ManagedClient.dll\" #>"); templateProlog.AppendLine("<#@ import namespace=\"ManagedClient\" #>"); templateProlog.AppendLine("<#@ parameter type=\"ManagedClient64\" name=\"client\" #>"); } else { templateProlog.AppendLine("@using ManagedClient"); templateProlog.AppendLine("@using IrbisRecordsProcessing"); templateProlog.AppendLine("@{ String EoL = Environment.NewLine; }"); } ScriptEngine.Globals.SetVariable("client", find_replaceScriptEditor.client); ScriptEngine.Globals.SetVariable("curDatabase", find_replaceScriptEditor.curDatabase); StringBuilder templatePrologStr; if (workMode == WorkMode.Script) { RemObjectUtils.ScriptRun(ScriptEngine, find_replaceScriptEditor.PrologScriptCode); } else if (workMode == WorkMode.Template) { if (templateMode == TemplateMode.T4) { Utils.AppendGeneratedT4Template(find_replaceScriptEditor.PrologTemplate.Text, templateProlog, ref templateStringBuilder, find_replaceScriptEditor.client); } else { Utils.AppendGeneratedRazorTemplate(find_replaceScriptEditor.PrologTemplate.Text, templateProlog, ref templateStringBuilder, new { client = find_replaceScriptEditor.client }); } } int[] mfnRange = find_replaceScriptEditor.recordsData.MfnList; foreach (int mfn in mfnRange) { if (backgroundWorker.CancellationPending) { cancelled = true; break; } Record = find_replaceScriptEditor.client.ReadRecord(mfn); backgroundWorker.ReportProgress((int)(((float)mfn / find_replaceScriptEditor.curDatabase.Length) * 100)); if (workMode == WorkMode.Template) { templatePrologStr = new StringBuilder(); templatePrologStr.Append(templateProlog); if (templateMode == TemplateMode.T4) { templatePrologStr.Append(templateProlog).AppendLine("<#@ parameter type=\"IrbisRecord\" name=\"record\" #>"); Utils.AppendGeneratedT4Template(find_replaceScriptEditor.WorkingTemplate.Text, templatePrologStr, ref templateStringBuilder, find_replaceScriptEditor.client, Record); } else { Utils.AppendGeneratedRazorTemplate(find_replaceScriptEditor.WorkingTemplate.Text, templatePrologStr, ref templateStringBuilder, new { client = find_replaceScriptEditor.client, record = Record }); } continue; } if (SelectRecordEmpty || RemObjectUtils.ScriptEval(ScriptEngine, SelectRecordCondition, RecordStr, Record)) { if (workMode == WorkMode.Script) { RemObjectUtils.ScriptRun(ScriptEngine, find_replaceScriptEditor.PrologRecordScriptCode, RecordStr, Record); if (String.IsNullOrWhiteSpace(find_replaceScriptEditor.SubfieldScriptCode) && String.IsNullOrWhiteSpace(find_replaceScriptEditor.SubfieldScriptCode)) { RemObjectUtils.ScriptRun(ScriptEngine, find_replaceScriptEditor.EpilogRecordScriptCode); continue; } } foreach (RecordField Field in Record.Fields) { searchMatchesList = new List <MyMatch>(); fieldText = Field.ToText(); fieldTextProtected = Regex.Replace(fieldText, "\\^\\S", " "); if (SelectFieldEmpty || RemObjectUtils.ScriptEval(ScriptEngine, SelectFieldCondition, FieldStr, Field)) { if (workMode == WorkMode.Script) { RemObjectUtils.ScriptRun(ScriptEngine, find_replaceScriptEditor.FieldScriptCode, FieldStr, Field); if (String.IsNullOrWhiteSpace(find_replaceScriptEditor.SubfieldScriptCode)) { continue; } } if (SelectSubfieldEmpty && workMode != WorkMode.Script) { searchMatches = Regex.Matches(fieldText, FindTextStr, regexMatchCase); foreach (Match nextMatch in searchMatches) { MyMatch newMatch = new MyMatch(); newMatch.Value = nextMatch.Value; newMatch.Index = nextMatch.Index; searchMatchesList.Add(newMatch); } } else { foreach (SubField Subfield in Field.SubFields) { if (SelectSubfieldEmpty || RemObjectUtils.ScriptEval(ScriptEngine, SelectSubfieldCondition, SubFieldStr, Subfield)) { if (workMode == WorkMode.Script) { RemObjectUtils.ScriptRun(ScriptEngine, find_replaceScriptEditor.SubfieldScriptCode, SubFieldStr, Subfield); continue; } searchMatches = Regex.Matches(Subfield.Text, FindTextStr, regexMatchCase); foreach (Match nextMatch in searchMatches) { MyMatch newMatch = new MyMatch(); newMatch.Value = nextMatch.Value; newMatch.Index = nextMatch.Index + fieldText.IndexOf("^" + Subfield.Code) + 2; searchMatchesList.Add(newMatch); } } } } if (workMode == WorkMode.Script) { continue; } foreach (MyMatch nextMatch in searchMatchesList) { SearchScriptResult searchScriptResult = new SearchScriptResult(); searchScriptResult.foundStr = nextMatch.Value; searchScriptResult.index = nextMatch.Index; searchScriptResult.mfn = mfn; index0 = searchScriptResult.index; if (index0 > 0) { index1 = fieldTextProtected.LastIndexOf(" ", index0 - 1); } else { index1 = 0; } if (index1 == -1) { index1 = 0; } index0 += searchScriptResult.foundStr.Length; if (index0 < fieldTextProtected.Length - 1) { index2 = fieldTextProtected.IndexOf(" ", index0); } else { index2 = -1; } if (index2 == -1) { index2 = fieldTextProtected.Length; } if (index1 > 0) { searchScriptResult.contextStr = fieldTextProtected.Substring(index1 + 1, index2 - index1 - 1); } else { searchScriptResult.contextStr = fieldTextProtected.Substring(0, index2); } index++; if (find_replaceScriptEditor.activeTabIndex != 0) { searchScriptResult.replaceToStr = Regex.Replace(nextMatch.Value, FindTextStr, ReplaceTextStr, regexMatchCase); searchScriptResult.contextModStr = Regex.Replace(searchScriptResult.contextStr, FindTextStr, ReplaceTextStr, regexMatchCase); searchScriptResult.fieldTag = Field.Tag; fields = Record.Fields.GetField(Field.Tag); for (fieldOcc = 0; fieldOcc < fields.Length; fieldOcc++) { if (fields[fieldOcc] == Field) { break; } } searchScriptResult.fieldOcc = fieldOcc; find_replaceScriptEditor.SearchScriptResultList.Add(searchScriptResult); if (!backgroundWorker.CancellationPending) { this.Invoke((MethodInvoker) delegate { AdvStringGrid.BeginUpdate(); AdvStringGrid.RowCount = index; AdvStringGrid[index, 1].Text = searchScriptResult.foundStr; AdvStringGrid[index, 2].Text = searchScriptResult.replaceToStr; AdvStringGrid[index, 3].Text = searchScriptResult.contextStr; AdvStringGrid[index, 4].Text = searchScriptResult.contextModStr; AdvStringGrid[index, 5].CellType = GridCellTypeName.ComboBox; AdvStringGrid[index, 5].DataSource = applyActions; AdvStringGrid[index, 5].CellValue = applyActions[0]; AdvStringGrid.ScrollCellInView(GridRangeInfo.Row(index), GridScrollCurrentCellReason.Any); AdvStringGrid.EndUpdate(); }); } else { cancelled = true; break; } } else { find_replaceScriptEditor.SearchScriptResultList.Add(searchScriptResult); if (!backgroundWorker.CancellationPending) { this.Invoke((MethodInvoker) delegate { AdvStringGrid.BeginUpdate(); AdvStringGrid.RowCount = index; AdvStringGrid[index, 1].Text = searchScriptResult.foundStr; AdvStringGrid[index, 2].Text = searchScriptResult.contextStr; AdvStringGrid.ScrollCellInView(GridRangeInfo.Row(index), GridScrollCurrentCellReason.Any); AdvStringGrid.EndUpdate(); }); } else { cancelled = true; break; } } } } } } if (workMode == WorkMode.Script) { RemObjectUtils.ScriptRun(ScriptEngine, find_replaceScriptEditor.EpilogRecordScriptCode); } } if (workMode == WorkMode.Script) { RemObjectUtils.ScriptRun(ScriptEngine, find_replaceScriptEditor.EpilogScriptCode); } else if (workMode == WorkMode.Template) { if (templateMode == TemplateMode.T4) { Utils.AppendGeneratedT4Template(find_replaceScriptEditor.EpilogTemplate.Text, templateProlog, ref templateStringBuilder, find_replaceScriptEditor.client); } else { Utils.AppendGeneratedRazorTemplate(find_replaceScriptEditor.EpilogTemplate.Text, templateProlog, ref templateStringBuilder, new { client = find_replaceScriptEditor.client }); } } }