Skip to content

Commit 8c393ae

Browse files
authored
Fixes #2623 Export inputs as the project is created from snapshot (#2624)
* Fixes #2623 Export inputs as the project is created from snapshot * add extensions for base64 encode/decode * use extensions * clean up using
1 parent 6a61b2f commit 8c393ae

File tree

10 files changed

+23
-56
lines changed

10 files changed

+23
-56
lines changed

src/OSPSuite.Assets/Extensions/StringExtensions.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
using System.Collections.Generic;
1+
using OSPSuite.Utility.Extensions;
2+
using System;
3+
using System.Collections.Generic;
24
using System.Linq;
3-
using OSPSuite.Utility.Extensions;
5+
using System.Text;
46

57
namespace OSPSuite.Assets.Extensions
68
{
@@ -67,5 +69,9 @@ public static string PluralizeIf(this string stringToPluralize, bool pluralize)
6769
{
6870
return pluralize ? stringToPluralize.Pluralize() : stringToPluralize;
6971
}
72+
73+
public static string FromBase64String(this string encodedElement) => Encoding.UTF8.GetString(Convert.FromBase64String(encodedElement));
74+
75+
public static string ToBase64String(this string serializeAsString) => Convert.ToBase64String(Encoding.UTF8.GetBytes(serializeAsString));
7076
}
7177
}

src/OSPSuite.CLI.Core/CLIRegister.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
using OSPSuite.CLI.Core.MinimalImplementations;
2+
using OSPSuite.CLI.Core.Services;
23
using OSPSuite.Core;
34
using OSPSuite.Core.Commands;
4-
using OSPSuite.Core.Diagram;
55
using OSPSuite.Core.Domain;
6+
using OSPSuite.Infrastructure.Import.Services;
67
using OSPSuite.Utility.Container;
78
using IContainer = OSPSuite.Utility.Container.IContainer;
89

@@ -19,14 +20,16 @@ public override void RegisterInContainer(IContainer container)
1920
//Register Minimal implementations
2021
scan.IncludeNamespaceContainingType<DisplayUnitRetriever>();
2122

22-
// This will be registered as singleton
23+
// These will be registered as singleton
2324
scan.ExcludeType<GroupRepository>();
2425
scan.WithConvention<OSPSuiteRegistrationConvention>();
26+
scan.ExcludeType<CsvSeparatorSelector>();
2527
});
2628

2729
//Singletons
2830
container.Register<IGroupRepository, GroupRepository>(LifeStyle.Singleton);
2931
container.Register<IOSPSuiteExecutionContext, ExecutionContext>(LifeStyle.Singleton);
32+
container.Register<ICsvDynamicSeparatorSelector, ICsvSeparatorSelector, CsvSeparatorSelector>(LifeStyle.Singleton);
3033
}
3134
}
3235
}

src/OSPSuite.R/Services/CsvSeparatorSelector.cs renamed to src/OSPSuite.CLI.Core/Services/CsvSeparatorSelector.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
using OSPSuite.Infrastructure.Import.Services;
22

