示例#1
0
        /// <summary>
        /// Handles the index text completed event for the Terminology Provider Client.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="IndexTextCompletedEventArgs"/> instance containing the event data.</param>
        private static void TerminologyProviderClientIndexTextCompleted(object sender, IndexTextCompletedEventArgs e)
        {
            SearchState searchState = null;

            if (e.Error == null && e.Result != null && (searchState = e.UserState as SearchState) != null)
            {
                bool containsSide = false;               
                
                ObservableCollection<AdditionalTextBoxResult> additionalTextBoxResults = new ObservableCollection<AdditionalTextBoxResult>();

                foreach (IndexerResult indexerResult in e.Result)
                { 
                    AdditionalTextBoxResult additionalTextBoxResult = new AdditionalTextBoxResult();

                    additionalTextBoxResult.SelectedItem = indexerResult.Concept;
                    additionalTextBoxResult.StartIndex = indexerResult.StartIndex;
                    additionalTextBoxResult.Length = indexerResult.EndIndex - indexerResult.StartIndex;
                    additionalTextBoxResult.IsSide = TerminologyManager.IsConceptSide(indexerResult.Concept);

                    if (additionalTextBoxResult.IsSide)
                    {
                        containsSide = true;
                    }
                    else
                    {
                        ConceptItem foundConcept = null;

                        foreach (RefinableCharacteristic refinableCharacteristic in searchState.ConceptDetail.RefinableCharacteristics)
                        {
                            foundConcept = refinableCharacteristic.ValueConcepts.SingleOrDefault(p => p.SnomedConceptId == indexerResult.Concept.SnomedConceptId);

                            if (foundConcept != null)
                            {
                                break;
                            }
                        }

                        if (foundConcept == null)
                        {
                            continue;
                        }
                    }

                    additionalTextBoxResults.Add(additionalTextBoxResult);
                }

                if (!containsSide)
                {
                    TerminologyManager.RaiseAdditionalTextBoxCompleted(additionalTextBoxResults, searchState);
                }
                else
                {
                    TerminologyProviderClient terminologyProviderClient = new TerminologyProviderClient();

                    terminologyProviderClient.GetConceptDetailsCompleted += delegate(object newSender, GetConceptDetailsCompletedEventArgs newEventArgs)
                    {
                        searchState = newEventArgs.UserState as SearchState;                        
                    };

                    if (searchState.InputFieldResult != null)
                    {
                        searchState.AdditionalTextBoxResults = additionalTextBoxResults;

                        RefinableCharacteristic refChar = searchState.ConceptDetail.RefinableCharacteristics.SingleOrDefault(p => p.Name == "Finding site");

                        if (refChar == null)
                        {
                            TerminologyManager.RaiseAdditionalTextBoxCompleted(searchState.AdditionalTextBoxResults, searchState);
                        }
                        else
                        {
                            searchState.UserState = UserState.SearchingFindingSites;                            
                            searchState.RemainingItemsToFind = refChar.ValueConcepts.Count;
                            searchState.AdditionalTextBoxResults = additionalTextBoxResults;
                            searchState.RefinableCharacteristic = refChar;

                            TerminologyManager.terminologyProviderClient.GetConceptDetailsAsync(refChar.ValueConcepts[0].SnomedConceptId, TerminologyManager.LocaleString, searchState);
                        }
                    }
                }
            }
            else
            {
                if (TerminologyManager.AdditionalTextBoxParseCompleted != null)
                {
                    if (searchState != null)
                    {
                        TerminologyManager.AdditionalTextBoxParseCompleted(null, new AdditionalTextBoxParseCompletedEventArgs(searchState.SearchTextOriginal, false, searchState.InputFieldResult.Concept.SnomedConceptId));
                    }
                    else
                    {
                        TerminologyManager.AdditionalTextBoxParseCompleted(null, new AdditionalTextBoxParseCompletedEventArgs(string.Empty, false, string.Empty));               
                    }
                }
            }
        }
