using System.Collections.Generic; using System.Linq; using Application.Ringtoets.Storage.DbContext; using Core.Common.Base.Data; using Core.Common.Utils; using Ringtoets.Common.Data.FailureMechanism; using Ringtoets.HydraRing.Data; using Ringtoets.Integration.Data; using Ringtoets.Integration.Data.Placeholders; using Ringtoets.Piping.Data; using Ringtoets.Piping.Primitives; namespace Application.Ringtoets.Storage.Create { public class CreateConversionCollector { private readonly Dictionary projects = new Dictionary(new ReferenceEqualityComparer()); private readonly Dictionary assessmentSections = new Dictionary(new ReferenceEqualityComparer()); private readonly Dictionary failureMechanisms = new Dictionary(new ReferenceEqualityComparer()); private readonly Dictionary hydraulicLocations = new Dictionary(new ReferenceEqualityComparer()); private readonly Dictionary stochasticSoilModels = new Dictionary(new ReferenceEqualityComparer()); private readonly Dictionary stochasticSoilProfiles = new Dictionary(new ReferenceEqualityComparer()); private readonly Dictionary soilProfiles = new Dictionary(new ReferenceEqualityComparer()); private readonly Dictionary soilLayers = new Dictionary(new ReferenceEqualityComparer()); internal void Add(ProjectEntity entity, Project model) { Add(projects, entity, model); } internal void Add(AssessmentSectionEntity entity, AssessmentSection model) { Add(assessmentSections, entity, model); } public void Add(HydraulicLocationEntity entity, HydraulicBoundaryLocation model) { Add(hydraulicLocations, entity, model); } public void Add(FailureMechanismEntity entity, FailureMechanismPlaceholder model) { Add(failureMechanisms, entity, model); } internal void Add(FailureMechanismEntity entity, PipingFailureMechanism model) { Add(failureMechanisms, entity, model); } internal void Add(StochasticSoilModelEntity entity, StochasticSoilModel model) { Add(stochasticSoilModels, entity, model); } internal void Add(StochasticSoilProfileEntity entity, StochasticSoilProfile model) { Add(stochasticSoilProfiles, entity, model); } internal void Add(SoilProfileEntity entity, PipingSoilProfile model) { Add(soilProfiles, entity, model); } internal void Add(SoilLayerEntity entity, PipingSoilLayer model) { Add(soilLayers, entity, model); } internal bool Contains(PipingSoilProfile model) { return soilProfiles.ContainsValue(model); } internal SoilProfileEntity Get(PipingSoilProfile model) { return Get(soilProfiles, model); } internal void TransferIds() { foreach (var entity in projects.Keys) { projects[entity].StorageId = entity.ProjectEntityId; } foreach (var entity in failureMechanisms.Keys) { failureMechanisms[entity].StorageId = entity.FailureMechanismEntityId; } foreach (var entity in assessmentSections.Keys) { assessmentSections[entity].StorageId = entity.AssessmentSectionEntityId; } foreach (var entity in hydraulicLocations.Keys) { hydraulicLocations[entity].StorageId = entity.HydraulicLocationEntityId; } foreach (var entity in stochasticSoilModels.Keys) { stochasticSoilModels[entity].StorageId = entity.StochasticSoilModelEntityId; } foreach (var entity in stochasticSoilProfiles.Keys) { stochasticSoilProfiles[entity].StorageId = entity.StochasticSoilProfileEntityId; } foreach (var entity in soilProfiles.Keys) { soilProfiles[entity].StorageId = entity.SoilProfileEntityId; } foreach (var entity in soilLayers.Keys) { soilLayers[entity].StorageId = entity.SoilLayerEntityId; } } private void Add(Dictionary collection, T entity, U model) { collection[entity] = model; } private T Get(Dictionary collection, U model) { return collection.Keys.Single(k => ReferenceEquals(collection[k], model)); } } }