Beispiel #1
0
        /// <summary>
        /// Encodes the main concept.
        /// </summary>
        /// <param name="conceptDetail">The concept detail.</param>
        /// <param name="searchState">State of the search.</param>
        private static void EncodeMainConcept(ConceptDetail conceptDetail, SearchState searchState)
        {
            searchState.EncodedConcept = new EncodedConcept(SnomedConcepts.Situation);

            if (searchState.InputFieldResult.IsNegated)
            {
                searchState.EncodedConcept.DisplayName = TerminologyManager.NegationDisplayString + " " + searchState.InputFieldResult.Description;
                searchState.EncodedConcept.AttributeCollection.Add(new AttributeValuePair(SnomedConcepts.FindingContext, new EncodedConcept(SnomedConcepts.KnownAbsent)));
                searchState.EncodedConcept.AttributeCollection.Add(new AttributeValuePair(SnomedConcepts.AssociatedFinding, new EncodedConcept(conceptDetail)));
                searchState.UserState = UserState.EncodingAdditionalConcept;
            }
            else
            {
                searchState.EncodedConcept.EncodedSingleConcept = conceptDetail;
                searchState.EncodedConcept.DisplayName          = searchState.InputFieldResult.Description;
                searchState.UserState = UserState.EncodingAdditionalConcept;
            }

            if (searchState.AdditionalTextBoxResults != null && searchState.AdditionalTextBoxResults.Count > 0)
            {
                AdditionalTextBoxResult additionalTextBoxResult = searchState.AdditionalTextBoxResults[0];

                terminologyProviderClient.GetConceptDetailsAsync(additionalTextBoxResult.SelectedItem.SnomedConceptId, TerminologyManager.LocaleString, searchState);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Encodes the laterality concept detail as a situation with explicit context.
        /// </summary>
        /// <param name="conceptDetail">The concept detail.</param>
        /// <param name="searchState">State of the search.</param>
        /// <param name="lateralityConceptDetail">The laterality concept detail.</param>
        private static void EncodeLaterality(ConceptDetail conceptDetail, SearchState searchState, ConceptDetail lateralityConceptDetail)
        {
            AttributeValuePair lateralityAttributeValuePair = new AttributeValuePair(SnomedConcepts.FindingSite, new EncodedConcept(conceptDetail));

            lateralityAttributeValuePair.Value.AttributeCollection.Add(new AttributeValuePair(SnomedConcepts.Laterality, new EncodedConcept(lateralityConceptDetail)));

            if (searchState.InputFieldResult.IsNegated)
            {
                if (searchState.EncodedConcept.AttributeCollection.Count > 1)
                {
                    searchState.EncodedConcept.AttributeCollection[1].Value.AttributeCollection.Add(lateralityAttributeValuePair);
                }
            }
            else
            {
                searchState.EncodedConcept.AttributeCollection.Add(lateralityAttributeValuePair);
            }

            searchState.UserState = UserState.EncodingAdditionalConcept;

            searchState.AdditionalTextBoxResults.RemoveAt(0);

            if (searchState.AdditionalTextBoxResults != null && searchState.AdditionalTextBoxResults.Count > 0)
            {
                AdditionalTextBoxResult additionalTextBoxResult = searchState.AdditionalTextBoxResults[0];

                terminologyProviderClient.GetConceptDetailsAsync(additionalTextBoxResult.SelectedItem.SnomedConceptId, TerminologyManager.LocaleString, searchState);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Handles the saved event of the Single Concept matching control.
        /// Adds the encoded term to the encoded list box.
        /// </summary>
        /// <param name="sender">The single concept matching control.</param>
        /// <param name="e">The <see cref="System.Windows.RoutedEventArgs"/> instance containing the event data.</param>
        private void SingleConceptMatching_Saved(object sender, System.Windows.RoutedEventArgs e)
        {
            if (this.connected && this.SingleConceptMatching.InputBoxSelectedItem != null)
            {
                ObservableCollection <AdditionalTextBoxResult> additionalTextBoxResults = new ObservableCollection <AdditionalTextBoxResult>();

                foreach (object o in this.SingleConceptMatching.AdditionalTextBoxSelectedTerms)
                {
                    AdditionalTextBoxResult additionalTextBoxResult = o as AdditionalTextBoxResult;

                    if (additionalTextBoxResult != null)
                    {
                        additionalTextBoxResults.Add(additionalTextBoxResult);
                    }
                }

                this.ShowProgressBar();

                TerminologyManager.EncodeConcept(this.SingleConceptMatching.InputBoxSelectedItem as InputFieldResult, additionalTextBoxResults);
            }
            else
            {
                this.EncodeOutput(CreateUnencodedConcept(this.SingleConceptMatching.InputBoxText));

                this.SingleConceptMatching.Clear();
                this.SingleConceptMatching.FocusInputBox();
            }

            this.lastInputBoxResults          = null;
            this.lastInputBoxSearch           = string.Empty;
            this.lastAdditionalTextBoxSearch  = string.Empty;
            this.lastAdditionalTextBoxResults = null;
        }
Beispiel #4
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));               
                    }
                }
            }
        }
Beispiel #5
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));
                    }
                }
            }
        }
Beispiel #6
0
        /// <summary>
        /// Checks to see if a qualifier result was in the previous results.
        /// </summary>
        /// <param name="result">The result to check.</param>
        /// <returns>Either the old or new result.</returns>
        private AdditionalTextBoxResult GetMatchingAdditionalTextBoxResultsFromLastResults(AdditionalTextBoxResult result)
        {
            if (this.lastAdditionalTextBoxResults != null)
            {
                foreach (AdditionalTextBoxResult lastResult in this.lastAdditionalTextBoxResults.AdditionalTextBoxResults)
                {
                    if (lastResult.SelectedItem.SnomedConceptId == result.SelectedItem.SnomedConceptId && lastResult.StartIndex == result.StartIndex && lastResult.Length == result.Length)
                    {
                        return(lastResult);
                    }
                }
            }

            return(result);
        }
        /// <summary>
        /// Checks to see if a qualifier result was in the previous results.
        /// </summary>
        /// <param name="result">The result to check.</param>
        /// <returns>Either the old or new result.</returns>
        private AdditionalTextBoxResult GetMatchingAdditionalTextBoxResultsFromLastResults(AdditionalTextBoxResult result)
        {
            if (this.lastAdditionalTextBoxResults != null)
            {
                foreach (AdditionalTextBoxResult lastResult in this.lastAdditionalTextBoxResults.AdditionalTextBoxResults)
                {
                    if (lastResult.SelectedItem.SnomedConceptId == result.SelectedItem.SnomedConceptId && lastResult.StartIndex == result.StartIndex && lastResult.Length == result.Length)
                    {
                        return lastResult;
                    }
                }
            }

            return result;
        }