private void removeFieldsFromAnalysis(IPopulationAnalysisField field, PopulationAnalysis populationAnalysis)
        {
            var allDerivedFields = populationAnalysis.AllFieldsReferencing(field);

            allDerivedFields.Each(populationAnalysis.Remove);
            populationAnalysis.Remove(field);
        }
        private bool fieldForOutputWasRemoved <TField>(TField field, Cache <string, string> keyPathCache, PopulationAnalysis populationAnalysis, List <string> allErrors) where TField : IQuantityField
        {
            //check that the quantity is also available
            var path = pathFrom(field.QuantityPath, field.QuantityType);

            if (keyPathCache.Contains(path))
            {
                return(false);
            }

            populationAnalysis.Remove(field);
            allErrors.Add(PKSimConstants.Error.QuantityNotFoundWillBeRemovedFromAnalysis(field.QuantityPath));
            return(true);
        }
        private void synchronizeCovariates(PopulationAnalysis populationAnalysis, IPopulationDataCollector populationDataCollector, List <string> allErrors)
        {
            //ToList() because we are removing in the iteration
            foreach (var covariateField in populationAnalysis.AllFields.OfType <PopulationAnalysisCovariateField>().ToList())
            {
                if (populationDataCollector.AllCovariateNames.Contains(covariateField.Covariate))
                {
                    continue;
                }

                populationAnalysis.Remove(covariateField);
                allErrors.Add(PKSimConstants.Error.CovariateNotFoundWillBeRemovedFromAnalysis(covariateField.Covariate));
            }
        }
        private void synchronizeParameters(PopulationAnalysis populationAnalysis, IPopulationDataCollector populationDataCollector, List <string> allErrors)
        {
            var allParameters = _entitiesInContainerRetriever.ParametersFrom(populationDataCollector);

            //ToList() because we are removing in the iteration
            foreach (var parameterField in populationAnalysis.AllFields.OfType <PopulationAnalysisParameterField>().ToList())
            {
                if (allParameters.Contains(parameterField.ParameterPath))
                {
                    continue;
                }

                populationAnalysis.Remove(parameterField);
                allErrors.Add(PKSimConstants.Error.ParameterNotFoundWillBeRemovedFromAnalysis(parameterField.ParameterPath));
            }
        }
        private void synchronizeOutputs(PopulationAnalysis populationAnalysis, IPopulationDataCollector populationDataCollector, List <string> allErrors)
        {
            var statiscalAnalsysis = populationAnalysis as PopulationStatisticalAnalysis;
            var keyPathCache       = outputKeyPathCacheFor(populationDataCollector);

            foreach (var outputField in populationAnalysis.AllFields.OfType <PopulationAnalysisOutputField>().ToList())
            {
                if (statiscalAnalsysis == null)
                {
                    populationAnalysis.Remove(outputField);
                    allErrors.Add(PKSimConstants.Error.OutputFieldCannotBeUsedInAnalysis(outputField.Name));
                    continue;
                }

                if (fieldForOutputWasRemoved(outputField, keyPathCache, populationAnalysis, allErrors))
                {
                    continue;
                }
            }
        }
        private void synchronizePKParameters(PopulationAnalysis populationAnalysis, IPopulationDataCollector populationDataCollector, List <string> allErrors)
        {
            //path where compound name has been removed
            var keyPathCache = outputKeyPathCacheFor(populationDataCollector);

            foreach (var pkParameterField in populationAnalysis.AllFields.OfType <PopulationAnalysisPKParameterField>().ToList())
            {
                if (fieldForOutputWasRemoved(pkParameterField, keyPathCache, populationAnalysis, allErrors))
                {
                    continue;
                }

                var path = pathFrom(pkParameterField.QuantityPath, pkParameterField.QuantityType);

                //quantity was found. Yet it's not over. We need to verify that the pk parameter is also available
                pkParameterField.QuantityPath = keyPathCache[path];
                if (!populationDataCollector.HasPKParameterFor(pkParameterField.QuantityPath, pkParameterField.PKParameter))
                {
                    populationAnalysis.Remove(pkParameterField);
                    allErrors.Add(PKSimConstants.Error.PKParameterWasNotCalculatedForQuantity(pkParameterField.PKParameter, pkParameterField.QuantityPath));
                }
            }
        }
        public virtual void RemoveField(IPopulationAnalysisField populationAnalysisField)
        {
            if (populationAnalysisField == null)
            {
                return;
            }

            var allDerivedFields = _populationAnalysis.AllFieldsReferencing(populationAnalysisField);

            if (allDerivedFields.Any())
            {
                var res = _dialogCreator.MessageBoxYesNo(PKSimConstants.UI.ReallyRemoveFieldUsedInGrouping(populationAnalysisField.Name, allDerivedFields.Select(x => x.Name)));
                if (res == ViewResult.No)
                {
                    return;
                }
            }

            _populationAnalysis.Remove(populationAnalysisField);
            allDerivedFields.Each(_populationAnalysis.Remove);

            _eventPublisher.PublishEvent(new FieldRemovedFromPopulationAnalysisEvent(_populationAnalysis, populationAnalysisField));
            UpdateView();
        }