/// <summary> /// Merge duplicate analyses on all wordforms. (Also merges duplicate WfiGlosses.) /// </summary> /// <returns></returns> public static void MergeDuplicateAnalyses(LcmCache cache, IProgress progressBar) { var wfiWordforms = cache.ServiceLocator.GetInstance <IWfiWordformRepository>().AllInstances().ToList(); progressBar.Minimum = 0; progressBar.Maximum = wfiWordforms.Count; progressBar.StepSize = 1; foreach (var wf in wfiWordforms) { progressBar.Step(1); var analyses = wf.AnalysesOC.ToList(); for (int i = 0; i < analyses.Count; i++) { var waKeep = analyses[i]; for (int j = analyses.Count - 1; j > i; j--) { var waDup = analyses[j]; if (DuplicateAnalyses(waKeep, waDup)) { foreach (var wg in waDup.MeaningsOC) { waKeep.MeaningsOC.Add(wg); } CmObject.ReplaceReferences(waDup, waKeep); waDup.Delete(); analyses.RemoveAt(j); } } MergeDuplicateGlosses(waKeep); } } }
private static void MergeDuplicateGlosses(IWfiAnalysis wa) { var glosses = wa.MeaningsOC.ToList(); for (int i = 0; i < glosses.Count; i++) { var wgKeep = glosses[i]; for (int j = glosses.Count - 1; j > i; j--) { var wgDup = glosses[j]; if (DuplicateGlosses(wgKeep, wgDup)) { CmObject.ReplaceReferences(wgDup, wgKeep); wgDup.Delete(); glosses.RemoveAt(j); } } } }