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");
        }
Exemple #2
0
        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");
            }
        }