示例#2
0
        /// <summary>
        /// Handles the index text completed event for the Terminology Provider Client.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="IndexTextCompletedEventArgs"/> instance containing the event data.</param>
        private static void TerminologyProviderClientIndexTextCompleted(object sender, IndexTextCompletedEventArgs e)
        {
            SearchState searchState = null;

            if (e.Error == null && e.Result != null && (searchState = e.UserState as SearchState) != null)
            {
                bool containsSide = false;

                ObservableCollection <AdditionalTextBoxResult> additionalTextBoxResults = new ObservableCollection <AdditionalTextBoxResult>();

                foreach (IndexerResult indexerResult in e.Result)
                {
                    AdditionalTextBoxResult additionalTextBoxResult = new AdditionalTextBoxResult();

                    additionalTextBoxResult.SelectedItem = indexerResult.Concept;
                    additionalTextBoxResult.StartIndex   = indexerResult.StartIndex;
                    additionalTextBoxResult.Length       = indexerResult.EndIndex - indexerResult.StartIndex;
                    additionalTextBoxResult.IsSide       = TerminologyManager.IsConceptSide(indexerResult.Concept);

                    if (additionalTextBoxResult.IsSide)
                    {
                        containsSide = true;
                    }
                    else
                    {
                        ConceptItem foundConcept = null;

                        foreach (RefinableCharacteristic refinableCharacteristic in searchState.ConceptDetail.RefinableCharacteristics)
                        {
                            foundConcept = refinableCharacteristic.ValueConcepts.SingleOrDefault(p => p.SnomedConceptId == indexerResult.Concept.SnomedConceptId);

                            if (foundConcept != null)
                            {
                                break;
                            }
                        }

                        if (foundConcept == null)
                        {
                            continue;
                        }
                    }

                    additionalTextBoxResults.Add(additionalTextBoxResult);
                }

                if (!containsSide)
                {
                    TerminologyManager.RaiseAdditionalTextBoxCompleted(additionalTextBoxResults, searchState);
                }
                else
                {
                    TerminologyProviderClient terminologyProviderClient = new TerminologyProviderClient();

                    terminologyProviderClient.GetConceptDetailsCompleted += delegate(object newSender, GetConceptDetailsCompletedEventArgs newEventArgs)
                    {
                        searchState = newEventArgs.UserState as SearchState;
                    };

                    if (searchState.InputFieldResult != null)
                    {
                        searchState.AdditionalTextBoxResults = additionalTextBoxResults;

                        RefinableCharacteristic refChar = searchState.ConceptDetail.RefinableCharacteristics.SingleOrDefault(p => p.Name == "Finding site");

                        if (refChar == null)
                        {
                            TerminologyManager.RaiseAdditionalTextBoxCompleted(searchState.AdditionalTextBoxResults, searchState);
                        }
                        else
                        {
                            searchState.UserState                = UserState.SearchingFindingSites;
                            searchState.RemainingItemsToFind     = refChar.ValueConcepts.Count;
                            searchState.AdditionalTextBoxResults = additionalTextBoxResults;
                            searchState.RefinableCharacteristic  = refChar;

                            TerminologyManager.terminologyProviderClient.GetConceptDetailsAsync(refChar.ValueConcepts[0].SnomedConceptId, TerminologyManager.LocaleString, searchState);
                        }
                    }
                }
            }
            else
            {
                if (TerminologyManager.AdditionalTextBoxParseCompleted != null)
                {
                    if (searchState != null)
                    {
                        TerminologyManager.AdditionalTextBoxParseCompleted(null, new AdditionalTextBoxParseCompletedEventArgs(searchState.SearchTextOriginal, false, searchState.InputFieldResult.Concept.SnomedConceptId));
                    }
                    else
                    {
                        TerminologyManager.AdditionalTextBoxParseCompleted(null, new AdditionalTextBoxParseCompletedEventArgs(string.Empty, false, string.Empty));
                    }
                }
            }
        }