diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs index d34e7c4c4..a98142a38 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs @@ -6,7 +6,7 @@ namespace OSPSuite.Core.Domain.Builder { - public class ExpressionProfileBuildingBlock : PathAndValueEntityBuildingBlockFromPKSim + public class ExpressionProfileBuildingBlock : PathAndValueEntityBuildingBlockFromPKSim, ILookupBuildingBlock { private readonly StartValueCache _initialConditions = new StartValueCache(); public override string Icon => Type.IconName; @@ -19,6 +19,11 @@ public class ExpressionProfileBuildingBlock : PathAndValueEntityBuildingBlockFro public virtual string Category { get; private set; } + InitialCondition ILookupBuildingBlock.ByPath(ObjectPath path) + { + return _initialConditions[path]; + } + public override string Name { get => ExpressionProfileName(MoleculeName, Species, Category); @@ -44,7 +49,7 @@ public void RemoveInitialCondition(InitialCondition initialCondition) { if (initialCondition == null) return; - + _initialConditions.Remove(initialCondition.Path); initialCondition.BuildingBlock = null; } @@ -62,6 +67,7 @@ public override void AcceptVisitor(IVisitor visitor) } public IReadOnlyCollection InitialConditions => _initialConditions; + public IReadOnlyCollection ExpressionParameters => _allValues; public override void UpdatePropertiesFrom(IUpdatable source, ICloneManager cloneManager) { @@ -76,7 +82,26 @@ public override void UpdatePropertiesFrom(IUpdatable source, ICloneManager clone Name = sourceExpressionProfile.Name; _initialConditions.Clear(); - sourceExpressionProfile.InitialConditions.Each(initialCondition => AddInitialCondition(cloneManager.Clone(initialCondition))); + sourceExpressionProfile.InitialConditions.Each(initialCondition => + AddInitialCondition(cloneManager.Clone(initialCondition))); + } + + public IEnumerator GetEnumerator() + { + return _initialConditions.GetEnumerator(); + } + + public void Add(InitialCondition pathAndValueEntity) + { + _initialConditions.Add(pathAndValueEntity); + pathAndValueEntity.BuildingBlock = this; + } + + public void Remove(InitialCondition pathAndValueEntity) + { + if (pathAndValueEntity == null) + return; + _initialConditions.Remove(pathAndValueEntity.Path); } } } \ No newline at end of file diff --git a/src/OSPSuite.Core/Domain/Builder/InitialConditionsBuildingBlock.cs b/src/OSPSuite.Core/Domain/Builder/InitialConditionsBuildingBlock.cs index ee4de07d2..f31417d7e 100644 --- a/src/OSPSuite.Core/Domain/Builder/InitialConditionsBuildingBlock.cs +++ b/src/OSPSuite.Core/Domain/Builder/InitialConditionsBuildingBlock.cs @@ -2,6 +2,11 @@ namespace OSPSuite.Core.Domain.Builder { + public interface ILookupBuildingBlock : IBuildingBlock where T : IBuilder + { + T ByPath(ObjectPath path); + } + public class InitialConditionsBuildingBlock : PathAndValueEntityBuildingBlock { public InitialConditionsBuildingBlock() diff --git a/src/OSPSuite.Core/Domain/Builder/PathAndValueEntityBuildingBlock.cs b/src/OSPSuite.Core/Domain/Builder/PathAndValueEntityBuildingBlock.cs index 4c80da5dd..0e852d611 100644 --- a/src/OSPSuite.Core/Domain/Builder/PathAndValueEntityBuildingBlock.cs +++ b/src/OSPSuite.Core/Domain/Builder/PathAndValueEntityBuildingBlock.cs @@ -8,7 +8,7 @@ namespace OSPSuite.Core.Domain.Builder { - public abstract class PathAndValueEntityBuildingBlock : BuildingBlock, IBuildingBlock where T : PathAndValueEntity + public abstract class PathAndValueEntityBuildingBlock : BuildingBlock, ILookupBuildingBlock where T : PathAndValueEntity { protected Cache _allValues = new Cache(x => x.Path, x => null); @@ -47,6 +47,11 @@ IEnumerator IEnumerable.GetEnumerator() return GetEnumerator(); } + T ILookupBuildingBlock.ByPath(ObjectPath path) + { + return this[path]; + } + public override void AcceptVisitor(IVisitor visitor) { base.AcceptVisitor(visitor); diff --git a/src/OSPSuite.Core/Domain/Constants.cs b/src/OSPSuite.Core/Domain/Constants.cs index 3a3fd357e..ba906e1ef 100644 --- a/src/OSPSuite.Core/Domain/Constants.cs +++ b/src/OSPSuite.Core/Domain/Constants.cs @@ -534,6 +534,7 @@ private static string compositeNameFor(char separator, params string[] names) public static class Serialization { + public const string INITIAL_CONDITIONS = "InitialConditions"; public const string MACRO_COMMAND = "MacroCommand"; public const string SIMPLE_COMMAND = "SimpleCommand"; public const string LABEL_COMMAND = "LabelCommand"; diff --git a/src/OSPSuite.Core/Domain/Services/QuantityValuesUpdater.cs b/src/OSPSuite.Core/Domain/Services/QuantityValuesUpdater.cs index 983698ae8..9c05b3d25 100644 --- a/src/OSPSuite.Core/Domain/Services/QuantityValuesUpdater.cs +++ b/src/OSPSuite.Core/Domain/Services/QuantityValuesUpdater.cs @@ -59,7 +59,7 @@ public void UpdateQuantitiesValues(ModelConfiguration modelConfiguration) private void updateParameterFromExpressionProfiles(ModelConfiguration modelConfiguration) { - modelConfiguration.SimulationConfiguration.ExpressionProfiles?.SelectMany(x => x).Each(x => updateParameterValueFromStartValue(modelConfiguration, x, getParameter)); + modelConfiguration.SimulationConfiguration.ExpressionProfiles?.SelectMany(x => x.ExpressionParameters).Each(x => updateParameterValueFromStartValue(modelConfiguration, x, getParameter)); } private void updateParameterFromIndividualValues(ModelConfiguration modelConfiguration) diff --git a/tests/OSPSuite.Core.Tests/Domain/ExpressionProfileBuildingBlockSpecs.cs b/tests/OSPSuite.Core.Tests/Domain/ExpressionProfileBuildingBlockSpecs.cs index 74ad90fc8..a53256aad 100644 --- a/tests/OSPSuite.Core.Tests/Domain/ExpressionProfileBuildingBlockSpecs.cs +++ b/tests/OSPSuite.Core.Tests/Domain/ExpressionProfileBuildingBlockSpecs.cs @@ -41,7 +41,7 @@ protected override void Context() _expressionProfileBuildingBlock.Add(new ExpressionParameter().WithName("name1")); var initialCondition = new InitialCondition().WithName("ic1"); initialCondition.Path = new ObjectPath("path1"); - _expressionProfileBuildingBlock.AddInitialCondition(initialCondition); + _expressionProfileBuildingBlock.Add(initialCondition); var clonedInitialCondition = new InitialCondition().WithName(initialCondition.Name); clonedInitialCondition.Path = initialCondition.Path; @@ -58,8 +58,8 @@ public void the_updated_expression_profile_should_have_properties_set() sut.Name.ShouldBeEqualTo("Molecule|Species|Name"); sut.Type.ShouldBeEqualTo(ExpressionTypes.MetabolizingEnzyme); sut.PKSimVersion.ShouldBeEqualTo("11.1"); - sut.Count().ShouldBeEqualTo(1); - sut.InitialConditions.Count().ShouldBeEqualTo(1); + sut.Count().ShouldBeEqualTo(1); + sut.Count().ShouldBeEqualTo(1); } }