Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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 });
                }
            }
        }