/// <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); } }
/// <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); } }
/// <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; }
/// <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)); } } } }
/// <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)); } } } }
/// <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; }