private List<IParaFragment> FindMatchingItems()
{
var result = new List<IParaFragment>();
var target = GetMatchObject();
if (target == null)
{
m_hvoMatch = 0;
HasLoadedMatches = false;
return result; // shouldn't happen... :)
}
int clid = target.ClassID;
var analyses = new HashSet<IAnalysis>();
switch (clid)
{
case WfiGlossTags.kClassId:
case WfiAnalysisTags.kClassId:
{
analyses.Add(m_cache.ServiceLocator.GetObject(m_hvoMatch) as IAnalysis);
return GetOccurrencesOfAnalyses(analyses);
}
case PartOfSpeechTags.kClassId:
{
foreach (var analysis in m_cache.ServiceLocator.GetInstance<IWfiAnalysisRepository>().AllInstances())
{
if (analysis.CategoryRA == target)
{
analyses.Add(analysis);
}
}
return GetOccurrencesOfAnalyses(analyses);
}
case LexEntryTags.kClassId:
{
foreach (var mb in m_cache.ServiceLocator.GetInstance<IWfiMorphBundleRepository>().AllInstances())
{
if (mb.MorphRA != null && mb.MorphRA.Owner == target)
{
analyses.Add(mb.Owner as IWfiAnalysis);
}
}
return GetOccurrencesOfAnalyses(analyses);
}
case LexSenseTags.kClassId:
{
foreach (var mb in m_cache.ServiceLocator.GetInstance<IWfiMorphBundleRepository>().AllInstances())
{
if (mb.SenseRA == target)
{
analyses.Add(mb.Owner as IWfiAnalysis);
}
}
return GetOccurrencesOfAnalyses(analyses);
}
case MoStemMsaTags.kClassId:
case MoInflAffMsaTags.kClassId:
case MoDerivAffMsaTags.kClassId:
case MoUnclassifiedAffixMsaTags.kClassId:
// In the interlinear texts analysis tab the user selects Concord On -> Lex Gram Info while right clicking on a
// morpheme.
// This code finds each Wordform with a morpheme bundle that matched the morpheme selected.
foreach (var mb in m_cache.ServiceLocator.GetInstance<IWfiMorphBundleRepository>().AllInstances())
{
if (mb.MsaRA != null && mb.MsaRA.ComponentsRS != null)
{
if (mb.MsaRA.Hvo == m_hvoMatch)
{
analyses.Add(mb.Owner as IWfiAnalysis);
}
}
}
return GetOccurrencesOfAnalyses(analyses);
default:
if (m_cache.ClassIsOrInheritsFrom((int)clid, (int)MoFormTags.kClassId))
{
foreach (
var mb in m_cache.ServiceLocator.GetInstance<IWfiMorphBundleRepository>().AllInstances())
{
if (mb.MorphRA == target)
{
analyses.Add(mb.Owner as IWfiAnalysis);
}
}
return GetOccurrencesOfAnalyses(analyses);
}
return new List<IParaFragment>();
}
}