private void FireComponentChangedEvent() { if (!_fireChangeEvent) { return; } if (ComponentType == ComponentQuestionType.AnatomicEntity) { var anatomicEntities = new List <aim_dotnet.AnatomicEntity>(); var isValid = HasRequiredSelectedTerms(); if (isValid) { foreach (var validTerm in SelectedValidTerms) { var anatomicEntity = CodeUtils.ToAnatomicEntity(CodeUtils.ToStandardCodeSequence(validTerm), _simpleQuestion.Label); anatomicEntity.AnnotatorConfidence = _confidence; var anatomicEntityCharacteristicIndecies = CollectionUtils.Sort(_selectedAnatomicEntityCharacteristics.Keys, (i1, i2) => i1.CompareTo(i2)); foreach (var characteristicIndex in anatomicEntityCharacteristicIndecies) { var index = characteristicIndex; var templateAnatomicEntityCharacteristic = CollectionUtils.SelectFirst(_component.AnatomicEntity.AnatomicEntityCharacteristic, item => item.ItemNumber == index); isValid = templateAnatomicEntityCharacteristic != null && _selectedAnatomicEntityCharacteristics[characteristicIndex].Count >= Math.Min(templateAnatomicEntityCharacteristic.AllowedTerm.Count, templateAnatomicEntityCharacteristic.MinCardinality) && _selectedAnatomicEntityCharacteristics[characteristicIndex].Count <= templateAnatomicEntityCharacteristic.MaxCardinality; if (!isValid) { break; } anatomicEntity.AnatomicEntityCharacteristicCollection = CollectionUtils.Concat <aim_dotnet.AnatomicEntityCharacteristic>( anatomicEntity.AnatomicEntityCharacteristicCollection ?? new List <aim_dotnet.AnatomicEntityCharacteristic>(), _selectedAnatomicEntityCharacteristics[characteristicIndex] ); } if (!isValid) { break; } anatomicEntities.Add(anatomicEntity); } if (!isValid) { anatomicEntities.Clear(); } } EventsHelper.Fire(ComponentChanged, this, new ComponentChangedEventArgs(QuestionNumber, anatomicEntities)); } else if (ComponentType == ComponentQuestionType.ImagingObservation) { var imagingObservations = new List <aim_dotnet.ImagingObservation>(); var isValid = HasRequiredSelectedTerms(); if (isValid) { foreach (var validTerm in SelectedValidTerms) { var imagingObservation = CodeUtils.ToImagingObservation(CodeUtils.ToStandardCodeSequence(validTerm), _simpleQuestion.Label); imagingObservation.AnnotatorConfidence = _confidence; var imagingObservationCharacteristicIndecies = CollectionUtils.Sort(_selectedImagingObservationCharacteristics.Keys, (i1, i2) => i1.CompareTo(i2)); foreach (var characteristicIndex in imagingObservationCharacteristicIndecies) { var index = characteristicIndex; var templateImagingObservationCharacteristic = CollectionUtils.SelectFirst(_component.ImagingObservation.ImagingObservationCharacteristic, item => item.ItemNumber == index); isValid = templateImagingObservationCharacteristic != null && _selectedImagingObservationCharacteristics[characteristicIndex].Count >= Math.Min(templateImagingObservationCharacteristic.AllowedTerm.Count, templateImagingObservationCharacteristic.MinCardinality) && _selectedImagingObservationCharacteristics[characteristicIndex].Count <= templateImagingObservationCharacteristic.MaxCardinality; if (!isValid) { break; } imagingObservation.ImagingObservationCharacteristicCollection = CollectionUtils.Concat <aim_dotnet.ImagingObservationCharacteristic>( imagingObservation.ImagingObservationCharacteristicCollection ?? new List <aim_dotnet.ImagingObservationCharacteristic>(), _selectedImagingObservationCharacteristics[characteristicIndex] ); } if (!isValid) { break; } imagingObservations.Add(imagingObservation); } if (!isValid) { imagingObservations.Clear(); } } EventsHelper.Fire(ComponentChanged, this, new ComponentChangedEventArgs(QuestionNumber, imagingObservations)); } else if (ComponentType == ComponentQuestionType.Inference) { var inferences = new List <aim_dotnet.Inference>(); foreach (var validTerm in SelectedValidTerms) { var inference = CodeUtils.ToInference(CodeUtils.ToStandardCodeSequence(validTerm)); inference.AnnotatorConfidence = _confidence; inference.ImageEvidence = true; inferences.Add(inference); } EventsHelper.Fire(ComponentChanged, this, new ComponentChangedEventArgs(QuestionNumber, inferences)); } else if (ComponentType == ComponentQuestionType.Calculation) { var calculations = new List <aim_dotnet.Calculation>(); foreach (var validTerm in SelectedValidTerms) { var calculation = CodeUtils.ToCalculation(CodeUtils.ToStandardCodeSequence(validTerm)); calculations.Add(calculation); } EventsHelper.Fire(ComponentChanged, this, new ComponentChangedEventArgs(QuestionNumber, calculations)); } else if (ComponentType == ComponentQuestionType.GeometricShape) { var circle = new aim_dotnet.Circle(); EventsHelper.Fire(ComponentChanged, this, new ComponentChangedEventArgs(QuestionNumber, new List <aim_dotnet.GeometricShape> { circle })); } else { Debug.Assert(false, "Unknown component type in the Allowed Term"); } }