From 8690093f10dc9c2bddfe0f34bacf241643e14882 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Thu, 24 Nov 2022 12:16:38 +0100 Subject: [PATCH 01/42] temp --- src/OSPSuite.Core/CoreConstants.cs | 47 ++++++ .../Domain/Builder/ExpressionParameter.cs | 14 ++ .../Builder/ExpressionProfileBuildingBlock.cs | 55 +++++++ .../Domain/Builder/ExpressionTypes.cs | 27 ++++ .../Domain/Builder/PathAndValueEntity.cs | 153 ++++++++++++++++++ 5 files changed, 296 insertions(+) create mode 100644 src/OSPSuite.Core/CoreConstants.cs create mode 100644 src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs create mode 100644 src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs create mode 100644 src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs create mode 100644 src/OSPSuite.Core/Domain/Builder/PathAndValueEntity.cs diff --git a/src/OSPSuite.Core/CoreConstants.cs b/src/OSPSuite.Core/CoreConstants.cs new file mode 100644 index 000000000..c2b634b82 --- /dev/null +++ b/src/OSPSuite.Core/CoreConstants.cs @@ -0,0 +1,47 @@ +using OSPSuite.Core.Domain; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using OSPSuite.Utility.Extensions; + +namespace OSPSuite.Core +{ + public static class CoreConstants + { + // TODO: remove common code from PK-sim when this is promoted to Core + + public static class ContainerName + { + public static string ExpressionProfileName(string moleculeName, string species, string category) + => compositeNameFor(char.Parse(ObjectPath.PATH_DELIMITER), moleculeName, species, category); + + public static (string moleculeName, string speciesName, string category) NamesFromExpressionProfileName(string expressionProfileName) + { + var names = NamesFromCompositeName(expressionProfileName, char.Parse(ObjectPath.PATH_DELIMITER)); + if (names.Count != 3) + return (string.Empty, string.Empty, string.Empty); + + return (names[0], names[1], names[2]); + } + } + + public const char COMPOSITE_SEPARATOR = '-'; + + public static IReadOnlyList NamesFromCompositeName(string compositeName, char separator = COMPOSITE_SEPARATOR) + { + return compositeName.Split(separator); + } + + private static string compositeNameFor(char separator, params string[] names) + { + if (names == null || names.Length == 0) + return string.Empty; + + var nonEmptyNames = names.ToList(); + nonEmptyNames.RemoveAll(string.IsNullOrEmpty); + + return nonEmptyNames.Select(x => x.Trim()).ToString($"{separator}"); + } + } +} diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs new file mode 100644 index 000000000..41fdd29aa --- /dev/null +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace OSPSuite.Core.Domain.Builder +{ + public class ExpressionParameter : PathAndValueEntity, IStartValue + { + /// + /// Do not use! When refactoring on promotion to core, this should be removed + /// + public double? StartValue { get; set; } + } +} diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs new file mode 100644 index 000000000..f8c2e5475 --- /dev/null +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs @@ -0,0 +1,55 @@ +using OSPSuite.Core.Domain.Services; +using OSPSuite.Core.CoreConstants; +using System; +using System.Collections.Generic; +using System.Linq.Expressions; +using System.Text; + +namespace OSPSuite.Core.Domain.Builder +{ + public class ExpressionProfileBuildingBlock : StartValueBuildingBlock + { + public override string Icon => Type.IconName; + + public virtual string MoleculeName { get; private set; } + + public string Species { get; private set; } + + public ExpressionType Type { set; get; } + + public int PKSimVersion { set; get; } + + public virtual string Category { get; private set; } + + public override string Name + { + get => CoreConstants.ContainerName.ExpressionProfileName(MoleculeName, Species, Category); + set + { + if (string.Equals(Name, value)) + { + return; + } + + var (moleculeName, species, category) = CoreConstants.ContainerName.NamesFromExpressionProfileName(value); + if (string.IsNullOrEmpty(moleculeName)) + return; + + Species = species; + Category = category; + MoleculeName = moleculeName; + } + } + + public override void UpdatePropertiesFrom(IUpdatable source, ICloneManager cloneManager) + { + base.UpdatePropertiesFrom(source, cloneManager); + var sourceExpressionProfile = source as ExpressionProfileBuildingBlock; + if (sourceExpressionProfile == null) return; + + Type = sourceExpressionProfile.Type; + PKSimVersion = sourceExpressionProfile.PKSimVersion; + Name = sourceExpressionProfile.Name; + } + } +} diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs new file mode 100644 index 000000000..9290e488e --- /dev/null +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace OSPSuite.Core.Domain.Builder +{ + public static class ExpressionTypes + { + public static ExpressionType TransportProtein = new ExpressionType(_transporter); + public static ExpressionType MetabolizingEnzyme = new ExpressionType(_enzyme); + public static ExpressionType ProteinBindingPartner = new ExpressionType(_protein); + + private const string _transporter = "Transporter"; + private const string _protein = "Protein"; + private const string _enzyme = "Enzyme"; + } + + public class ExpressionType + { + public string IconName { get; } + + public ExpressionType(string iconName) + { + IconName = iconName; + } + } +} diff --git a/src/OSPSuite.Core/Domain/Builder/PathAndValueEntity.cs b/src/OSPSuite.Core/Domain/Builder/PathAndValueEntity.cs new file mode 100644 index 000000000..ac760b010 --- /dev/null +++ b/src/OSPSuite.Core/Domain/Builder/PathAndValueEntity.cs @@ -0,0 +1,153 @@ +using OSPSuite.Core.Domain.Formulas; +using OSPSuite.Core.Domain.Services; +using OSPSuite.Core.Domain.UnitSystem; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace OSPSuite.Core.Domain.Builder +{ + public abstract class PathAndValueEntity : Entity, IUsingFormula, IWithDisplayUnit, IWithValueOrigin + { + private IObjectPath _containerPath; + protected IFormula _formula; + private Unit _displayUnit; + private IDimension _dimension; + private double? _value; + + protected PathAndValueEntity() + { + Dimension = Constants.Dimension.NO_DIMENSION; + Value = null; + ContainerPath = ObjectPath.Empty; + ValueOrigin = new ValueOrigin(); + } + + private void entityFullPathToComponents(IObjectPath fullPath) + { + if (fullPath.Any()) + { + Name = fullPath.Last(); + ContainerPath = fullPath.Clone(); + if (ContainerPath.Count > 0) + ContainerPath.RemoveAt(ContainerPath.Count - 1); + } + else + { + Name = string.Empty; + ContainerPath = ObjectPath.Empty; + } + } + + public IObjectPath ContainerPath + { + get => _containerPath; + set => SetProperty(ref _containerPath, value); + } + + public IFormula Formula + { + get => _formula; + set => SetProperty(ref _formula, value); + } + + public IDimension Dimension + { + get => _dimension; + set => SetProperty(ref _dimension, value); + } + + public Unit DisplayUnit + { + get => _displayUnit ?? Dimension.DefaultUnit; + set => SetProperty(ref _displayUnit, value); + } + + public ValueOrigin ValueOrigin { get; } + + public IObjectPath Path + { + get => ContainerPath.Clone().AndAdd(Name); + set => entityFullPathToComponents(value); + } + + public void UpdateValueOriginFrom(ValueOrigin sourceValueOrigin) + { + if (Equals(ValueOrigin, sourceValueOrigin)) + return; + + ValueOrigin.UpdateFrom(sourceValueOrigin); + OnPropertyChanged(() => ValueOrigin); + } + + /// + /// Tests whether or not the value is public-member-equivalent to the target + /// + /// The comparable object + /// True if all the public members are equal, otherwise false + protected bool IsEquivalentTo(PathAndValueEntity target) + { + if (ReferenceEquals(this, target)) + return true; + + return + NullableEqualsCheck(ContainerPath, target.ContainerPath) && + NullableEqualsCheck(Path, target.Path) && + Value.HasValue == target.Value.HasValue && + (!Value.HasValue || ValueComparer.AreValuesEqual(Value.GetValueOrDefault(), target.Value.GetValueOrDefault())) && + NullableEqualsCheck(Formula, target.Formula, x => x.ToString()) && + NullableEqualsCheck(Dimension, target.Dimension, x => x.ToString()) && + NullableEqualsCheck(Icon, target.Icon) && + NullableEqualsCheck(Description, target.Description) && + NullableEqualsCheck(Name, target.Name); + } + + /// + /// Compares two objects of the same type first checking for null, then for .Equals + /// + /// The type being compared + /// The first element being compared + /// The second element being compared + /// + /// An optional transform done on the parameter before .Equals. Often this is .ToString + /// making the the comparison the same as first.ToString().Equals(second.ToString()) + /// + /// + /// The result of the transform and .Equals calls as outlined if first is not null. If first is null, returns true + /// if second is null + /// + protected bool NullableEqualsCheck(T first, T second, Func transform = null) where T : class + { + if (first == null) + return second == null; + + if (second == null) + return false; + + return transform?.Invoke(first).Equals(transform(second)) ?? first.Equals(second); + } + + public double? Value + { + get => _value; + set => SetProperty(ref _value, value); + } + + public override void UpdatePropertiesFrom(IUpdatable source, ICloneManager cloneManager) + { + base.UpdatePropertiesFrom(source, cloneManager); + var sourcePathAndValueEntity = source as PathAndValueEntity; + if (sourcePathAndValueEntity == null) return; + + Value = sourcePathAndValueEntity.Value; + ContainerPath = sourcePathAndValueEntity.ContainerPath.Clone(); + DisplayUnit = sourcePathAndValueEntity.DisplayUnit; + Dimension = sourcePathAndValueEntity.Dimension; + Formula = cloneManager.Clone(sourcePathAndValueEntity.Formula); + ValueOrigin.UpdateAllFrom(sourcePathAndValueEntity.ValueOrigin); + } + + public override string ToString() => $"Path={ContainerPath}, Name={Name}"; + } +} From 055f00364770e55d01adf7e2747a045817f990b6 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Thu, 24 Nov 2022 12:28:48 +0100 Subject: [PATCH 02/42] fixing build --- .../Domain/Builder/ExpressionProfileBuildingBlock.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs index f8c2e5475..f238b3483 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs @@ -1,5 +1,4 @@ using OSPSuite.Core.Domain.Services; -using OSPSuite.Core.CoreConstants; using System; using System.Collections.Generic; using System.Linq.Expressions; From 06f6883e6d428de13fb99bc3faf0812262db037c Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Fri, 25 Nov 2022 11:23:43 +0100 Subject: [PATCH 03/42] changing the namespace naming --- .../Domain/Builder/ExpressionProfileBuildingBlock.cs | 4 ++-- src/OSPSuite.Core/{CoreConstants.cs => PKSimCoreConstants.cs} | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename src/OSPSuite.Core/{CoreConstants.cs => PKSimCoreConstants.cs} (97%) diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs index f238b3483..a2fb0e191 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs @@ -22,7 +22,7 @@ public class ExpressionProfileBuildingBlock : StartValueBuildingBlock CoreConstants.ContainerName.ExpressionProfileName(MoleculeName, Species, Category); + get => PKSimCoreConstants.ContainerName.ExpressionProfileName(MoleculeName, Species, Category); set { if (string.Equals(Name, value)) @@ -30,7 +30,7 @@ public override string Name return; } - var (moleculeName, species, category) = CoreConstants.ContainerName.NamesFromExpressionProfileName(value); + var (moleculeName, species, category) = PKSimCoreConstants.ContainerName.NamesFromExpressionProfileName(value); if (string.IsNullOrEmpty(moleculeName)) return; diff --git a/src/OSPSuite.Core/CoreConstants.cs b/src/OSPSuite.Core/PKSimCoreConstants.cs similarity index 97% rename from src/OSPSuite.Core/CoreConstants.cs rename to src/OSPSuite.Core/PKSimCoreConstants.cs index c2b634b82..150d76550 100644 --- a/src/OSPSuite.Core/CoreConstants.cs +++ b/src/OSPSuite.Core/PKSimCoreConstants.cs @@ -7,7 +7,7 @@ namespace OSPSuite.Core { - public static class CoreConstants + public static class PKSimCoreConstants { // TODO: remove common code from PK-sim when this is promoted to Core From c2147c0c61945af7e3021109f9143e7cb00a6e4c Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Fri, 25 Nov 2022 12:01:40 +0100 Subject: [PATCH 04/42] adding the serializer initial implementation --- ...ExpressionProfileBuildingBlockXmlSerializer.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/OSPSuite.Core/Serialization/Xml/ExpressionProfileBuildingBlockXmlSerializer.cs diff --git a/src/OSPSuite.Core/Serialization/Xml/ExpressionProfileBuildingBlockXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/ExpressionProfileBuildingBlockXmlSerializer.cs new file mode 100644 index 000000000..edc578eda --- /dev/null +++ b/src/OSPSuite.Core/Serialization/Xml/ExpressionProfileBuildingBlockXmlSerializer.cs @@ -0,0 +1,15 @@ +using System.Xml.Linq; +using OSPSuite.Core.Domain; +using OSPSuite.Core.Domain.Builder; + +namespace OSPSuite.Core.Serialization.Xml +{ + public class ExpressionProfileBuildingBlockXmlSerializer : BuildingBlockXmlSerializer + { + public override void PerformMapping() + { + Map(x => x.Id); + Map(x => x.Name); + } + } +} \ No newline at end of file From cfac6336a20a371ac8127b1be7d5e81359c72177 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Mon, 28 Nov 2022 11:01:14 +0100 Subject: [PATCH 05/42] trying to update expression profile --- .../Domain/Builder/ExpressionTypes.cs | 35 ++++++++++++++----- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs index 9290e488e..56f836807 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs @@ -4,24 +4,41 @@ namespace OSPSuite.Core.Domain.Builder { - public static class ExpressionTypes + public static class TempAssets { - public static ExpressionType TransportProtein = new ExpressionType(_transporter); - public static ExpressionType MetabolizingEnzyme = new ExpressionType(_enzyme); - public static ExpressionType ProteinBindingPartner = new ExpressionType(_protein); + public static class Captions + { + public static readonly string Species = "Species"; + public static readonly string Category = "Category"; + + public static string Transporter = "Transporter"; + public static string Protein = "Protein"; + public static string Enzyme = "Enzyme"; + } - private const string _transporter = "Transporter"; - private const string _protein = "Protein"; - private const string _enzyme = "Enzyme"; + public static class IconNames + { + public static string Transporter = "Transporter"; + public static string Protein = "Protein"; + public static string Enzyme = "Enzyme"; + } + } + + public static class ExpressionTypes + { + public static ExpressionType TransportProtein = new ExpressionType(TempAssets.IconNames.Transporter, TempAssets.Captions.Transporter); + public static ExpressionType MetabolizingEnzyme = new ExpressionType(TempAssets.IconNames.Enzyme, TempAssets.Captions.Enzyme); + public static ExpressionType ProteinBindingPartner = new ExpressionType(TempAssets.IconNames.Protein, TempAssets.Captions.Protein); } public class ExpressionType { public string IconName { get; } - - public ExpressionType(string iconName) + public string DisplayName { get; } + public ExpressionType(string iconName, string displayName) { IconName = iconName; + DisplayName = displayName; } } } From 462e0b7580cc8171a6925d71798d1bb95027f523 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Mon, 28 Nov 2022 12:16:59 +0100 Subject: [PATCH 06/42] updating the serializer --- .../Serialization/Xml/BuildingBlockXmlSerializer.cs | 4 ++++ .../Xml/ExpressionProfileBuildingBlockXmlSerializer.cs | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/OSPSuite.Core/Serialization/Xml/BuildingBlockXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/BuildingBlockXmlSerializer.cs index f49ceac5c..dc1796a97 100644 --- a/src/OSPSuite.Core/Serialization/Xml/BuildingBlockXmlSerializer.cs +++ b/src/OSPSuite.Core/Serialization/Xml/BuildingBlockXmlSerializer.cs @@ -98,6 +98,10 @@ public override void PerformMapping() } } + public class ExpressionProfileBuildingBlockXmlSerializer : StartValuesBuildingBlockXmlSerializer + { + } + public class MoleculeStartValuesBuildingBlockXmlSerializer : StartValuesBuildingBlockXmlSerializer { } diff --git a/src/OSPSuite.Core/Serialization/Xml/ExpressionProfileBuildingBlockXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/ExpressionProfileBuildingBlockXmlSerializer.cs index edc578eda..51843ff0c 100644 --- a/src/OSPSuite.Core/Serialization/Xml/ExpressionProfileBuildingBlockXmlSerializer.cs +++ b/src/OSPSuite.Core/Serialization/Xml/ExpressionProfileBuildingBlockXmlSerializer.cs @@ -2,6 +2,7 @@ using OSPSuite.Core.Domain; using OSPSuite.Core.Domain.Builder; +/* namespace OSPSuite.Core.Serialization.Xml { public class ExpressionProfileBuildingBlockXmlSerializer : BuildingBlockXmlSerializer @@ -12,4 +13,4 @@ public override void PerformMapping() Map(x => x.Name); } } -} \ No newline at end of file +}*/ \ No newline at end of file From 07e127ffca5e5caf5bb4700d3d86480aedf2add7 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Thu, 1 Dec 2022 09:26:57 +0100 Subject: [PATCH 07/42] temporarily hard coding the icon name --- .../Domain/Builder/ExpressionProfileBuildingBlock.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs index a2fb0e191..e9e6663dc 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs @@ -8,7 +8,7 @@ namespace OSPSuite.Core.Domain.Builder { public class ExpressionProfileBuildingBlock : StartValueBuildingBlock { - public override string Icon => Type.IconName; + public override string Icon => TempAssets.IconNames.Enzyme; public virtual string MoleculeName { get; private set; } From 90acbf23bbb2bc026a2cca5b0adb5f3b885c5ffa Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Thu, 1 Dec 2022 14:58:38 +0100 Subject: [PATCH 08/42] expanding ExpressionParameter --- .../Domain/Builder/ExpressionParameter.cs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs index 41fdd29aa..f11b4c393 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; +using OSPSuite.Core.Extensions; namespace OSPSuite.Core.Domain.Builder { @@ -10,5 +8,15 @@ public class ExpressionParameter : PathAndValueEntity, IStartValue /// Do not use! When refactoring on promotion to core, this should be removed /// public double? StartValue { get; set; } + + public ExpressionParameter(IParameter parameter) + { + Name = parameter.Name; + StartValue = parameter.Value; + Formula = parameter.Formula; + Path = new ObjectPath(parameter.EntityPath().ToPathArray()); + Dimension = parameter.Dimension; + DisplayUnit = parameter.DisplayUnit; + } } } From 963a13cf52f4b5ac4e2b5af734219a77cb073df8 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Fri, 2 Dec 2022 12:05:06 +0100 Subject: [PATCH 09/42] ExpressionParameter serializer test --- .../Xml/ExpressionParameterXmlSerializer.cs | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs diff --git a/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs new file mode 100644 index 000000000..cbb5ca0bd --- /dev/null +++ b/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs @@ -0,0 +1,30 @@ +using System.Xml.Linq; +using OSPSuite.Core.Domain.Builder; +using OSPSuite.Core.Serialization.Xml.Extensions; + +namespace OSPSuite.Core.Serialization.Xml +{ + public abstract class ExpressionParameterXmlSerializer : EntityXmlSerializer where T : ExpressionParameter + { + public override void PerformMapping() + { + base.PerformMapping(); + Map(x => x.Dimension); + Map(x => x.ContainerPath); + Map(x => x.StartValue); + MapReference(x => x.Formula); + } + + protected override void TypedDeserialize(T startValue, XElement startValueElement, SerializationContext serializationContext) + { + base.TypedDeserialize(startValue, startValueElement, serializationContext); + startValueElement.UpdateDisplayUnit(startValue); + } + + protected override XElement TypedSerialize(T startValue, SerializationContext serializationContext) + { + var startValueElement = base.TypedSerialize(startValue, serializationContext); + return startValueElement.AddDisplayUnitFor(startValue); + } + } +} \ No newline at end of file From 95f6551cf9ae306f8476f8a7554a07b7e93ab6ce Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Fri, 2 Dec 2022 12:27:38 +0100 Subject: [PATCH 10/42] second try --- .../Xml/ExpressionParameterXmlSerializer.cs | 6 ++-- .../Xml/PathAndValueEntityXmlSerializer.cs | 30 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs diff --git a/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs index cbb5ca0bd..d8a373ea4 100644 --- a/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs +++ b/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs @@ -1,10 +1,11 @@ +/* using System.Xml.Linq; using OSPSuite.Core.Domain.Builder; using OSPSuite.Core.Serialization.Xml.Extensions; namespace OSPSuite.Core.Serialization.Xml { - public abstract class ExpressionParameterXmlSerializer : EntityXmlSerializer where T : ExpressionParameter + public abstract class ExpressionParameterXmlSerializer : PathAndValueEntityXmlSerializer { public override void PerformMapping() { @@ -27,4 +28,5 @@ protected override XElement TypedSerialize(T startValue, SerializationContext se return startValueElement.AddDisplayUnitFor(startValue); } } -} \ No newline at end of file +} +*/ \ No newline at end of file diff --git a/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs new file mode 100644 index 000000000..876588e98 --- /dev/null +++ b/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs @@ -0,0 +1,30 @@ +using System.Xml.Linq; +using OSPSuite.Core.Domain.Builder; +using OSPSuite.Core.Serialization.Xml.Extensions; + +namespace OSPSuite.Core.Serialization.Xml +{ + public abstract class PathAndValueEntityXmlSerializer : EntityXmlSerializer where T : ExpressionParameter + { + public override void PerformMapping() + { + base.PerformMapping(); + Map(x => x.Dimension); + Map(x => x.ContainerPath); + Map(x => x.StartValue); + MapReference(x => x.Formula); + } + + protected override void TypedDeserialize(T startValue, XElement startValueElement, SerializationContext serializationContext) + { + base.TypedDeserialize(startValue, startValueElement, serializationContext); + startValueElement.UpdateDisplayUnit(startValue); + } + + protected override XElement TypedSerialize(T startValue, SerializationContext serializationContext) + { + var startValueElement = base.TypedSerialize(startValue, serializationContext); + return startValueElement.AddDisplayUnitFor(startValue); + } + } +} \ No newline at end of file From 7ef3ecce81222a00772ecf997fa51ee3b483782d Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Fri, 2 Dec 2022 12:49:40 +0100 Subject: [PATCH 11/42] third try --- .../Xml/ExpressionParameterXmlSerializer.cs | 19 +------------------ .../Xml/PathAndValueEntityXmlSerializer.cs | 1 - 2 files changed, 1 insertion(+), 19 deletions(-) diff --git a/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs index d8a373ea4..df2d85b2c 100644 --- a/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs +++ b/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs @@ -1,32 +1,15 @@ -/* using System.Xml.Linq; using OSPSuite.Core.Domain.Builder; using OSPSuite.Core.Serialization.Xml.Extensions; namespace OSPSuite.Core.Serialization.Xml { - public abstract class ExpressionParameterXmlSerializer : PathAndValueEntityXmlSerializer + public abstract class ExpressionParameterXmlSerializer : PathAndValueEntityXmlSerializer { public override void PerformMapping() { base.PerformMapping(); - Map(x => x.Dimension); - Map(x => x.ContainerPath); Map(x => x.StartValue); - MapReference(x => x.Formula); - } - - protected override void TypedDeserialize(T startValue, XElement startValueElement, SerializationContext serializationContext) - { - base.TypedDeserialize(startValue, startValueElement, serializationContext); - startValueElement.UpdateDisplayUnit(startValue); - } - - protected override XElement TypedSerialize(T startValue, SerializationContext serializationContext) - { - var startValueElement = base.TypedSerialize(startValue, serializationContext); - return startValueElement.AddDisplayUnitFor(startValue); } } } -*/ \ No newline at end of file diff --git a/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs index 876588e98..daecdbc9f 100644 --- a/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs +++ b/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs @@ -11,7 +11,6 @@ public override void PerformMapping() base.PerformMapping(); Map(x => x.Dimension); Map(x => x.ContainerPath); - Map(x => x.StartValue); MapReference(x => x.Formula); } From 2f11ce958642ad0200cd7d1beac1517a29cdc18d Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Fri, 2 Dec 2022 13:13:27 +0100 Subject: [PATCH 12/42] fourth try --- .../Xml/ExpressionParameterXmlSerializer.cs | 4 +--- .../Xml/PathAndValueEntityXmlSerializer.cs | 16 +--------------- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs index df2d85b2c..df72db5cf 100644 --- a/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs +++ b/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs @@ -1,10 +1,8 @@ -using System.Xml.Linq; using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Serialization.Xml.Extensions; namespace OSPSuite.Core.Serialization.Xml { - public abstract class ExpressionParameterXmlSerializer : PathAndValueEntityXmlSerializer + public abstract class ExpressionParameterXmlSerialize : PathAndValueEntityXmlSerializer { public override void PerformMapping() { diff --git a/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs index daecdbc9f..779edc6f1 100644 --- a/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs +++ b/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs @@ -1,10 +1,8 @@ -using System.Xml.Linq; using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Serialization.Xml.Extensions; namespace OSPSuite.Core.Serialization.Xml { - public abstract class PathAndValueEntityXmlSerializer : EntityXmlSerializer where T : ExpressionParameter + public abstract class PathAndValueEntityXmlSerializer : EntityXmlSerializer where T : PathAndValueEntity { public override void PerformMapping() { @@ -13,17 +11,5 @@ public override void PerformMapping() Map(x => x.ContainerPath); MapReference(x => x.Formula); } - - protected override void TypedDeserialize(T startValue, XElement startValueElement, SerializationContext serializationContext) - { - base.TypedDeserialize(startValue, startValueElement, serializationContext); - startValueElement.UpdateDisplayUnit(startValue); - } - - protected override XElement TypedSerialize(T startValue, SerializationContext serializationContext) - { - var startValueElement = base.TypedSerialize(startValue, serializationContext); - return startValueElement.AddDisplayUnitFor(startValue); - } } } \ No newline at end of file From 5d1e03a5def5e2714537607a169a62ad0eb20492 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Fri, 2 Dec 2022 13:31:32 +0100 Subject: [PATCH 13/42] fifth try --- .../Xml/ExpressionParameterXmlSerializer.cs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs index df72db5cf..b3fe964c7 100644 --- a/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs +++ b/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs @@ -1,7 +1,10 @@ using OSPSuite.Core.Domain.Builder; +using OSPSuite.Core.Serialization.Xml.Extensions; +using System.Xml.Linq; namespace OSPSuite.Core.Serialization.Xml { + /* public abstract class ExpressionParameterXmlSerialize : PathAndValueEntityXmlSerializer { public override void PerformMapping() @@ -10,4 +13,29 @@ public override void PerformMapping() Map(x => x.StartValue); } } + */ + + public abstract class ExpressionParameterXmlSerialize : EntityXmlSerializer where T : ExpressionParameter + { + public override void PerformMapping() + { + base.PerformMapping(); + Map(x => x.Dimension); + Map(x => x.ContainerPath); + Map(x => x.StartValue); + MapReference(x => x.Formula); + } + + protected override void TypedDeserialize(T startValue, XElement startValueElement, SerializationContext serializationContext) + { + base.TypedDeserialize(startValue, startValueElement, serializationContext); + startValueElement.UpdateDisplayUnit(startValue); + } + + protected override XElement TypedSerialize(T startValue, SerializationContext serializationContext) + { + var startValueElement = base.TypedSerialize(startValue, serializationContext); + return startValueElement.AddDisplayUnitFor(startValue); + } + } } From 558beed1134bf1574feabdf3214dc44d782767cc Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Fri, 2 Dec 2022 15:38:32 +0100 Subject: [PATCH 14/42] sixth try --- .../Serialization/Xml/PathAndValueEntityXmlSerializer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs index 779edc6f1..6be78189e 100644 --- a/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs +++ b/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs @@ -2,7 +2,7 @@ namespace OSPSuite.Core.Serialization.Xml { - public abstract class PathAndValueEntityXmlSerializer : EntityXmlSerializer where T : PathAndValueEntity + public class PathAndValueEntityXmlSerializer : EntityXmlSerializer where T : PathAndValueEntity { public override void PerformMapping() { From 3c5e3901f1544df94447e3d796e419727d0cc8c7 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Fri, 2 Dec 2022 15:55:27 +0100 Subject: [PATCH 15/42] removing abstract identifier --- .../Serialization/Xml/ExpressionParameterXmlSerializer.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs index b3fe964c7..4c896c359 100644 --- a/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs +++ b/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs @@ -4,8 +4,7 @@ namespace OSPSuite.Core.Serialization.Xml { - /* - public abstract class ExpressionParameterXmlSerialize : PathAndValueEntityXmlSerializer + public class ExpressionParameterXmlSerialize : PathAndValueEntityXmlSerializer { public override void PerformMapping() { @@ -13,8 +12,8 @@ public override void PerformMapping() Map(x => x.StartValue); } } - */ - + + /* public abstract class ExpressionParameterXmlSerialize : EntityXmlSerializer where T : ExpressionParameter { public override void PerformMapping() @@ -38,4 +37,5 @@ protected override XElement TypedSerialize(T startValue, SerializationContext se return startValueElement.AddDisplayUnitFor(startValue); } } + */ } From 09b27b34dd47edb0a7938e49541f38c7f2093d9e Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Fri, 2 Dec 2022 16:14:16 +0100 Subject: [PATCH 16/42] adding ExpressionParameter empty constructor --- src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs index f11b4c393..a453909f5 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs @@ -18,5 +18,9 @@ public ExpressionParameter(IParameter parameter) Dimension = parameter.Dimension; DisplayUnit = parameter.DisplayUnit; } + + public ExpressionParameter() + { + } } } From 8060d227d874e93dfdf4af3655beff150b70ec69 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Fri, 2 Dec 2022 17:28:11 +0100 Subject: [PATCH 17/42] skipping formulas with value only --- src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs index a453909f5..24b2a015a 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs @@ -12,8 +12,13 @@ public class ExpressionParameter : PathAndValueEntity, IStartValue public ExpressionParameter(IParameter parameter) { Name = parameter.Name; - StartValue = parameter.Value; - Formula = parameter.Formula; + + //not sure we need to be checking hte if else here + if (parameter.Formula == null) + StartValue = parameter.Value; + else + Formula = parameter.Formula; + Path = new ObjectPath(parameter.EntityPath().ToPathArray()); Dimension = parameter.Dimension; DisplayUnit = parameter.DisplayUnit; From 238d84ac5fb67c40e20d6a6968300ec706fc9935 Mon Sep 17 00:00:00 2001 From: Robert McIntosh <261477+rwmcintosh@users.noreply.github.com> Date: Mon, 28 Nov 2022 12:55:42 -0500 Subject: [PATCH 18/42] Create OSMOSES branch --- appveyor.yml | 6 ++--- rakefile.rb | 66 ++++++++++++++++++++++++++++++---------------------- 2 files changed, 41 insertions(+), 31 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index cb9a54d03..d39bb3879 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -27,9 +27,9 @@ before_build: - nuget restore build: - publish_nuget: true + publish_nuget: false verbosity: minimal - publish_nuget_symbols: true + publish_nuget_symbols: false use_snupkg_format: true project: OSPSuite.Core.sln @@ -39,7 +39,7 @@ pull_requests: do_not_increment_build_number: true nuget: - disable_publish_on_pr: false + disable_publish_on_pr: true skip_tags: true diff --git a/rakefile.rb b/rakefile.rb index 735a43b62..455535fda 100644 --- a/rakefile.rb +++ b/rakefile.rb @@ -26,32 +26,42 @@ Coverage.cover(filter, targetProjects) end - task :copy_to_pksim do - copy_to_app '../PK-Sim/src/PKSim/bin/Debug/net472' - end - - task :copy_to_mobi do - copy_to_app '../MoBi/src/MoBi/bin/Debug/net472' - end - - private - - def copy_to_app(app_target_relative_path) - app_target_path = File.join(solution_dir, app_target_relative_path) - source_dir = File.join(tests_dir, 'OSPSuite.Starter', 'bin', 'Debug', "net472") - - copy_dependencies source_dir, app_target_path do - copy_file 'OSPSuite.*.dll' - copy_file 'OSPSuite.*.pdb' - end - - end - - def solution_dir - File.dirname(__FILE__) - end - - def tests_dir - File.join(solution_dir, 'tests') - end +task :copy_to_pksim do + copy_to_app '../PK-Sim/src/PKSim/bin/Debug/net472' +end + +task :copy_to_mobi do + copy_to_app '../MoBi/src/MoBi/bin/Debug/net472' +end + +task :create_local_nuget do + versionId = "12.0.0-" + generate_code(5) + puts("Your version is " + versionId) + exec("dotnet", "pack", "-p:PackageVersion="+ versionId, "--configuration", "Debug", "--output", "nuget_repo", "--no-build") +end + +private +def generate_code(number) + charset = Array('A'..'Z') + Array('a'..'z') + Array.new(number) { charset.sample }.join +end + +def copy_to_app(app_target_relative_path) + app_target_path = File.join(solution_dir, app_target_relative_path) + source_dir = File.join(tests_dir, 'OSPSuite.Starter', 'bin', 'Debug', "net472") + + copy_dependencies source_dir, app_target_path do + copy_file 'OSPSuite.*.dll' + copy_file 'OSPSuite.*.pdb' +end + +end + +def solution_dir + File.dirname(__FILE__) +end + +def tests_dir + File.join(solution_dir, 'tests') +end \ No newline at end of file From f52eedccb6394d66b9077c7d5b5e317a7191a48a Mon Sep 17 00:00:00 2001 From: Robert McIntosh <261477+rwmcintosh@users.noreply.github.com> Date: Mon, 28 Nov 2022 13:18:21 -0500 Subject: [PATCH 19/42] remove older nupkg files for each deploy --- rakefile.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/rakefile.rb b/rakefile.rb index 455535fda..09b41dcb6 100644 --- a/rakefile.rb +++ b/rakefile.rb @@ -35,6 +35,7 @@ end task :create_local_nuget do + FileUtils.rm_f Dir.glob("./nuget_repo/*.nupkg") versionId = "12.0.0-" + generate_code(5) puts("Your version is " + versionId) exec("dotnet", "pack", "-p:PackageVersion="+ versionId, "--configuration", "Debug", "--output", "nuget_repo", "--no-build") From 8ab5a1cc73c0b1a636c591ea04aa7f1bd1755bd2 Mon Sep 17 00:00:00 2001 From: Robert McIntosh <261477+rwmcintosh@users.noreply.github.com> Date: Mon, 28 Nov 2022 13:32:45 -0500 Subject: [PATCH 20/42] update build-scripts --- scripts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts b/scripts index 8a4929193..53de3bec3 160000 --- a/scripts +++ b/scripts @@ -1 +1 @@ -Subproject commit 8a49291933a14f17f25a6112507ce466bb2805da +Subproject commit 53de3bec323595b9997c153d2876fb4ccd5fb5a8 From e15836a329d57a628d39bc3ed71a07c3c53ed7d8 Mon Sep 17 00:00:00 2001 From: Robert McIntosh <261477+rwmcintosh@users.noreply.github.com> Date: Tue, 29 Nov 2022 06:15:13 -0500 Subject: [PATCH 21/42] automatically update applications with -m -p arguments --- rakefile.rb | 51 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/rakefile.rb b/rakefile.rb index 09b41dcb6..e3aa93dbd 100644 --- a/rakefile.rb +++ b/rakefile.rb @@ -34,14 +34,59 @@ copy_to_app '../MoBi/src/MoBi/bin/Debug/net472' end -task :create_local_nuget do +task :create_local_nuget, [:arg1, :arg2] do |t, args| FileUtils.rm_f Dir.glob("./nuget_repo/*.nupkg") versionId = "12.0.0-" + generate_code(5) - puts("Your version is " + versionId) - exec("dotnet", "pack", "-p:PackageVersion="+ versionId, "--configuration", "Debug", "--output", "nuget_repo", "--no-build") + puts("Your version is " + versionId.red) + system("dotnet", "pack", "-p:PackageVersion="+ versionId, "--configuration", "Debug", "--output", "nuget_repo", "--no-build") + + if args.to_hash.values.include? "-m" + update_mobi(versionId) + end + if args.to_hash.values.include? "-p" + update_pksim(versionId) + end + end private +def find_token(file, regex) + file_content = str = IO.read(file) + matches = file_content.match(regex) + + if(matches.nil?) + return nil + end + return matches[1] +end + +def update_mobi(versionId) + puts("updating MoBi") + token = find_token("../MoBi/src/MoBi/MoBi.csproj", / versionId}, file) + end + +end + +def update_pksim(versionId) + puts("updating PKSim") + token = find_token("../PK-Sim/src/PKSim/PKSim.csproj", / versionId}, file) + end +end + def generate_code(number) charset = Array('A'..'Z') + Array('a'..'z') Array.new(number) { charset.sample }.join From 296fc0d4ac8be07a5753aab6fe604dd1e9b712de Mon Sep 17 00:00:00 2001 From: Robert McIntosh <261477+rwmcintosh@users.noreply.github.com> Date: Tue, 29 Nov 2022 09:28:32 -0500 Subject: [PATCH 22/42] add batch files for rake tasks --- nuget_to_mobi.bat | 4 ++++ nuget_to_pksim.bat | 4 ++++ 2 files changed, 8 insertions(+) create mode 100644 nuget_to_mobi.bat create mode 100644 nuget_to_pksim.bat diff --git a/nuget_to_mobi.bat b/nuget_to_mobi.bat new file mode 100644 index 000000000..f68c270ea --- /dev/null +++ b/nuget_to_mobi.bat @@ -0,0 +1,4 @@ +@echo off +cls +rake create_local_nuget[-m] +pause \ No newline at end of file diff --git a/nuget_to_pksim.bat b/nuget_to_pksim.bat new file mode 100644 index 000000000..2f5bab19e --- /dev/null +++ b/nuget_to_pksim.bat @@ -0,0 +1,4 @@ +@echo off +cls +rake create_local_nuget[-p] +pause \ No newline at end of file From c7fd51aec0f677f96115f511086e9073fccfc24b Mon Sep 17 00:00:00 2001 From: Robert McIntosh <261477+rwmcintosh@users.noreply.github.com> Date: Fri, 2 Dec 2022 15:10:39 -0500 Subject: [PATCH 23/42] working import/export --- scripts | 2 +- src/OSPSuite.Assets/UIConstants.cs | 2 ++ .../ExpressionProfileDiffBuilder.cs | 19 +++++++++++++ .../Domain/Builder/ExpressionParameter.cs | 22 +++++---------- .../Xml/ExpressionParameterXmlSerializer.cs | 28 +------------------ .../Xml/PathAndValueEntityXmlSerializer.cs | 2 +- 6 files changed, 31 insertions(+), 44 deletions(-) create mode 100644 src/OSPSuite.Core/Comparison/ExpressionProfileDiffBuilder.cs diff --git a/scripts b/scripts index 53de3bec3..8a4929193 160000 --- a/scripts +++ b/scripts @@ -1 +1 @@ -Subproject commit 53de3bec323595b9997c153d2876fb4ccd5fb5a8 +Subproject commit 8a49291933a14f17f25a6112507ce466bb2805da diff --git a/src/OSPSuite.Assets/UIConstants.cs b/src/OSPSuite.Assets/UIConstants.cs index 0fd31f7a9..1a6aca222 100644 --- a/src/OSPSuite.Assets/UIConstants.cs +++ b/src/OSPSuite.Assets/UIConstants.cs @@ -18,6 +18,8 @@ public static class SizeAndLocation public static class Captions { + public static readonly string Species = "Species"; + public static readonly string Category = "Category"; public static readonly string ConfirmationDialog = "Confirmation"; public static readonly string Excel = "Excel®"; public static readonly string EmptyColumn = " "; diff --git a/src/OSPSuite.Core/Comparison/ExpressionProfileDiffBuilder.cs b/src/OSPSuite.Core/Comparison/ExpressionProfileDiffBuilder.cs new file mode 100644 index 000000000..1809e62a6 --- /dev/null +++ b/src/OSPSuite.Core/Comparison/ExpressionProfileDiffBuilder.cs @@ -0,0 +1,19 @@ +using OSPSuite.Core.Domain.Builder; + +namespace OSPSuite.Core.Comparison +{ + public class ExpressionProfileBuildingBlockDiffBuilder : StartValueBuildingBlockDiffBuilder + { + public ExpressionProfileBuildingBlockDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, EnumerableComparer enumerableComparer) : base(objectBaseDiffBuilder, enumerableComparer) + { + } + } + + internal class ExpressionParameterDiffBuilder : StartValueDiffBuilder + { + + public ExpressionParameterDiffBuilder(IObjectComparer objectComparer, EntityDiffBuilder entityDiffBuilder, WithValueOriginComparison valueOriginComparison) : base(objectComparer, entityDiffBuilder, valueOriginComparison) + { + } + } +} diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs index 24b2a015a..08fd4b9d8 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs @@ -1,4 +1,5 @@ -using OSPSuite.Core.Extensions; +using OSPSuite.Core.Domain.Services; +using OSPSuite.Core.Extensions; namespace OSPSuite.Core.Domain.Builder { @@ -9,23 +10,14 @@ public class ExpressionParameter : PathAndValueEntity, IStartValue /// public double? StartValue { get; set; } - public ExpressionParameter(IParameter parameter) + public override void UpdatePropertiesFrom(IUpdatable source, ICloneManager cloneManager) { - Name = parameter.Name; + base.UpdatePropertiesFrom(source, cloneManager); - //not sure we need to be checking hte if else here - if (parameter.Formula == null) - StartValue = parameter.Value; - else - Formula = parameter.Formula; - - Path = new ObjectPath(parameter.EntityPath().ToPathArray()); - Dimension = parameter.Dimension; - DisplayUnit = parameter.DisplayUnit; - } + if (!(source is ExpressionParameter sourceExpressionParameter)) + return; - public ExpressionParameter() - { + StartValue = sourceExpressionParameter.StartValue; } } } diff --git a/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs index 4c896c359..1b282a9cf 100644 --- a/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs +++ b/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs @@ -4,7 +4,7 @@ namespace OSPSuite.Core.Serialization.Xml { - public class ExpressionParameterXmlSerialize : PathAndValueEntityXmlSerializer + public class ExpressionParameterXmlSerializer : PathAndValueEntityXmlSerializer { public override void PerformMapping() { @@ -12,30 +12,4 @@ public override void PerformMapping() Map(x => x.StartValue); } } - - /* - public abstract class ExpressionParameterXmlSerialize : EntityXmlSerializer where T : ExpressionParameter - { - public override void PerformMapping() - { - base.PerformMapping(); - Map(x => x.Dimension); - Map(x => x.ContainerPath); - Map(x => x.StartValue); - MapReference(x => x.Formula); - } - - protected override void TypedDeserialize(T startValue, XElement startValueElement, SerializationContext serializationContext) - { - base.TypedDeserialize(startValue, startValueElement, serializationContext); - startValueElement.UpdateDisplayUnit(startValue); - } - - protected override XElement TypedSerialize(T startValue, SerializationContext serializationContext) - { - var startValueElement = base.TypedSerialize(startValue, serializationContext); - return startValueElement.AddDisplayUnitFor(startValue); - } - } - */ } diff --git a/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs index 6be78189e..779edc6f1 100644 --- a/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs +++ b/src/OSPSuite.Core/Serialization/Xml/PathAndValueEntityXmlSerializer.cs @@ -2,7 +2,7 @@ namespace OSPSuite.Core.Serialization.Xml { - public class PathAndValueEntityXmlSerializer : EntityXmlSerializer where T : PathAndValueEntity + public abstract class PathAndValueEntityXmlSerializer : EntityXmlSerializer where T : PathAndValueEntity { public override void PerformMapping() { From 7bd37bd2d83e239768046ab4c1532ae110008b6d Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Mon, 5 Dec 2022 11:25:04 +0100 Subject: [PATCH 24/42] resharper --- .../Domain/Builder/ExpressionParameter.cs | 7 +++---- .../Domain/Builder/ExpressionProfileBuildingBlock.cs | 6 +----- src/OSPSuite.Core/Domain/Builder/PathAndValueEntity.cs | 10 ++++------ .../Xml/ExpressionParameterXmlSerializer.cs | 4 +--- 4 files changed, 9 insertions(+), 18 deletions(-) diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs index 08fd4b9d8..cb7814211 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionParameter.cs @@ -1,12 +1,11 @@ using OSPSuite.Core.Domain.Services; -using OSPSuite.Core.Extensions; namespace OSPSuite.Core.Domain.Builder { public class ExpressionParameter : PathAndValueEntity, IStartValue { /// - /// Do not use! When refactoring on promotion to core, this should be removed + /// Do not use! When refactoring on promotion to core, this should be removed /// public double? StartValue { get; set; } @@ -14,10 +13,10 @@ public override void UpdatePropertiesFrom(IUpdatable source, ICloneManager clone { base.UpdatePropertiesFrom(source, cloneManager); - if (!(source is ExpressionParameter sourceExpressionParameter)) + if (!(source is ExpressionParameter sourceExpressionParameter)) return; StartValue = sourceExpressionParameter.StartValue; } } -} +} \ No newline at end of file diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs index e9e6663dc..1e23f0a26 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs @@ -1,8 +1,4 @@ using OSPSuite.Core.Domain.Services; -using System; -using System.Collections.Generic; -using System.Linq.Expressions; -using System.Text; namespace OSPSuite.Core.Domain.Builder { @@ -51,4 +47,4 @@ public override void UpdatePropertiesFrom(IUpdatable source, ICloneManager clone Name = sourceExpressionProfile.Name; } } -} +} \ No newline at end of file diff --git a/src/OSPSuite.Core/Domain/Builder/PathAndValueEntity.cs b/src/OSPSuite.Core/Domain/Builder/PathAndValueEntity.cs index ac760b010..8afb73efc 100644 --- a/src/OSPSuite.Core/Domain/Builder/PathAndValueEntity.cs +++ b/src/OSPSuite.Core/Domain/Builder/PathAndValueEntity.cs @@ -1,10 +1,8 @@ -using OSPSuite.Core.Domain.Formulas; +using System; +using System.Linq; +using OSPSuite.Core.Domain.Formulas; using OSPSuite.Core.Domain.Services; using OSPSuite.Core.Domain.UnitSystem; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; namespace OSPSuite.Core.Domain.Builder { @@ -150,4 +148,4 @@ public override void UpdatePropertiesFrom(IUpdatable source, ICloneManager clone public override string ToString() => $"Path={ContainerPath}, Name={Name}"; } -} +} \ No newline at end of file diff --git a/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs index 1b282a9cf..1a1888938 100644 --- a/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs +++ b/src/OSPSuite.Core/Serialization/Xml/ExpressionParameterXmlSerializer.cs @@ -1,6 +1,4 @@ using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Serialization.Xml.Extensions; -using System.Xml.Linq; namespace OSPSuite.Core.Serialization.Xml { @@ -12,4 +10,4 @@ public override void PerformMapping() Map(x => x.StartValue); } } -} +} \ No newline at end of file From 6ea0bb07f8d8f62a825eac471d3cc4c9918cb4b0 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Mon, 5 Dec 2022 12:33:07 +0100 Subject: [PATCH 25/42] building --- src/OSPSuite.Core/Comparison/ExpressionProfileDiffBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OSPSuite.Core/Comparison/ExpressionProfileDiffBuilder.cs b/src/OSPSuite.Core/Comparison/ExpressionProfileDiffBuilder.cs index 1809e62a6..e45b48606 100644 --- a/src/OSPSuite.Core/Comparison/ExpressionProfileDiffBuilder.cs +++ b/src/OSPSuite.Core/Comparison/ExpressionProfileDiffBuilder.cs @@ -5,7 +5,7 @@ namespace OSPSuite.Core.Comparison public class ExpressionProfileBuildingBlockDiffBuilder : StartValueBuildingBlockDiffBuilder { public ExpressionProfileBuildingBlockDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, EnumerableComparer enumerableComparer) : base(objectBaseDiffBuilder, enumerableComparer) - { + { } } From dc0208fb73697e567f35d0b26a89cab6b8e90f92 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Tue, 6 Dec 2022 09:16:48 +0100 Subject: [PATCH 26/42] building --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index d39bb3879..8a19c86c5 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -36,7 +36,7 @@ build: skip_branch_with_pr: true pull_requests: - do_not_increment_build_number: true + do_not_increment_build_number: false nuget: disable_publish_on_pr: true From ff6c5938e66f09bd741694e79d9ec9ff5e76e402 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Tue, 6 Dec 2022 15:41:14 +0100 Subject: [PATCH 27/42] building --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 8a19c86c5..ec84b590c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -27,7 +27,7 @@ before_build: - nuget restore build: - publish_nuget: false + publish_nuget: true verbosity: minimal publish_nuget_symbols: false use_snupkg_format: true From aef63b07937c73941458dd5343b15ad648ed9196 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Tue, 6 Dec 2022 22:20:04 +0100 Subject: [PATCH 28/42] adding tests for ExpressionProfileBuildingBlock --- .../Builder/ExpressionProfileBuildingBlock.cs | 2 +- .../ExpressionProfileBuildingBlockSpecs.cs | 91 +++++++++++++++++++ .../ModelHelperForSpecs.cs | 3 + 3 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 tests/OSPSuite.Core.Tests/Domain/ExpressionProfileBuildingBlockSpecs.cs diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs index 1e23f0a26..8f5023390 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs @@ -4,7 +4,7 @@ namespace OSPSuite.Core.Domain.Builder { public class ExpressionProfileBuildingBlock : StartValueBuildingBlock { - public override string Icon => TempAssets.IconNames.Enzyme; + public override string Icon { set; get; } //TODO: temporarily not deducted from Type, because of serialization. possibly changing the order of definition could help public virtual string MoleculeName { get; private set; } diff --git a/tests/OSPSuite.Core.Tests/Domain/ExpressionProfileBuildingBlockSpecs.cs b/tests/OSPSuite.Core.Tests/Domain/ExpressionProfileBuildingBlockSpecs.cs new file mode 100644 index 000000000..ee1795aa9 --- /dev/null +++ b/tests/OSPSuite.Core.Tests/Domain/ExpressionProfileBuildingBlockSpecs.cs @@ -0,0 +1,91 @@ +using System.Linq; +using OSPSuite.BDDHelper; +using OSPSuite.BDDHelper.Extensions; +using OSPSuite.Core.Domain.Builder; +using OSPSuite.Core.Domain.Services; +using OSPSuite.Core.Domain.UnitSystem; +using OSPSuite.Helpers; + +namespace OSPSuite.Core.Domain +{ + public class concern_for_ExpressionProfileBuildingBlock : ContextSpecification + { + protected override void Context() + { + sut = new ExpressionProfileBuildingBlock(); + } + } + + public class when_updating_properties_of_building_block : concern_for_ExpressionProfileBuildingBlock + { + private ExpressionProfileBuildingBlock _expressionProfileBuildingBlock; + private ICloneManager _cloneManager; + private IObjectBaseFactory _objectBaseFactory; + private IDataRepositoryTask _repositoryTask; + private IDimensionFactory _dimensionFactory; + + protected override void Context() + { + base.Context(); + _dimensionFactory = new DimensionFactoryForIntegrationTests(); + _dimensionFactory.AddDimension(DomainHelperForSpecs.NoDimension()); + _objectBaseFactory = new ObjectBaseFactoryForSpecs(_dimensionFactory); + _repositoryTask = new DataRepositoryTask(); + _expressionProfileBuildingBlock = new ExpressionProfileBuildingBlock(); + _cloneManager = new CloneManagerForBuildingBlock(_objectBaseFactory, _repositoryTask); + _expressionProfileBuildingBlock.Name = "Molecule|Species|Name"; + _expressionProfileBuildingBlock.Type = ExpressionTypes.MetabolizingEnzyme; + _expressionProfileBuildingBlock.Type = ExpressionTypes.MetabolizingEnzyme; + _expressionProfileBuildingBlock.PKSimVersion = 11; + _expressionProfileBuildingBlock.Add(new ExpressionParameter().WithName("name1")); + } + + protected override void Because() + { + sut.UpdatePropertiesFrom(_expressionProfileBuildingBlock, _cloneManager); + } + + [Observation] + 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); + sut.Count().ShouldBeEqualTo(1); + } + } + + //commenting out, as long as we do not have an icon based on type + /* + public class when_reading_the_icon_name_for_the_building_block : concern_for_ExpressionProfileBuildingBlock + { + [Observation] + public void icon_name_translated_for_each_expression_type() + { + sut.Type = ExpressionTypes.MetabolizingEnzyme; + sut.Icon.ShouldBeEqualTo("Enzyme"); + + sut.Type = ExpressionTypes.TransportProtein; + sut.Icon.ShouldBeEqualTo("Transporter"); + + sut.Type = ExpressionTypes.ProteinBindingPartner; + sut.Icon.ShouldBeEqualTo("Protein"); + } + }*/ + + public class when_setting_the_name_of_the_building_block : concern_for_ExpressionProfileBuildingBlock + { + protected override void Because() + { + sut.Name = "Molecule|Species|Phenotype"; + } + + [Observation] + public void the_name_should_set_the_category_of_the_building_block() + { + sut.Category.ShouldBeEqualTo("Phenotype"); + sut.MoleculeName.ShouldBeEqualTo("Molecule"); + sut.Species.ShouldBeEqualTo("Species"); + } + } +} \ No newline at end of file diff --git a/tests/OSPSuite.HelpersForTests/ModelHelperForSpecs.cs b/tests/OSPSuite.HelpersForTests/ModelHelperForSpecs.cs index f3dd2c522..c6a1dd120 100644 --- a/tests/OSPSuite.HelpersForTests/ModelHelperForSpecs.cs +++ b/tests/OSPSuite.HelpersForTests/ModelHelperForSpecs.cs @@ -1174,6 +1174,9 @@ public T CreateObjectBaseFrom(T sourceObject) if (sourceObject.IsAnImplementationOf()) return new NormalDistributionFormula().WithDimension(_dimensionFactory.NoDimension).WithId(id).DowncastTo(); + if (sourceObject.IsAnImplementationOf()) + return new ExpressionParameter().WithDimension(_dimensionFactory.NoDimension).WithId(id).DowncastTo(); + return default(T); } From 6a5ab62950447f5b5402414675b496b589463a64 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Tue, 6 Dec 2022 22:37:35 +0100 Subject: [PATCH 29/42] corecting appveyor.yml --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index ec84b590c..9ca5444fe 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -29,7 +29,7 @@ before_build: build: publish_nuget: true verbosity: minimal - publish_nuget_symbols: false + publish_nuget_symbols: true use_snupkg_format: true project: OSPSuite.Core.sln @@ -39,7 +39,7 @@ pull_requests: do_not_increment_build_number: false nuget: - disable_publish_on_pr: true + disable_publish_on_pr: false skip_tags: true From 72f26481c4fdc1cefe819d5e44b4fbc1a6e3ffe0 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Tue, 6 Dec 2022 22:50:26 +0100 Subject: [PATCH 30/42] adding serialization test --- ...essionProfileBuildingBlockXmlSerializer.cs | 16 ---------- .../Helpers/AssertForSpecs.cs | 11 +++++++ .../ExpressionParameterXmlSerializerSpecs.cs | 30 +++++++++++++++++++ 3 files changed, 41 insertions(+), 16 deletions(-) delete mode 100644 src/OSPSuite.Core/Serialization/Xml/ExpressionProfileBuildingBlockXmlSerializer.cs create mode 100644 tests/OSPSuite.Core.IntegrationTests/Serializers/ExpressionParameterXmlSerializerSpecs.cs diff --git a/src/OSPSuite.Core/Serialization/Xml/ExpressionProfileBuildingBlockXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/ExpressionProfileBuildingBlockXmlSerializer.cs deleted file mode 100644 index 51843ff0c..000000000 --- a/src/OSPSuite.Core/Serialization/Xml/ExpressionProfileBuildingBlockXmlSerializer.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Xml.Linq; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Builder; - -/* -namespace OSPSuite.Core.Serialization.Xml -{ - public class ExpressionProfileBuildingBlockXmlSerializer : BuildingBlockXmlSerializer - { - public override void PerformMapping() - { - Map(x => x.Id); - Map(x => x.Name); - } - } -}*/ \ No newline at end of file diff --git a/tests/OSPSuite.Core.IntegrationTests/Helpers/AssertForSpecs.cs b/tests/OSPSuite.Core.IntegrationTests/Helpers/AssertForSpecs.cs index bb7fca8ab..da7943f03 100644 --- a/tests/OSPSuite.Core.IntegrationTests/Helpers/AssertForSpecs.cs +++ b/tests/OSPSuite.Core.IntegrationTests/Helpers/AssertForSpecs.cs @@ -1071,6 +1071,17 @@ public static void AreEqualParameterStartValue(IParameterStartValue x1, IParamet AreEqualFormula(x1.Formula, x2.Formula); } + public static void AreEqualExpressionParameters(ExpressionParameter x1, ExpressionParameter x2) + { + if (!AssertBothNotNull(x1, x2)) return; + AreEqualObjectPath(x1.Path, x2.Path); + AssertAreEqualNullableDouble(x1.StartValue, x2.StartValue); + AreEqualUnit(x1.DisplayUnit, x2.DisplayUnit); + AreEqualDimension(x1.Dimension, x2.Dimension); + AssertAreEqual(x1.ValueOrigin, x2.ValueOrigin); + AreEqualFormula(x1.Formula, x2.Formula); + } + public static void AreEqualBuildingBlock(IBuildingBlock x1, IBuildingBlock x2) { if (!AssertBothNotNull(x1, x2)) return; diff --git a/tests/OSPSuite.Core.IntegrationTests/Serializers/ExpressionParameterXmlSerializerSpecs.cs b/tests/OSPSuite.Core.IntegrationTests/Serializers/ExpressionParameterXmlSerializerSpecs.cs new file mode 100644 index 000000000..ecd97653d --- /dev/null +++ b/tests/OSPSuite.Core.IntegrationTests/Serializers/ExpressionParameterXmlSerializerSpecs.cs @@ -0,0 +1,30 @@ +using NUnit.Framework; +using OSPSuite.Core.Domain; +using OSPSuite.Core.Domain.Builder; +using OSPSuite.Core.Domain.Formulas; +using OSPSuite.Core.Helpers; + +namespace OSPSuite.Core.Serializers +{ + public class ExpressionParameterXmlSerializerSpecs : ModellingXmlSerializerBaseSpecs + { + [Test] + public void TestSerialization() + { + IFormula formula = CreateObject().WithName("F.Erika").WithDimension(DimensionLength).WithFormulaString("A * 2"); + IFormulaUsablePath fup = new FormulaUsablePath(new[] { "aa", "bb" }).WithAlias("b").WithDimension(DimensionLength); + formula.AddObjectPath(fup); + + + var x1 = new ExpressionParameter + { + StartValue = 2.0, + Formula = formula + }; + + var x2 = SerializeAndDeserialize(x1); + AssertForSpecs.AreEqualExpressionParameters(x2, x1); + } + + } +} From af938952e8dc4c025a0d2a18e640834f04fe8dab Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Wed, 7 Dec 2022 08:47:55 +0100 Subject: [PATCH 31/42] adding tests for expressionParameter --- .../Domain/ExpressionParameterSpecs.cs | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 tests/OSPSuite.Core.Tests/Domain/ExpressionParameterSpecs.cs diff --git a/tests/OSPSuite.Core.Tests/Domain/ExpressionParameterSpecs.cs b/tests/OSPSuite.Core.Tests/Domain/ExpressionParameterSpecs.cs new file mode 100644 index 000000000..f6bda8b08 --- /dev/null +++ b/tests/OSPSuite.Core.Tests/Domain/ExpressionParameterSpecs.cs @@ -0,0 +1,134 @@ +using OSPSuite.BDDHelper; +using OSPSuite.BDDHelper.Extensions; +using OSPSuite.Core.Domain.Builder; + +namespace OSPSuite.Core.Domain +{ + public abstract class concern_for_ExpressionParameter : ContextSpecification + { + protected override void Context() + { + sut = new ExpressionParameter() { ContainerPath = new ObjectPath("Path1", "Path2"), Name = "Name" }; + } + } + + public class when_instantiating_new_ExpressionParameter : concern_for_ExpressionParameter + { + [Observation] + public void name_should_be_last_element_in_ObjectPath() + { + sut.Name.ShouldBeEqualTo("Name"); + } + + [Observation] + public void container_path_should_be_equal_to_all_but_last_element() + { + sut.ContainerPath.ShouldOnlyContainInOrder("Path1", "Path2"); + } + + [Observation] + public void parameter_path_should_be_equal_to_container_path_plus_parameter_name() + { + sut.Path.ShouldOnlyContainInOrder("Path1", "Path2", "Name"); + } + } + + public class when_setting_expression_parameter_name : concern_for_MoleculeStartValue + { + protected override void Because() + { + sut.Name = "Name2"; + } + + [Observation] + public void parameter_name_should_be_updated() + { + sut.MoleculeName.ShouldBeEqualTo("Name2"); + } + + [Observation] + public void container_path_is_not_affected() + { + sut.ContainerPath.ShouldOnlyContainInOrder("Path1", "Path2"); + } + + [Observation] + public void parameter_path_should_reflect_new_name() + { + sut.Path.ShouldOnlyContainInOrder("Path1", "Path2", "Name2"); + } + } + + public abstract class when_testing_equivalency_in_expression_parameters : concern_for_MoleculeStartValue + { + protected MoleculeStartValue _comparable; + protected bool _result; + + protected override void Context() + { + sut = new MoleculeStartValue(); + _comparable = new MoleculeStartValue(); + + sut.IsPresent = true; + _comparable.IsPresent = true; + + sut.Path = new ObjectPath("A", "B", "MoleculeName"); + _comparable.Path = new ObjectPath("A", "B", "MoleculeName"); + + sut.ScaleDivisor = 1.0; + _comparable.ScaleDivisor = 1.0; + } + + protected override void Because() + { + _result = sut.IsEquivalentTo(_comparable); + } + } + + public abstract class expression_parameter_equivalency_should_test_negative : when_testing_equivalency_in_expression_parameters + { + [Observation] + public void should_not_be_equivalent() + { + _result.ShouldBeFalse(); + } + } + + public class when_testing_expression_parameters_with_different_scale_factor : equivalency_should_test_negative + { + protected override void Context() + { + base.Context(); + sut.ScaleDivisor = _comparable.ScaleDivisor * 1.1; + } + } + + public class when_testing_expression_parameters_with_different_moleculename : equivalency_should_test_negative + { + protected override void Context() + { + base.Context(); + sut.Path = new ObjectPath("A", "B", "NewName"); + } + } + + public class when_testing_expression_parameters_with_different_isPresent : equivalency_should_test_negative + { + protected override void Context() + { + base.Context(); + sut.IsPresent = !_comparable.IsPresent; + } + + + } + + public class when_testing_equivalent_expression_parameters : when_testing_equivalency_in_expression_parameters + { + [Observation] + public void empty_expression_parameters_should_be_equivalent() + { + _result.ShouldBeTrue(); + } + } +} From cdbe0f4264d6c056563dbd54bf5170daf655e532 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Wed, 7 Dec 2022 08:57:51 +0100 Subject: [PATCH 32/42] correcting appveyor --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 9ca5444fe..cb9a54d03 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -36,7 +36,7 @@ build: skip_branch_with_pr: true pull_requests: - do_not_increment_build_number: false + do_not_increment_build_number: true nuget: disable_publish_on_pr: false From b1360b28f2ee0e03b6bc8f4a8e0e44fdbf83dcc6 Mon Sep 17 00:00:00 2001 From: Robert McIntosh <261477+rwmcintosh@users.noreply.github.com> Date: Wed, 7 Dec 2022 11:04:42 -0500 Subject: [PATCH 33/42] Serialize expression type. --- .../Builder/ExpressionProfileBuildingBlock.cs | 2 +- .../Domain/Builder/ExpressionTypes.cs | 35 +++++++++++++++---- .../Xml/BuildingBlockXmlSerializer.cs | 5 +++ .../Xml/ExpressionTypeXmlAttributeMapper.cs | 20 +++++++++++ .../Xml/OSPSuiteXmlSerializerRepository.cs | 3 +- 5 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 src/OSPSuite.Core/Serialization/Xml/ExpressionTypeXmlAttributeMapper.cs diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs index 8f5023390..a44afa082 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs @@ -4,7 +4,7 @@ namespace OSPSuite.Core.Domain.Builder { public class ExpressionProfileBuildingBlock : StartValueBuildingBlock { - public override string Icon { set; get; } //TODO: temporarily not deducted from Type, because of serialization. possibly changing the order of definition could help + public override string Icon => Type.IconName; public virtual string MoleculeName { get; private set; } diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs index 56f836807..1dc462069 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs @@ -1,9 +1,16 @@ -using System; -using System.Collections.Generic; -using System.Text; +using System.Collections.Generic; +using System.Linq; namespace OSPSuite.Core.Domain.Builder { + + public enum ExpressionTypesId + { + Transport, + Enzyme, + BindingPartner + } + public static class TempAssets { public static class Captions @@ -26,17 +33,31 @@ public static class IconNames public static class ExpressionTypes { - public static ExpressionType TransportProtein = new ExpressionType(TempAssets.IconNames.Transporter, TempAssets.Captions.Transporter); - public static ExpressionType MetabolizingEnzyme = new ExpressionType(TempAssets.IconNames.Enzyme, TempAssets.Captions.Enzyme); - public static ExpressionType ProteinBindingPartner = new ExpressionType(TempAssets.IconNames.Protein, TempAssets.Captions.Protein); + public static ExpressionType TransportProtein = new ExpressionType(TempAssets.IconNames.Transporter, TempAssets.Captions.Transporter, ExpressionTypesId.Transport); + public static ExpressionType MetabolizingEnzyme = new ExpressionType(TempAssets.IconNames.Enzyme, TempAssets.Captions.Enzyme, ExpressionTypesId.Enzyme); + public static ExpressionType ProteinBindingPartner = new ExpressionType(TempAssets.IconNames.Protein, TempAssets.Captions.Protein, ExpressionTypesId.BindingPartner); + + private static List _types = new List + { + TransportProtein, + MetabolizingEnzyme, + ProteinBindingPartner + }; + + public static ExpressionType ById(ExpressionTypesId expressionTypeId) + { + return _types.First(x => Equals(x.Id, expressionTypeId)); + } } public class ExpressionType { + public ExpressionTypesId Id { get; } public string IconName { get; } public string DisplayName { get; } - public ExpressionType(string iconName, string displayName) + public ExpressionType(string iconName, string displayName, ExpressionTypesId expressionTypesId) { + Id = expressionTypesId; IconName = iconName; DisplayName = displayName; } diff --git a/src/OSPSuite.Core/Serialization/Xml/BuildingBlockXmlSerializer.cs b/src/OSPSuite.Core/Serialization/Xml/BuildingBlockXmlSerializer.cs index dc1796a97..bb165e678 100644 --- a/src/OSPSuite.Core/Serialization/Xml/BuildingBlockXmlSerializer.cs +++ b/src/OSPSuite.Core/Serialization/Xml/BuildingBlockXmlSerializer.cs @@ -100,6 +100,11 @@ public override void PerformMapping() public class ExpressionProfileBuildingBlockXmlSerializer : StartValuesBuildingBlockXmlSerializer { + public override void PerformMapping() + { + base.PerformMapping(); + Map(x => x.Type); + } } public class MoleculeStartValuesBuildingBlockXmlSerializer : StartValuesBuildingBlockXmlSerializer diff --git a/src/OSPSuite.Core/Serialization/Xml/ExpressionTypeXmlAttributeMapper.cs b/src/OSPSuite.Core/Serialization/Xml/ExpressionTypeXmlAttributeMapper.cs new file mode 100644 index 000000000..f2ef86661 --- /dev/null +++ b/src/OSPSuite.Core/Serialization/Xml/ExpressionTypeXmlAttributeMapper.cs @@ -0,0 +1,20 @@ +using OSPSuite.Core.Domain.Builder; +using OSPSuite.Serializer.Attributes; +using OSPSuite.Utility; + +namespace OSPSuite.Core.Serialization.Xml +{ + public class ExpressionTypeXmlAttributeMapper : AttributeMapper + { + public override string Convert(ExpressionType valueToConvert, SerializationContext context) + { + return valueToConvert.Id.ToString(); + } + + public override object ConvertFrom(string attributeValue, SerializationContext context) + { + var expressionTypeId = EnumHelper.ParseValue(attributeValue); + return ExpressionTypes.ById(expressionTypeId); + } + } +} \ No newline at end of file diff --git a/src/OSPSuite.Core/Serialization/Xml/OSPSuiteXmlSerializerRepository.cs b/src/OSPSuite.Core/Serialization/Xml/OSPSuiteXmlSerializerRepository.cs index a44c3e9f0..48ddf103c 100644 --- a/src/OSPSuite.Core/Serialization/Xml/OSPSuiteXmlSerializerRepository.cs +++ b/src/OSPSuite.Core/Serialization/Xml/OSPSuiteXmlSerializerRepository.cs @@ -58,8 +58,9 @@ protected override void AddInitialMappers() AttributeMapperRepository.AddAttributeMapper(new ValueOriginSourceXmlAttributeMapper()); AttributeMapperRepository.AddAttributeMapper(new ValueOriginDeterminationMethodXmlAttributeMapper()); AttributeMapperRepository.AddAttributeMapper(new RunStatusXmlAttributeMapper()); + AttributeMapperRepository.AddAttributeMapper(new ExpressionTypeXmlAttributeMapper()); + - AttributeMapperRepository.ReferenceMapper = new ObjectReferenceMapper(); } From cd01d6118ec110384634bbadd1780d3f61058979 Mon Sep 17 00:00:00 2001 From: Robert McIntosh <261477+rwmcintosh@users.noreply.github.com> Date: Wed, 7 Dec 2022 12:39:03 -0500 Subject: [PATCH 34/42] moved constants to Core location --- .../Builder/ExpressionProfileBuildingBlock.cs | 5 +- src/OSPSuite.Core/Domain/Constants.cs | 36 ++++++++++++++ src/OSPSuite.Core/PKSimCoreConstants.cs | 47 ------------------- 3 files changed, 39 insertions(+), 49 deletions(-) delete mode 100644 src/OSPSuite.Core/PKSimCoreConstants.cs diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs index a44afa082..320e49481 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs @@ -1,4 +1,5 @@ using OSPSuite.Core.Domain.Services; +using static OSPSuite.Core.Domain.Constants.ContainerName; namespace OSPSuite.Core.Domain.Builder { @@ -18,7 +19,7 @@ public class ExpressionProfileBuildingBlock : StartValueBuildingBlock PKSimCoreConstants.ContainerName.ExpressionProfileName(MoleculeName, Species, Category); + get => ExpressionProfileName(MoleculeName, Species, Category); set { if (string.Equals(Name, value)) @@ -26,7 +27,7 @@ public override string Name return; } - var (moleculeName, species, category) = PKSimCoreConstants.ContainerName.NamesFromExpressionProfileName(value); + var (moleculeName, species, category) = NamesFromExpressionProfileName(value); if (string.IsNullOrEmpty(moleculeName)) return; diff --git a/src/OSPSuite.Core/Domain/Constants.cs b/src/OSPSuite.Core/Domain/Constants.cs index 973351675..e44fecc62 100644 --- a/src/OSPSuite.Core/Domain/Constants.cs +++ b/src/OSPSuite.Core/Domain/Constants.cs @@ -3,6 +3,7 @@ using System.Linq; using OSPSuite.Core.Domain.UnitSystem; using OSPSuite.Core.Serialization; +using OSPSuite.Utility.Extensions; namespace OSPSuite.Core.Domain { @@ -486,6 +487,41 @@ public static class RemoveLLOQMode public const string ALWAYS = "Always"; } + public static class ContainerName + { + public static string ExpressionProfileName(string moleculeName, string species, string category) + => compositeNameFor(char.Parse(ObjectPath.PATH_DELIMITER), moleculeName, species, category); + + public static (string moleculeName, string speciesName, string category) NamesFromExpressionProfileName(string expressionProfileName) + { + var names = NamesFromCompositeName(expressionProfileName, char.Parse(ObjectPath.PATH_DELIMITER)); + if (names.Count != 3) + return (string.Empty, string.Empty, string.Empty); + + return (names[0], names[1], names[2]); + } + } + + public const char COMPOSITE_SEPARATOR = '-'; + + public static IReadOnlyList NamesFromCompositeName(string compositeName, char separator = COMPOSITE_SEPARATOR) + { + return compositeName.Split(separator); + } + + private static string compositeNameFor(char separator, params string[] names) + { + if (names == null || names.Length == 0) + return string.Empty; + + var nonEmptyNames = names.ToList(); + nonEmptyNames.RemoveAll(string.IsNullOrEmpty); + + return nonEmptyNames.Select(x => x.Trim()).ToString($"{separator}"); + } + + public static string CompositeNameFor(params string[] names) => compositeNameFor(COMPOSITE_SEPARATOR, names); + public static class Serialization { public const string MACRO_COMMAND = "MacroCommand"; diff --git a/src/OSPSuite.Core/PKSimCoreConstants.cs b/src/OSPSuite.Core/PKSimCoreConstants.cs deleted file mode 100644 index 150d76550..000000000 --- a/src/OSPSuite.Core/PKSimCoreConstants.cs +++ /dev/null @@ -1,47 +0,0 @@ -using OSPSuite.Core.Domain; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using OSPSuite.Utility.Extensions; - -namespace OSPSuite.Core -{ - public static class PKSimCoreConstants - { - // TODO: remove common code from PK-sim when this is promoted to Core - - public static class ContainerName - { - public static string ExpressionProfileName(string moleculeName, string species, string category) - => compositeNameFor(char.Parse(ObjectPath.PATH_DELIMITER), moleculeName, species, category); - - public static (string moleculeName, string speciesName, string category) NamesFromExpressionProfileName(string expressionProfileName) - { - var names = NamesFromCompositeName(expressionProfileName, char.Parse(ObjectPath.PATH_DELIMITER)); - if (names.Count != 3) - return (string.Empty, string.Empty, string.Empty); - - return (names[0], names[1], names[2]); - } - } - - public const char COMPOSITE_SEPARATOR = '-'; - - public static IReadOnlyList NamesFromCompositeName(string compositeName, char separator = COMPOSITE_SEPARATOR) - { - return compositeName.Split(separator); - } - - private static string compositeNameFor(char separator, params string[] names) - { - if (names == null || names.Length == 0) - return string.Empty; - - var nonEmptyNames = names.ToList(); - nonEmptyNames.RemoveAll(string.IsNullOrEmpty); - - return nonEmptyNames.Select(x => x.Trim()).ToString($"{separator}"); - } - } -} From b4b6efba692d684b4dd8ef9e42cf1b7c52a4a931 Mon Sep 17 00:00:00 2001 From: Robert McIntosh <261477+rwmcintosh@users.noreply.github.com> Date: Wed, 7 Dec 2022 13:33:23 -0500 Subject: [PATCH 35/42] consolidating assets in Core --- src/OSPSuite.Assets/IconNames.cs | 3 ++ src/OSPSuite.Assets/UIConstants.cs | 3 ++ .../Domain/Builder/ExpressionTypes.cs | 30 ++++--------------- .../ExpressionParameterXmlSerializerSpecs.cs | 7 +++-- .../Domain/ExpressionParameterSpecs.cs | 16 +++++----- 5 files changed, 23 insertions(+), 36 deletions(-) diff --git a/src/OSPSuite.Assets/IconNames.cs b/src/OSPSuite.Assets/IconNames.cs index 9fcee828a..8337c74da 100644 --- a/src/OSPSuite.Assets/IconNames.cs +++ b/src/OSPSuite.Assets/IconNames.cs @@ -55,5 +55,8 @@ public static class IconNames public const string MOBI = "MoBi"; public const string PARAMETER_IDENTIFICATION = "ParameterIdentification"; public const string SENSITIVITY_ANALYSIS = "SensitivityAnalysis"; + public static string Transporter = "Transporter"; + public static string Protein = "Protein"; + public static string Enzyme = "Enzyme"; } } \ No newline at end of file diff --git a/src/OSPSuite.Assets/UIConstants.cs b/src/OSPSuite.Assets/UIConstants.cs index 1a6aca222..a35b42ee7 100644 --- a/src/OSPSuite.Assets/UIConstants.cs +++ b/src/OSPSuite.Assets/UIConstants.cs @@ -18,6 +18,9 @@ public static class SizeAndLocation public static class Captions { + public static string Transporter = "Transporter"; + public static string Protein = "Protein"; + public static string Enzyme = "Enzyme"; public static readonly string Species = "Species"; public static readonly string Category = "Category"; public static readonly string ConfirmationDialog = "Confirmation"; diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs index 1dc462069..6f6dc5807 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs @@ -11,33 +11,13 @@ public enum ExpressionTypesId BindingPartner } - public static class TempAssets - { - public static class Captions - { - public static readonly string Species = "Species"; - public static readonly string Category = "Category"; - - public static string Transporter = "Transporter"; - public static string Protein = "Protein"; - public static string Enzyme = "Enzyme"; - } - - public static class IconNames - { - public static string Transporter = "Transporter"; - public static string Protein = "Protein"; - public static string Enzyme = "Enzyme"; - } - } - public static class ExpressionTypes { - public static ExpressionType TransportProtein = new ExpressionType(TempAssets.IconNames.Transporter, TempAssets.Captions.Transporter, ExpressionTypesId.Transport); - public static ExpressionType MetabolizingEnzyme = new ExpressionType(TempAssets.IconNames.Enzyme, TempAssets.Captions.Enzyme, ExpressionTypesId.Enzyme); - public static ExpressionType ProteinBindingPartner = new ExpressionType(TempAssets.IconNames.Protein, TempAssets.Captions.Protein, ExpressionTypesId.BindingPartner); + public static ExpressionType TransportProtein = new ExpressionType(ExpressionTypesId.Transport, Assets.IconNames.Transporter, Assets.Captions.Transporter); + public static ExpressionType MetabolizingEnzyme = new ExpressionType(ExpressionTypesId.Enzyme, Assets.IconNames.Enzyme, Assets.Captions.Enzyme); + public static ExpressionType ProteinBindingPartner = new ExpressionType(ExpressionTypesId.BindingPartner, Assets.IconNames.Protein, Assets.Captions.Protein); - private static List _types = new List + private static readonly List _types = new List { TransportProtein, MetabolizingEnzyme, @@ -55,7 +35,7 @@ public class ExpressionType public ExpressionTypesId Id { get; } public string IconName { get; } public string DisplayName { get; } - public ExpressionType(string iconName, string displayName, ExpressionTypesId expressionTypesId) + public ExpressionType(ExpressionTypesId expressionTypesId, string iconName, string displayName) { Id = expressionTypesId; IconName = iconName; diff --git a/tests/OSPSuite.Core.IntegrationTests/Serializers/ExpressionParameterXmlSerializerSpecs.cs b/tests/OSPSuite.Core.IntegrationTests/Serializers/ExpressionParameterXmlSerializerSpecs.cs index ecd97653d..f75a5ca0a 100644 --- a/tests/OSPSuite.Core.IntegrationTests/Serializers/ExpressionParameterXmlSerializerSpecs.cs +++ b/tests/OSPSuite.Core.IntegrationTests/Serializers/ExpressionParameterXmlSerializerSpecs.cs @@ -1,4 +1,5 @@ using NUnit.Framework; +using OSPSuite.BDDHelper; using OSPSuite.Core.Domain; using OSPSuite.Core.Domain.Builder; using OSPSuite.Core.Domain.Formulas; @@ -8,11 +9,11 @@ namespace OSPSuite.Core.Serializers { public class ExpressionParameterXmlSerializerSpecs : ModellingXmlSerializerBaseSpecs { - [Test] + [Observation] public void TestSerialization() { - IFormula formula = CreateObject().WithName("F.Erika").WithDimension(DimensionLength).WithFormulaString("A * 2"); - IFormulaUsablePath fup = new FormulaUsablePath(new[] { "aa", "bb" }).WithAlias("b").WithDimension(DimensionLength); + var formula = CreateObject().WithName("F.Erika").WithDimension(DimensionLength).WithFormulaString("A * 2"); + var fup = new FormulaUsablePath("aa", "bb").WithAlias("b").WithDimension(DimensionLength); formula.AddObjectPath(fup); diff --git a/tests/OSPSuite.Core.Tests/Domain/ExpressionParameterSpecs.cs b/tests/OSPSuite.Core.Tests/Domain/ExpressionParameterSpecs.cs index f6bda8b08..ee10de109 100644 --- a/tests/OSPSuite.Core.Tests/Domain/ExpressionParameterSpecs.cs +++ b/tests/OSPSuite.Core.Tests/Domain/ExpressionParameterSpecs.cs @@ -12,7 +12,7 @@ protected override void Context() } } - public class when_instantiating_new_ExpressionParameter : concern_for_ExpressionParameter + public class When_instantiating_new_ExpressionParameter : concern_for_ExpressionParameter { [Observation] public void name_should_be_last_element_in_ObjectPath() @@ -33,7 +33,7 @@ public void parameter_path_should_be_equal_to_container_path_plus_parameter_name } } - public class when_setting_expression_parameter_name : concern_for_MoleculeStartValue + public class When_setting_expression_parameter_name : concern_for_MoleculeStartValue { protected override void Because() { @@ -59,7 +59,7 @@ public void parameter_path_should_reflect_new_name() } } - public abstract class when_testing_equivalency_in_expression_parameters : concern_for_MoleculeStartValue + public abstract class When_testing_equivalency_in_expression_parameters : concern_for_MoleculeStartValue { protected MoleculeStartValue _comparable; protected bool _result; @@ -85,7 +85,7 @@ protected override void Because() } } - public abstract class expression_parameter_equivalency_should_test_negative : when_testing_equivalency_in_expression_parameters + public abstract class expression_parameter_equivalency_should_test_negative : When_testing_equivalency_in_expression_parameters { [Observation] public void should_not_be_equivalent() @@ -94,7 +94,7 @@ public void should_not_be_equivalent() } } - public class when_testing_expression_parameters_with_different_scale_factor : equivalency_should_test_negative + public class When_testing_expression_parameters_with_different_scale_factor : equivalency_should_test_negative { protected override void Context() { @@ -103,7 +103,7 @@ protected override void Context() } } - public class when_testing_expression_parameters_with_different_moleculename : equivalency_should_test_negative + public class When_testing_expression_parameters_with_different_moleculename : equivalency_should_test_negative { protected override void Context() { @@ -112,7 +112,7 @@ protected override void Context() } } - public class when_testing_expression_parameters_with_different_isPresent : equivalency_should_test_negative + public class When_testing_expression_parameters_with_different_isPresent : equivalency_should_test_negative { protected override void Context() { @@ -123,7 +123,7 @@ protected override void Context() } - public class when_testing_equivalent_expression_parameters : when_testing_equivalency_in_expression_parameters + public class When_testing_equivalent_expression_parameters : When_testing_equivalency_in_expression_parameters { [Observation] public void empty_expression_parameters_should_be_equivalent() From 4105df9f251f1ef0df47e3ccd4b48bc1624beb62 Mon Sep 17 00:00:00 2001 From: Robert McIntosh <261477+rwmcintosh@users.noreply.github.com> Date: Wed, 7 Dec 2022 14:55:20 -0500 Subject: [PATCH 36/42] comparison of expression profile building block properties --- .../Comparison/BuildingBlockDiffBuilder.cs | 28 +++++++++---------- .../ExpressionProfileDiffBuilder.cs | 17 +++++++++-- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/OSPSuite.Core/Comparison/BuildingBlockDiffBuilder.cs b/src/OSPSuite.Core/Comparison/BuildingBlockDiffBuilder.cs index 13c29b011..9360172b4 100644 --- a/src/OSPSuite.Core/Comparison/BuildingBlockDiffBuilder.cs +++ b/src/OSPSuite.Core/Comparison/BuildingBlockDiffBuilder.cs @@ -4,15 +4,15 @@ namespace OSPSuite.Core.Comparison { - public abstract class BuildingBlockDiffBuilder : DiffBuilder> where T : class, IObjectBase + public abstract class BuildingBlockDiffBuilder : DiffBuilder where TBuildingBlock : class, IBuildingBlock where TBuilder : class, IObjectBase { private readonly ObjectBaseDiffBuilder _objectBaseDiffBuilder; private readonly EnumerableComparer _enumerableComparer; - private readonly Func _equalityProperty; - protected Func _presentObjectDetailsFunc; + private readonly Func _equalityProperty; + protected Func _presentObjectDetailsFunc; protected BuildingBlockDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, - EnumerableComparer enumerableComparer, Func equalityProperty) + EnumerableComparer enumerableComparer, Func equalityProperty) { _objectBaseDiffBuilder = objectBaseDiffBuilder; _equalityProperty = equalityProperty; @@ -24,21 +24,21 @@ protected BuildingBlockDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, { } - public override void Compare(IComparison> comparison) + public override void Compare(IComparison comparison) { _objectBaseDiffBuilder.Compare(comparison); _enumerableComparer.CompareEnumerables(comparison, x => x, _equalityProperty, _presentObjectDetailsFunc); } } - public class MoleculeBuildingBlockDiffBuilder : BuildingBlockDiffBuilder + public class MoleculeBuildingBlockDiffBuilder : BuildingBlockDiffBuilder { public MoleculeBuildingBlockDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, EnumerableComparer enumerableComparer) : base(objectBaseDiffBuilder, enumerableComparer) { } } - public class SpatialStructureDiffBuilder : BuildingBlockDiffBuilder + public class SpatialStructureDiffBuilder : BuildingBlockDiffBuilder { public SpatialStructureDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, EnumerableComparer enumerableComparer) : base(objectBaseDiffBuilder, enumerableComparer) @@ -46,14 +46,14 @@ public SpatialStructureDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, } } - public class ReactionBuildingBlockDiffBuilder : BuildingBlockDiffBuilder + public class ReactionBuildingBlockDiffBuilder : BuildingBlockDiffBuilder { public ReactionBuildingBlockDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, EnumerableComparer enumerableComparer) : base(objectBaseDiffBuilder, enumerableComparer) { } } - public class PassiveTransportBuildingBlockDiffBuilder : BuildingBlockDiffBuilder + public class PassiveTransportBuildingBlockDiffBuilder : BuildingBlockDiffBuilder { public PassiveTransportBuildingBlockDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, EnumerableComparer enumerableComparer) : base(objectBaseDiffBuilder, enumerableComparer) @@ -61,7 +61,7 @@ public PassiveTransportBuildingBlockDiffBuilder(ObjectBaseDiffBuilder objectBase } } - public class EventGroupBuildingBlocksDiffBuilder : BuildingBlockDiffBuilder + public class EventGroupBuildingBlocksDiffBuilder : BuildingBlockDiffBuilder { public EventGroupBuildingBlocksDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, EnumerableComparer enumerableComparer) : base(objectBaseDiffBuilder, enumerableComparer) @@ -69,7 +69,7 @@ public EventGroupBuildingBlocksDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffB } } - public class ObserverBuildingBlocksDiffBuilder : BuildingBlockDiffBuilder + public class ObserverBuildingBlocksDiffBuilder : BuildingBlockDiffBuilder { public ObserverBuildingBlocksDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, EnumerableComparer enumerableComparer) : base(objectBaseDiffBuilder, enumerableComparer) @@ -77,7 +77,7 @@ public ObserverBuildingBlocksDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBui } } - public abstract class StartValueBuildingBlockDiffBuilder : BuildingBlockDiffBuilder where TStartValue : class, IStartValue + public abstract class StartValueBuildingBlockDiffBuilder : BuildingBlockDiffBuilder where TStartValue : class, IStartValue where TBuildingBlock : class, IBuildingBlock { private readonly UnitFormatter _unitFormatter = new UnitFormatter(); @@ -101,14 +101,14 @@ private string startValueDisplayFor(TStartValue startValue) } } - public class MoleculeStartValueBuildingBlockDiffBuilder : StartValueBuildingBlockDiffBuilder + public class MoleculeStartValueBuildingBlockDiffBuilder : StartValueBuildingBlockDiffBuilder { public MoleculeStartValueBuildingBlockDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, EnumerableComparer enumerableComparer) : base(objectBaseDiffBuilder, enumerableComparer) { } } - public class ParameterStartValueBuildingBlockDiffBuilder : StartValueBuildingBlockDiffBuilder + public class ParameterStartValueBuildingBlockDiffBuilder : StartValueBuildingBlockDiffBuilder { public ParameterStartValueBuildingBlockDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, EnumerableComparer enumerableComparer) : base(objectBaseDiffBuilder, enumerableComparer) { diff --git a/src/OSPSuite.Core/Comparison/ExpressionProfileDiffBuilder.cs b/src/OSPSuite.Core/Comparison/ExpressionProfileDiffBuilder.cs index e45b48606..dbdc13753 100644 --- a/src/OSPSuite.Core/Comparison/ExpressionProfileDiffBuilder.cs +++ b/src/OSPSuite.Core/Comparison/ExpressionProfileDiffBuilder.cs @@ -2,16 +2,27 @@ namespace OSPSuite.Core.Comparison { - public class ExpressionProfileBuildingBlockDiffBuilder : StartValueBuildingBlockDiffBuilder + public class ExpressionProfileBuildingBlockDiffBuilder : BuildingBlockDiffBuilder { public ExpressionProfileBuildingBlockDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, EnumerableComparer enumerableComparer) : base(objectBaseDiffBuilder, enumerableComparer) - { + { + + } + + public override void Compare(IComparison comparison) + { + base.Compare(comparison); + CompareValues(x => x.PKSimVersion, x => x.PKSimVersion, comparison); + CompareStringValues(x => x.MoleculeName, x => x.MoleculeName, comparison); + CompareStringValues(x => x.Species, x => x.Species, comparison); + CompareStringValues(x => x.Category, x => x.Category, comparison); + CompareStringValues(x => x.Name, x => x.Name, comparison); + CompareValues(x => x.Type, x => x.Type, comparison, (x,y) => Equals(x.DisplayName, y.DisplayName), (x,y) => y.DisplayName); } } internal class ExpressionParameterDiffBuilder : StartValueDiffBuilder { - public ExpressionParameterDiffBuilder(IObjectComparer objectComparer, EntityDiffBuilder entityDiffBuilder, WithValueOriginComparison valueOriginComparison) : base(objectComparer, entityDiffBuilder, valueOriginComparison) { } From 3097330a71afac67b3421e31f1123c88b6d7aab1 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Thu, 8 Dec 2022 10:00:07 +0100 Subject: [PATCH 37/42] adding objectType --- src/OSPSuite.Assets/UIConstants.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/OSPSuite.Assets/UIConstants.cs b/src/OSPSuite.Assets/UIConstants.cs index 1a6aca222..ce08976d1 100644 --- a/src/OSPSuite.Assets/UIConstants.cs +++ b/src/OSPSuite.Assets/UIConstants.cs @@ -2296,6 +2296,7 @@ public static class ObjectTypes public static readonly string Formulation = "Formulation"; public static readonly string SensitivityParameter = "Sensitivity Parameter"; public static readonly string SensitivityAnalysis = "Sensitivity Analysis"; + public static readonly string ExpressionProfileBuildingBlock = "Expression Profile Building Block"; } public static class ToolTips From 63d2f8d09a7d2795bbe79ec47a8084662b8116b9 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Thu, 8 Dec 2022 10:45:44 +0100 Subject: [PATCH 38/42] code review changes --- src/OSPSuite.Assets/UIConstants.cs | 6 +++--- .../Comparison/BuildingBlockDiffBuilder.cs | 4 ++-- .../Comparison/ExpressionProfileDiffBuilder.cs | 5 +---- .../Builder/ExpressionProfileBuildingBlock.cs | 1 - src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs | 13 +++++++++---- .../Domain/ExpressionProfileBuildingBlockSpecs.cs | 5 ++--- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/OSPSuite.Assets/UIConstants.cs b/src/OSPSuite.Assets/UIConstants.cs index 9e9393cc3..0b27ed655 100644 --- a/src/OSPSuite.Assets/UIConstants.cs +++ b/src/OSPSuite.Assets/UIConstants.cs @@ -18,9 +18,9 @@ public static class SizeAndLocation public static class Captions { - public static string Transporter = "Transporter"; - public static string Protein = "Protein"; - public static string Enzyme = "Enzyme"; + public static readonly string Transporter = "Transporter"; + public static readonly string Protein = "Protein"; + public static readonly string Enzyme = "Enzyme"; public static readonly string Species = "Species"; public static readonly string Category = "Category"; public static readonly string ConfirmationDialog = "Confirmation"; diff --git a/src/OSPSuite.Core/Comparison/BuildingBlockDiffBuilder.cs b/src/OSPSuite.Core/Comparison/BuildingBlockDiffBuilder.cs index 9360172b4..4dd25d4ee 100644 --- a/src/OSPSuite.Core/Comparison/BuildingBlockDiffBuilder.cs +++ b/src/OSPSuite.Core/Comparison/BuildingBlockDiffBuilder.cs @@ -38,7 +38,7 @@ public MoleculeBuildingBlockDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuil } } - public class SpatialStructureDiffBuilder : BuildingBlockDiffBuilder + public class SpatialStructureDiffBuilder : BuildingBlockDiffBuilder { public SpatialStructureDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, EnumerableComparer enumerableComparer) : base(objectBaseDiffBuilder, enumerableComparer) @@ -53,7 +53,7 @@ public ReactionBuildingBlockDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuil } } - public class PassiveTransportBuildingBlockDiffBuilder : BuildingBlockDiffBuilder + public class PassiveTransportBuildingBlockDiffBuilder : BuildingBlockDiffBuilder { public PassiveTransportBuildingBlockDiffBuilder(ObjectBaseDiffBuilder objectBaseDiffBuilder, EnumerableComparer enumerableComparer) : base(objectBaseDiffBuilder, enumerableComparer) diff --git a/src/OSPSuite.Core/Comparison/ExpressionProfileDiffBuilder.cs b/src/OSPSuite.Core/Comparison/ExpressionProfileDiffBuilder.cs index dbdc13753..a45c8ea48 100644 --- a/src/OSPSuite.Core/Comparison/ExpressionProfileDiffBuilder.cs +++ b/src/OSPSuite.Core/Comparison/ExpressionProfileDiffBuilder.cs @@ -13,11 +13,8 @@ public override void Compare(IComparison compari { base.Compare(comparison); CompareValues(x => x.PKSimVersion, x => x.PKSimVersion, comparison); - CompareStringValues(x => x.MoleculeName, x => x.MoleculeName, comparison); - CompareStringValues(x => x.Species, x => x.Species, comparison); - CompareStringValues(x => x.Category, x => x.Category, comparison); CompareStringValues(x => x.Name, x => x.Name, comparison); - CompareValues(x => x.Type, x => x.Type, comparison, (x,y) => Equals(x.DisplayName, y.DisplayName), (x,y) => y.DisplayName); + CompareValues(x => x.Type, x => x.Type, comparison); } } diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs index 320e49481..4007ef7d1 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs @@ -45,7 +45,6 @@ public override void UpdatePropertiesFrom(IUpdatable source, ICloneManager clone Type = sourceExpressionProfile.Type; PKSimVersion = sourceExpressionProfile.PKSimVersion; - Name = sourceExpressionProfile.Name; } } } \ No newline at end of file diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs index 6f6dc5807..a018e5dec 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionTypes.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using System.Linq; +using OSPSuite.Utility.Collections; namespace OSPSuite.Core.Domain.Builder { @@ -17,7 +16,7 @@ public static class ExpressionTypes public static ExpressionType MetabolizingEnzyme = new ExpressionType(ExpressionTypesId.Enzyme, Assets.IconNames.Enzyme, Assets.Captions.Enzyme); public static ExpressionType ProteinBindingPartner = new ExpressionType(ExpressionTypesId.BindingPartner, Assets.IconNames.Protein, Assets.Captions.Protein); - private static readonly List _types = new List + private static readonly ICache _typesCache = new Cache(x => x.Id) { TransportProtein, MetabolizingEnzyme, @@ -26,7 +25,7 @@ public static class ExpressionTypes public static ExpressionType ById(ExpressionTypesId expressionTypeId) { - return _types.First(x => Equals(x.Id, expressionTypeId)); + return _typesCache[expressionTypeId]; } } @@ -41,5 +40,11 @@ public ExpressionType(ExpressionTypesId expressionTypesId, string iconName, stri IconName = iconName; DisplayName = displayName; } + + public override string ToString() + { + return DisplayName; + } + } } diff --git a/tests/OSPSuite.Core.Tests/Domain/ExpressionProfileBuildingBlockSpecs.cs b/tests/OSPSuite.Core.Tests/Domain/ExpressionProfileBuildingBlockSpecs.cs index ee1795aa9..ed3907925 100644 --- a/tests/OSPSuite.Core.Tests/Domain/ExpressionProfileBuildingBlockSpecs.cs +++ b/tests/OSPSuite.Core.Tests/Domain/ExpressionProfileBuildingBlockSpecs.cs @@ -55,8 +55,7 @@ public void the_updated_expression_profile_should_have_properties_set() } } - //commenting out, as long as we do not have an icon based on type - /* + public class when_reading_the_icon_name_for_the_building_block : concern_for_ExpressionProfileBuildingBlock { [Observation] @@ -71,7 +70,7 @@ public void icon_name_translated_for_each_expression_type() sut.Type = ExpressionTypes.ProteinBindingPartner; sut.Icon.ShouldBeEqualTo("Protein"); } - }*/ + } public class when_setting_the_name_of_the_building_block : concern_for_ExpressionProfileBuildingBlock { From be2dec72bd249d7212e85d71c90a587828b5d4b5 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Thu, 8 Dec 2022 14:31:15 +0100 Subject: [PATCH 39/42] adding name --- .../Domain/Builder/ExpressionProfileBuildingBlock.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs index 4007ef7d1..320e49481 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs @@ -45,6 +45,7 @@ public override void UpdatePropertiesFrom(IUpdatable source, ICloneManager clone Type = sourceExpressionProfile.Type; PKSimVersion = sourceExpressionProfile.PKSimVersion; + Name = sourceExpressionProfile.Name; } } } \ No newline at end of file From 0f1c5ccf9ecb310081ed9356bb225e1029ec72c5 Mon Sep 17 00:00:00 2001 From: georgeDaskalakis <37107428+georgeDaskalakis@users.noreply.github.com> Date: Thu, 8 Dec 2022 14:54:43 +0100 Subject: [PATCH 40/42] changing PKSimVersion type --- .../Domain/Builder/ExpressionProfileBuildingBlock.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs index 320e49481..ac849f95b 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs @@ -13,7 +13,7 @@ public class ExpressionProfileBuildingBlock : StartValueBuildingBlock Date: Thu, 8 Dec 2022 15:08:45 +0100 Subject: [PATCH 41/42] correcting build --- .../Domain/ExpressionProfileBuildingBlockSpecs.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/OSPSuite.Core.Tests/Domain/ExpressionProfileBuildingBlockSpecs.cs b/tests/OSPSuite.Core.Tests/Domain/ExpressionProfileBuildingBlockSpecs.cs index ed3907925..ccf0f331e 100644 --- a/tests/OSPSuite.Core.Tests/Domain/ExpressionProfileBuildingBlockSpecs.cs +++ b/tests/OSPSuite.Core.Tests/Domain/ExpressionProfileBuildingBlockSpecs.cs @@ -36,7 +36,7 @@ protected override void Context() _expressionProfileBuildingBlock.Name = "Molecule|Species|Name"; _expressionProfileBuildingBlock.Type = ExpressionTypes.MetabolizingEnzyme; _expressionProfileBuildingBlock.Type = ExpressionTypes.MetabolizingEnzyme; - _expressionProfileBuildingBlock.PKSimVersion = 11; + _expressionProfileBuildingBlock.PKSimVersion = "11.1"; _expressionProfileBuildingBlock.Add(new ExpressionParameter().WithName("name1")); } @@ -50,7 +50,7 @@ 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); + sut.PKSimVersion.ShouldBeEqualTo("11.1"); sut.Count().ShouldBeEqualTo(1); } } From 3555b11145f76f2cffd62d882cde0e976d3e1480 Mon Sep 17 00:00:00 2001 From: Robert McIntosh <261477+rwmcintosh@users.noreply.github.com> Date: Thu, 8 Dec 2022 11:02:54 -0500 Subject: [PATCH 42/42] PR comments --- .../Domain/Builder/ExpressionProfileBuildingBlock.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs index ac849f95b..6545a15a6 100644 --- a/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs +++ b/src/OSPSuite.Core/Domain/Builder/ExpressionProfileBuildingBlock.cs @@ -34,6 +34,7 @@ public override string Name Species = species; Category = category; MoleculeName = moleculeName; + OnPropertyChanged(() => Name); } } @@ -45,6 +46,9 @@ public override void UpdatePropertiesFrom(IUpdatable source, ICloneManager clone Type = sourceExpressionProfile.Type; PKSimVersion = sourceExpressionProfile.PKSimVersion; + + // Name is required because our base objects will the private property + // But in this case the name is decomposed and stored in 3 other properties Name = sourceExpressionProfile.Name; } }