3-
namespace OSPSuite.R.Services
3+
namespace OSPSuite.CLI.Core.Services
44
{
55
public interface ICsvDynamicSeparatorSelector : ICsvSeparatorSelector
66
{
77
CSVSeparators CsvSeparators { set; }
88
}
99

1010
/// <summary>
11-
/// This class is used by the CsvDataSourceFile ro correctly parse csv files
11+
/// This class is used by the CsvDataSourceFile to correctly parse csv files
1212
/// </summary>
1313
public class CsvSeparatorSelector : ICsvDynamicSeparatorSelector
1414
{

src/OSPSuite.CLI.Core/Services/QualificationRunner.cs

Lines changed: 2 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -68,41 +68,6 @@ private string createProjectOutputFolder(string outputPath, string projectName)
6868
return projectOutputFolder;
6969
}
7070

71-
private InputMapping exportInput(TModelProject project, QualificationConfiguration configuration, Input input)
72-
{
73-
var buildingBlock = BuildingBlockBy(project, input);
74-
75-
var inputsFolder = configuration.InputsFolder;
76-
var projectName = FileHelper.RemoveIllegalCharactersFrom(project.Name);
77-
var buildingBlockName = FileHelper.RemoveIllegalCharactersFrom(input.Name);
78-
var targetFolder = Path.Combine(inputsFolder, projectName, input.Type.ToString());
79-
DirectoryHelper.CreateDirectory(targetFolder);
80-
81-
var fileFullPath = Path.Combine(targetFolder, $"{buildingBlockName}{Constants.Filter.MARKDOWN_EXTENSION}");
82-
83-
ExportToMarkdown(buildingBlock, fileFullPath, input.SectionLevel).Wait();
84-
_logger.AddDebug($"Input data for {input.Type} '{input.Name}' exported to '{fileFullPath}'", project.Name);
85-
86-
return new InputMapping
87-
{
88-
SectionId = input.SectionId,
89-
SectionReference = input.SectionReference,
90-
Path = relativePath(fileFullPath, configuration.OutputFolder)
91-
};
92-
}
93-
94-
private InputMapping[] exportInputs(TModelProject project, QualificationConfiguration configuration)
95-
{
96-
if (configuration.Inputs == null)
97-
return Array.Empty<InputMapping>();
98-
// return Task.FromResult(Array.Empty<InputMapping>());
99-
100-
//TODO Enable parallel runs once https://github.com/Open-Systems-Pharmacology/OSPSuite.Utility/issues/26 is fixed
101-
// return Task.WhenAll(configuration.Inputs.Select(x => exportInput(project, configuration, x)));
102-
103-
return configuration.Inputs.Select(x => exportInput(project, configuration, x)).ToArray();
104-
}
105-
10671
private string relativePath(string path, string relativeTo) => FileHelper.CreateRelativePath(path, relativeTo, useUnixPathSeparator: true);
10772

10873
public async Task RunBatchAsync(QualificationRunOptions runOptions)
@@ -126,7 +91,7 @@ public async Task RunBatchAsync(QualificationRunOptions runOptions)
12691
}
12792

12893
var begin = DateTime.UtcNow;
129-
var project = await loadProject(runOptions, snapshot);
94+
var (project, inputMappings) = await LoadProjectAndExportInputs(runOptions, snapshot, config);
13095
LoadProjectContext(project);
13196

13297
var projectOutputFolder = createProjectOutputFolder(config.OutputFolder, project.Name);
@@ -151,8 +116,6 @@ public async Task RunBatchAsync(QualificationRunOptions runOptions)
151116

152117
var observedDataMappings = await exportAllObservedData(project, config);
153118

