/// <summary>
        /// Gets the concept detail.
        /// </summary>
        /// <param name="snomedConceptId">The SNOMED concept id.</param>
        /// <param name="locale">The locale.</param>
        /// <returns>Concept Details of the given SNOMED CT concept id.</returns>
        public ConceptDetail GetConceptDetails(string snomedConceptId, string locale)
        {
            if (!TerminologyProvider.initialized)
            {
                TerminologyProvider.Initialize();
            }

            // Getting First rather than Select as for a snomedConceptId multiple entries can be found
            TermResult    termResult    = TerminologyProvider.searchByDescriptionTerms.FirstOrDefault <TermResult>(entry => entry.Concept.SnomedConceptId == snomedConceptId);
            ConceptDetail conceptDetail = null;

            if (termResult != null)
            {
                ConceptResult concept = termResult.Concept;
                if (concept != null)
                {
                    conceptDetail = new ConceptDetail()
                    {
                        SnomedConceptId          = snomedConceptId,
                        PreferredTerm            = concept.PreferredTerm,
                        FullySpecifiedName       = concept.FullySpecifiedName,
                        Parents                  = concept.Parents,
                        AlternateDescriptions    = concept.AlternateDescriptions,
                        Children                 = new ObservableCollection <ConceptResult>(),
                        RefinableCharacteristics = new ObservableCollection <RefinableCharacteristic>(),
                        Relations                = new ObservableCollection <RelationResult>()
                    };
                }
            }

            if (null == conceptDetail)
            {
                conceptDetail = new ConceptDetail()
                {
                    SnomedConceptId    = snomedConceptId,
                    PreferredTerm      = "Sample Concept Preferred Term",
                    FullySpecifiedName = "Sample Concept (Fully Specified Name)",
                    Parents            = new ObservableCollection <ConceptItem>()
                    {
                        new ConceptItem()
                        {
                            SnomedConceptId = snomedConceptId, FullySpecifiedName = "A Sample Concept (SampleConcept)", PreferredTerm = "A Sample Concept"
                        },
                        new ConceptItem()
                        {
                            SnomedConceptId = snomedConceptId, FullySpecifiedName = "Another Sample Concept (SampleConcept)", PreferredTerm = "Another Sample Concept"
                        }
                    },
                    AlternateDescriptions = new ObservableCollection <TermItem>()
                    {
                        new TermItem()
                        {
                            Description = "A sample synonym", SnomedDescriptionId = snomedConceptId
                        },
                        new TermItem()
                        {
                            Description = "Another sample synonym", SnomedDescriptionId = snomedConceptId
                        }
                    },
                    Children = new ObservableCollection <ConceptResult>(),
                    RefinableCharacteristics = new ObservableCollection <RefinableCharacteristic>(),
                    Relations = new ObservableCollection <RelationResult>()
                };
            }

            return(conceptDetail);
        }
        /// <summary>
        /// Gets the concept detail.
        /// </summary>
        /// <param name="snomedConceptId">The SNOMED concept id.</param>
        /// <param name="locale">The locale.</param>
        /// <returns>Concept Details of the given SNOMED CT concept id.</returns>
        public ConceptDetail GetConceptDetails(string snomedConceptId, string locale)
        {
            if (!TerminologyProvider.initialized)
            {
                TerminologyProvider.Initialize();
            }

            // Getting First rather than Select as for a snomedConceptId multiple entries can be found
            TermResult termResult = TerminologyProvider.searchByDescriptionTerms.FirstOrDefault<TermResult>(entry => entry.Concept.SnomedConceptId == snomedConceptId);
            ConceptDetail conceptDetail = null;

            if (termResult != null)
            {
                ConceptResult concept = termResult.Concept;
                if (concept != null)
                {
                    conceptDetail = new ConceptDetail()
                    {
                        SnomedConceptId = snomedConceptId,
                        PreferredTerm = concept.PreferredTerm,
                        FullySpecifiedName = concept.FullySpecifiedName,
                        Parents = concept.Parents,
                        AlternateDescriptions = concept.AlternateDescriptions,
                        Children = new ObservableCollection<ConceptResult>(),
                        RefinableCharacteristics = new ObservableCollection<RefinableCharacteristic>(),
                        Relations = new ObservableCollection<RelationResult>()
                    };
                }
            }

            if (null == conceptDetail)
            {
                conceptDetail = new ConceptDetail()
                {
                    SnomedConceptId = snomedConceptId,
                    PreferredTerm = "Sample Concept Preferred Term",
                    FullySpecifiedName = "Sample Concept (Fully Specified Name)",
                    Parents = new ObservableCollection<ConceptItem>() 
                    { 
                        new ConceptItem() { SnomedConceptId = snomedConceptId, FullySpecifiedName = "A Sample Concept (SampleConcept)", PreferredTerm = "A Sample Concept" },
                        new ConceptItem() { SnomedConceptId = snomedConceptId, FullySpecifiedName = "Another Sample Concept (SampleConcept)", PreferredTerm = "Another Sample Concept" }
                    },
                    AlternateDescriptions = new ObservableCollection<TermItem>()
                    {
                        new TermItem() { Description = "A sample synonym", SnomedDescriptionId = snomedConceptId },
                        new TermItem() { Description = "Another sample synonym", SnomedDescriptionId = snomedConceptId }
                    },
                    Children = new ObservableCollection<ConceptResult>(),
                    RefinableCharacteristics = new ObservableCollection<RefinableCharacteristic>(),
                    Relations = new ObservableCollection<RelationResult>()
                };
            }
             
            return conceptDetail;
        }