From a61c7020e40caf50584a5f0ea61848f6cd0bdf86 Mon Sep 17 00:00:00 2001 From: Robert McIntosh <261477+rwmcintosh@users.noreply.github.com> Date: Sat, 14 Oct 2023 10:20:26 -0400 Subject: [PATCH] Fixes #2141 Extract mapper to create parameters from individual parameters (#2142) * Fixes #2141 Extract mapper to create parameters from individual parameters * Add pr checklist * PR feedback --- .github/PULL_REQUEST_TEMPLATE.md | 39 +++++++++++++++++++ .../IndividualParameterToParameterMapper.cs | 35 +++++++++++++++++ .../Domain/Services/QuantityValuesUpdater.cs | 21 +++------- 3 files changed, 80 insertions(+), 15 deletions(-) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 src/OSPSuite.Core/Domain/Mappers/IndividualParameterToParameterMapper.cs diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..ffd2629ea --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,39 @@ +Fixes # + +# Description + +Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. + +## Type of change + +Please mark relevant options with an `x` in the brackets. + +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) +- [ ] This change requires a documentation update +- [ ] Algorithm update - updates algorithm documentation/questions/answers etc. +- [ ] Other (please describe): + +# How Has This Been Tested? + +Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration + +- [ ] Integration tests +- [ ] Unit tests +- [ ] Manual tests +- [ ] No tests required + +# Reviewer checklist + +Mark everything that needs to be checked before merging the PR. + +- [ ] Check if the code is well documented +- [ ] Check if the behavior is what is expected +- [ ] Check if the code is well tested +- [ ] Check if the code is readable and well formatted +- [ ] Additional checks (document below if any) + +# Screenshots (if appropriate): + +# Questions (if appropriate): \ No newline at end of file diff --git a/src/OSPSuite.Core/Domain/Mappers/IndividualParameterToParameterMapper.cs b/src/OSPSuite.Core/Domain/Mappers/IndividualParameterToParameterMapper.cs new file mode 100644 index 000000000..07ffe265c --- /dev/null +++ b/src/OSPSuite.Core/Domain/Mappers/IndividualParameterToParameterMapper.cs @@ -0,0 +1,35 @@ +using OSPSuite.Core.Domain.Builder; +using OSPSuite.Utility; + +namespace OSPSuite.Core.Domain.Mappers +{ + public interface IIndividualParameterToParameterMapper : IMapper + { + } + + public class IndividualParameterToParameterMapper : IIndividualParameterToParameterMapper + { + private readonly IParameterFactory _parameterFactory; + + public IndividualParameterToParameterMapper(IParameterFactory parameterFactory) + { + _parameterFactory = parameterFactory; + } + + public IParameter MapFrom(IndividualParameter individualParameter) + { + var name = individualParameter.Name; + var dimension = individualParameter.Dimension; + var displayUnit = individualParameter.DisplayUnit; + var distributionType = individualParameter.DistributionType; + + //if the distribution is undefined or the value is set, we create a default parameter to ensure that the value will take precedence. + //Otherwise, we create a distributed parameter and assume that required sub-parameters will be created as well + var parameter = distributionType == null || individualParameter.Value != null ? + _parameterFactory.CreateParameter(name, dimension: dimension, displayUnit: displayUnit) : + _parameterFactory.CreateDistributedParameter(name, distributionType.Value, dimension: dimension, displayUnit: displayUnit); + + return parameter.WithUpdatedMetaFrom(individualParameter); + } + } +} \ No newline at end of file diff --git a/src/OSPSuite.Core/Domain/Services/QuantityValuesUpdater.cs b/src/OSPSuite.Core/Domain/Services/QuantityValuesUpdater.cs index c07fa5bc0..294a08270 100644 --- a/src/OSPSuite.Core/Domain/Services/QuantityValuesUpdater.cs +++ b/src/OSPSuite.Core/Domain/Services/QuantityValuesUpdater.cs @@ -3,6 +3,7 @@ using OSPSuite.Assets; using OSPSuite.Core.Domain.Builder; using OSPSuite.Core.Domain.Formulas; +using OSPSuite.Core.Domain.Mappers; using OSPSuite.Utility.Extensions; namespace OSPSuite.Core.Domain.Services @@ -29,20 +30,20 @@ internal class QuantityValuesUpdater : IQuantityValuesUpdater private readonly ICloneManagerForModel _cloneManagerForModel; private readonly IFormulaFactory _formulaFactory; private readonly IConcentrationBasedFormulaUpdater _concentrationBasedFormulaUpdater; - private readonly IParameterFactory _parameterFactory; + private readonly IIndividualParameterToParameterMapper _individualParameterToParameterMapper; public QuantityValuesUpdater( IKeywordReplacerTask keywordReplacerTask, ICloneManagerForModel cloneManagerForModel, IFormulaFactory formulaFactory, IConcentrationBasedFormulaUpdater concentrationBasedFormulaUpdater, - IParameterFactory parameterFactory) + IIndividualParameterToParameterMapper individualParameterToParameterMapper) { _keywordReplacerTask = keywordReplacerTask; _cloneManagerForModel = cloneManagerForModel; _formulaFactory = formulaFactory; _concentrationBasedFormulaUpdater = concentrationBasedFormulaUpdater; - _parameterFactory = parameterFactory; + _individualParameterToParameterMapper = individualParameterToParameterMapper; } public void UpdateQuantitiesValues(ModelConfiguration modelConfiguration) @@ -92,20 +93,10 @@ private IParameter getOrAddModelParameter(ModelConfiguration modelConfiguration, if (parentContainer == null) return null; - var name = individualParameter.Name; - var dimension = individualParameter.Dimension; - var displayUnit = individualParameter.DisplayUnit; - var distributionType = individualParameter.DistributionType; - - //if the distribution is undefined or the value is set, we create a default parameter to ensure that the value will take precedence. - //Otherwise, we create a distributed parameter and assume that required sub-parameters will be created as well - parameter = distributionType == null || individualParameter.Value != null ? - _parameterFactory.CreateParameter(name, dimension: dimension, displayUnit: displayUnit) : - _parameterFactory.CreateDistributedParameter(name, distributionType.Value, dimension: dimension, displayUnit: displayUnit); + parameter = _individualParameterToParameterMapper.MapFrom(individualParameter); simulationConfiguration.AddBuilderReference(parameter, individualParameter); - return parameter.WithUpdatedMetaFrom(individualParameter) - .WithParentContainer(parentContainer); + return parameter.WithParentContainer(parentContainer); } private IParameter getParameter(ModelConfiguration modelConfiguration, PathAndValueEntity pathAndValueEntity)