154-
var inputMappings = exportInputs(project, config);
155-
156119
var mapping = new QualificationMapping
157120
{
158121
SimulationMappings = simulationMappings,
@@ -264,12 +227,10 @@ private PlotMapping[] retrievePlotDefinitionsFrom(TSnapshotProject snapshotProje
264227
throw new QualificationRunException(SimulationUsedInPlotsAreNotExported(unmappedSimulations, snapshotProject.Name));
265228
}
266229

267-
private Task<TModelProject> loadProject(QualificationRunOptions runOptions, TSnapshotProject snapshot) => _snapshotTask.LoadProjectFromSnapshotAsync(snapshot, runOptions.Run);
230+
protected abstract Task<(TModelProject, InputMapping[])> LoadProjectAndExportInputs(QualificationRunOptions runOptions, TSnapshotProject snapshot, QualificationConfiguration config);
268231

269232
protected abstract SimulationExportMode ExportMode(QualificationRunOptions runOptions);
270233

271-
protected abstract Task ExportToMarkdown(object buildingBlock, string fileFullPath, int? inputSectionLevel);
272-
273234
protected abstract Task<SimulationMapping[]> ExportSimulationsIn(TModelProject project, ExportRunOptions exportRunOptions);
274235

275236
protected abstract object BuildingBlockBy(TModelProject project, Input input);

src/OSPSuite.Core/Domain/Project.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using System;
21
using System.Collections.Generic;
32
using System.Linq;
43
using OSPSuite.Utility.Collections;

src/OSPSuite.Infrastructure.Export/OSPSuite.Infrastructure.Export.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
<ItemGroup>
2626
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.2" />
27-
<PackageReference Include="NPOI" Version="2.7.2" />
27+
<PackageReference Include="NPOI" Version="2.7.4" />
2828
<PackageReference Include="OSPSuite.Utility" Version="4.1.1.3" />
2929
</ItemGroup>
3030

src/OSPSuite.Infrastructure.Import/OSPSuite.Infrastructure.Import.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
</ItemGroup>
2626

2727
<ItemGroup>
28-
<PackageReference Include="NPOI" Version="2.7.2" />
28+
<PackageReference Include="NPOI" Version="2.7.4" />
2929
<PackageReference Include="OSPSuite.Utility" Version="4.1.1.3" />
3030
<PackageReference Include="LumenWorksCsvReader" Version="4.0.0" />
3131
</ItemGroup>

src/OSPSuite.Infrastructure.Serialization/Json/JsonSerializer.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
using System.Collections.Generic;
1010
using System.IO;
1111
using System.Linq;
12-
using System.Text;
1312
using System.Threading.Tasks;
13+
using OSPSuite.Assets.Extensions;
1414

1515
namespace OSPSuite.Infrastructure.Serialization.Json
1616
{
@@ -33,7 +33,7 @@ public async Task Serialize(object objectToSerialize, string fileName)
3333

3434
public string Serialize(object objectToSerialize) => JsonConvert.SerializeObject(objectToSerialize, Formatting.Indented, _settings);
3535

36-
public string SerializeToBase64String(object objectToSerialize) => Convert.ToBase64String(Encoding.UTF8.GetBytes(Serialize(objectToSerialize)));
36+
public string SerializeToBase64String(object objectToSerialize) => Serialize(objectToSerialize).ToBase64String();
3737

3838
public async Task<object[]> DeserializeAsArray(string fileName, Type objectType)
3939
{
@@ -94,7 +94,7 @@ public async Task<T> DeserializeFromString<T>(string jsonString) where T : class
9494

9595
public async Task<T> DeserializeFromBase64String<T>(string base64String) where T : class
9696
{
97-
var jsonString = Encoding.UTF8.GetString(Convert.FromBase64String(base64String));
97+
var jsonString = base64String.FromBase64String();
9898
var deserializedObject = await DeserializeFromString(jsonString, typeof(T));
9999
return deserializedObject as T;
100100
}

src/OSPSuite.R/RRegister.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using OSPSuite.Core;
22
using OSPSuite.Core.Services;
3-
using OSPSuite.Infrastructure.Import.Services;
43
using OSPSuite.R.Domain;
54
using OSPSuite.R.Mapper;
65
using OSPSuite.R.Services;
@@ -24,7 +23,6 @@ public override void RegisterInContainer(IContainer container)
2423
//Register Mappers
2524
scan.IncludeNamespaceContainingType<ISensitivityAnalysisToCoreSensitivityAnalysisMapper>();
2625

27-
scan.ExcludeType<CsvSeparatorSelector>();
2826
scan.WithConvention<OSPSuiteRegistrationConvention>();
2927
});
3028

@@ -34,7 +32,6 @@ public override void RegisterInContainer(IContainer container)
3432

3533
container.Register<IOSPSuiteLogger, RLogger, RLogger>(LifeStyle.Singleton);
3634
container.Register<IEventPublisher, EventPublisher>(LifeStyle.Singleton);
37-
container.Register<ICsvDynamicSeparatorSelector, ICsvSeparatorSelector, CsvSeparatorSelector>(LifeStyle.Singleton);
3835
}
3936
}
4037
}

src/OSPSuite.R/Services/DataImporterTask.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Collections.Generic;
22
using System.Linq;
3+
using OSPSuite.CLI.Core.Services;
34
using OSPSuite.Core.Domain;
45
using OSPSuite.Core.Domain.Data;
56
using OSPSuite.Core.Domain.UnitSystem;

0 commit comments

Comments
 (0)