Skip to content

Commit efe7f57

Browse files
authored
Fixes #2487 (#2489)
* Fixes #2487 * Fixes #2487 add SimulationEntitySourceReferenceCache * Remove auto generated code
1 parent a622b5f commit efe7f57

23 files changed

+387
-63
lines changed

src/OSPSuite.Core/Domain/Builder/IBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace OSPSuite.Core.Domain.Builder
22
{
3-
public interface IBuilder : IObjectBase
3+
public interface IBuilder : IEntity
44
{
55
//Reference to building block containing this entity. This does not have to be serialized
66
IBuildingBlock BuildingBlock { get; set; }
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System.Collections.Generic;
2+
3+
namespace OSPSuite.Core.Domain.Builder
4+
{
5+
public interface IBuildingBlockRepository
6+
{
7+
IReadOnlyList<IBuildingBlock> All();
8+
IReadOnlyList<T> All<T>() where T : IBuildingBlock;
9+
}
10+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace OSPSuite.Core.Domain.Builder
2+
{
3+
public interface ILookupBuildingBlock<T> : IBuildingBlock<T> where T : IBuilder
4+
{
5+
T ByPath(ObjectPath path);
6+
}
7+
}

src/OSPSuite.Core/Domain/Builder/InitialConditionsBuildingBlock.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,6 @@
22

33
namespace OSPSuite.Core.Domain.Builder
44
{
5-
public interface ILookupBuildingBlock<T> : IBuildingBlock<T> where T : IBuilder
6-
{
7-
T ByPath(ObjectPath path);
8-
}
9-
105
public class InitialConditionsBuildingBlock : PathAndValueEntityBuildingBlock<InitialCondition>
116
{
127
public InitialConditionsBuildingBlock()

src/OSPSuite.Core/Domain/Builder/SimulationBuilder.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class SimulationBuilder
2222
private readonly Cache<string, BuilderSource> _builderSources = new Cache<string, BuilderSource>(x => x.Builder.Id, x => null);
2323

2424
//Cache of entity source by id and not by path. It is required because the path is not available at time of construction in the entity
25-
private readonly Cache<string, EntitySource> _entitySources = new Cache<string, EntitySource>(onMissingKey: x => null);
25+
private readonly Cache<string, SimulationEntitySource> _entitySources = new Cache<string, SimulationEntitySource>(onMissingKey: x => null);
2626

2727
public SimulationBuilder(SimulationConfiguration simulationConfiguration)
2828
{
@@ -32,13 +32,13 @@ public SimulationBuilder(SimulationConfiguration simulationConfiguration)
3232

3333
public bool CreateAllProcessRateParameters => _simulationConfiguration.CreateAllProcessRateParameters;
3434

35-
public IEntity BuilderFor(IEntity modelObject) => EntitySourceFor(modelObject)?.Source;
35+
public IEntity BuilderFor(IEntity modelObject) => SimulationEntitySourceFor(modelObject)?.Source;
3636

37-
internal EntitySource EntitySourceFor(IEntity entity) => _entitySources[entity.Id];
37+
internal SimulationEntitySource SimulationEntitySourceFor(IEntity entity) => _entitySources[entity.Id];
3838

39-
internal void AddEntitySource(string entityId, EntitySource entitySource)
39+
internal void AddSimulationEntitySource(string entityId, SimulationEntitySource simulationEntitySource)
4040
{
41-
_entitySources[entityId] = entitySource;
41+
_entitySources[entityId] = simulationEntitySource;
4242
}
4343

4444
internal IEnumerable<MoleculeBuilder> AllPresentMolecules()
@@ -203,7 +203,7 @@ private void addMolecules(IMoleculeDependentBuilder builder, MoleculeList molecu
203203
internal IReadOnlyCollection<ParameterValue> ParameterValues => _parameterValues;
204204
internal IReadOnlyCollection<InitialCondition> InitialConditions => _initialConditions;
205205

206-
public IReadOnlyCollection<EntitySource> EntitySources => _entitySources;
206+
public IReadOnlyCollection<SimulationEntitySource> EntitySources => _entitySources;
207207

208208
internal MoleculeList MoleculeListFor(IMoleculeDependentBuilder builder) => _moleculeListCache[builder];
209209

src/OSPSuite.Core/Domain/Builder/SimulationConfiguration.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,17 @@ public class SimulationConfiguration : IVisitable<IVisitor>, IUpdatable
3535

3636
public IReadOnlyList<T> All<T>() where T : class, IBuildingBlock
3737
{
38+
if (typeof(T) == typeof(IBuildingBlock))
39+
return All().OfType<T>().ToList();
40+
3841
return ModuleConfigurations.Select(x => x.BuildingBlock<T>()).Where(x => x != null).ToList();
3942
}
4043

44+
public IReadOnlyList<IBuildingBlock> All()
45+
{
46+
return ModuleConfigurations.SelectMany(x => x.All()).Where(x => x != null).ToList();
47+
}
48+
4149
public virtual void AcceptVisitor(IVisitor visitor)
4250
{
4351
ModuleConfigurations.Each(x => x.AcceptVisitor(visitor));
@@ -60,8 +68,8 @@ public void UpdatePropertiesFrom(IUpdatable source, ICloneManager cloneManager)
6068
}
6169

6270
/// <summary>
63-
/// Copies the properties from <paramref name="sourceConfiguration"/> but does not clone any of the building blocks
64-
/// or module configurations.
71+
/// Copies the properties from <paramref name="sourceConfiguration" /> but does not clone any of the building blocks
72+
/// or module configurations.
6573
/// </summary>
6674
/// <param name="sourceConfiguration"></param>
6775
public void CopyPropertiesFrom(SimulationConfiguration sourceConfiguration)

src/OSPSuite.Core/Domain/ModelCoreSimulation.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public interface IModelCoreSimulation : IObjectBase, IWithCreationMetaData, IWit
4949
/// <summary>
5050
/// Tracks objects used to create the simulation. (may be null)
5151
/// </summary>
52-
EntitySources EntitySources { get; }
52+
SimulationEntitySources EntitySources { get; }
5353
}
5454

5555
public class ModelCoreSimulation : ObjectBase, IModelCoreSimulation
@@ -60,7 +60,7 @@ public class ModelCoreSimulation : ObjectBase, IModelCoreSimulation
6060

6161
public CreationMetaData Creation { get; set; }
6262

63-
public EntitySources EntitySources { get; } = new EntitySources();
63+
public SimulationEntitySources EntitySources { get; } = new SimulationEntitySources();
6464

6565
public double? EndTime => Settings?.OutputSchema?.EndTime;
6666

src/OSPSuite.Core/Domain/ModelCoreSimulationExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ private static IEnumerable<IParameter> allApplicationParametersIn(IReadOnlyList<
9595
.Where(x => x.IsNamed(parameterName));
9696
}
9797

98-
public static void AddEntitySources(this IModelCoreSimulation simulation, IEnumerable<EntitySource> entitySources)
98+
public static void AddEntitySources(this IModelCoreSimulation simulation, IEnumerable<SimulationEntitySource> entitySources)
9999
{
100100
entitySources?.Each(simulation.EntitySources.Add);
101101
}

src/OSPSuite.Core/Domain/ModuleConfiguration.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Linq;
34
using OSPSuite.Core.Domain.Builder;
45
using OSPSuite.Core.Domain.Services;
56
using OSPSuite.Utility.Visitor;
67

78
namespace OSPSuite.Core.Domain
89
{
9-
1010
public class ModuleConfiguration : IVisitable<IVisitor>, IUpdatable
1111
{
1212
public Module Module { get; private set; }
@@ -22,7 +22,7 @@ public class ModuleConfiguration : IVisitable<IVisitor>, IUpdatable
2222
public ParameterValuesBuildingBlock SelectedParameterValues { get; set; }
2323

2424
/// <summary>
25-
/// Merge behavior for merging spatial structures from different modules.
25+
/// Merge behavior for merging spatial structures from different modules.
2626
/// </summary>
2727
public MergeBehavior MergeBehavior => Module.MergeBehavior;
2828

@@ -92,5 +92,12 @@ public void UpdatePropertiesFrom(IUpdatable source, ICloneManager cloneManager)
9292
SelectedInitialConditions = Module.InitialConditionsCollection.FindByName(sourceConfiguration.SelectedInitialConditions?.Name);
9393
SelectedParameterValues = Module.ParameterValuesCollection.FindByName(sourceConfiguration.SelectedParameterValues?.Name);
9494
}
95+
96+
public IReadOnlyList<IBuildingBlock> All()
97+
{
98+
return Module.BuildingBlocks.Union(new IBuildingBlock[] {SelectedInitialConditions, SelectedParameterValues})
99+
.Where(x => x != null)
100+
.ToList();
101+
}
95102
}
96103
}

src/OSPSuite.Core/Domain/Services/EntityTracker.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,17 @@ public void Track(IEntity entityToTrack, IEntity sourceBuilder, SimulationBuilde
2323
var builderSource = simulationBuilder.BuilderSourceFor(sourceBuilder);
2424
if (builderSource != null)
2525
{
26-
var objectSource = new EntitySource(builderSource.BuildingBlock, sourcePath, sourceBuilder);
27-
simulationBuilder.AddEntitySource(entityToTrack.Id, objectSource);
26+
var objectSource = new SimulationEntitySource(builderSource.BuildingBlock, sourcePath, sourceBuilder);
27+
simulationBuilder.AddSimulationEntitySource(entityToTrack.Id, objectSource);
2828
return;
2929
}
3030

3131
//in this case, we might have clone the object. We need to find the source of the source
32-
var objectSourceOrigin = simulationBuilder.EntitySourceFor(sourceBuilder);
32+
var objectSourceOrigin = simulationBuilder.SimulationEntitySourceFor(sourceBuilder);
3333
if (objectSourceOrigin != null)
3434
{
35-
var newObjectSource = new EntitySource(objectSourceOrigin);
36-
simulationBuilder.AddEntitySource(entityToTrack.Id, newObjectSource);
35+
var newObjectSource = new SimulationEntitySource(objectSourceOrigin);
36+
simulationBuilder.AddSimulationEntitySource(entityToTrack.Id, newObjectSource);
3737
return;
3838
}
3939

0 commit comments

Comments
 (0)