Skip to content

Commit f9434fd

Browse files
committed
1 parent c264649 commit f9434fd

4 files changed

Lines changed: 27 additions & 32 deletions

File tree

src/Toolbox/Charts/ChartDataFileGenerator.cs

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -472,38 +472,36 @@ public void GeneratePoemsOfYearByDayRadarChartDataFile(Root data, int year)
472472
/// and categorizes them by seasons or a general context.
473473
/// This method processes the given poems from the Root object and distinguishes regular,
474474
/// variable, and undefined metrics. It outputs:
475-
/// - A pie chart file "poems-verse-length-pie.js" when a general context is used (seasonId is null).
475+
/// - A pie chart file "poems-verse-length-pie.js" when a general context is used (seasonId is null, forSonnet is falsy).
476+
/// - A bar chart file "metrique_variable-bar.js" when a general context is used (seasonId is null, forSonnet is falsy).
476477
/// - A bar chart file "poems-verse-length-bar.js" when a specific season is selected.
477-
/// - A bar chart file "metrique_variable-bar.js" when a general context is used (seasonId is null).
478+
/// - A pie chart file "sonnet-verse-length-pie.js" when forSonnet is true.
478479
/// </summary>
479480
/// <param name="data">The root object containing seasons and poems data.</param>
480481
/// <param name="seasonId">An optional season identifier to filter poems by season. If null, all seasons are included.</param>
481-
public void GeneratePoemMetricBarAndPieChartDataFile(Root data, int? seasonId)
482+
/// <param name="forSonnet">A flag indicating that only poems of type sonnet are taken into account.</param>
483+
public void GeneratePoemMetricBarAndPieChartDataFile(Root data, int? seasonId, bool? forSonnet = false)
482484
{
483-
var isGeneral = seasonId is null;
485+
var isGeneral = seasonId is null && forSonnet != true;
484486
var rootDir = Path.Combine(Directory.GetCurrentDirectory(),
485487
configuration[Constants.CHART_DATA_FILES_ROOT_DIR]!);
486-
var fileName = isGeneral ? "poems-verse-length-pie.js" : "poems-verse-length-bar.js";
487-
var subDir = isGeneral ? "general" : $"season-{seasonId}";
488-
var chartId = isGeneral ? "poemVerseLengthPie" : $"season{seasonId}VerseLengthBar";
488+
var fileName = seasonId is not null ? "poems-verse-length-bar.js" : forSonnet == true ? "sonnet-verse-length-pie.js" : "poems-verse-length-pie.js";
489+
var subDir = seasonId is not null ? $"season-{seasonId}" : forSonnet == true ? "taxonomy" : "general";
490+
var chartId = seasonId is not null ? $"season{seasonId}VerseLengthBar" : forSonnet == true ? "sonnetVerseLengthPie" : "poemVerseLengthPie";
489491
using var streamWriter = new StreamWriter(Path.Combine(rootDir, subDir, fileName));
490492
var chartDataFileHelper = new ChartDataFileHelper(streamWriter,
491-
isGeneral ? ChartType.Pie : ChartType.Bar, 1);
493+
seasonId is not null ? ChartType.Bar : ChartType.Pie, 1);
492494
chartDataFileHelper.WriteBeforeData();
493495
var regularMetricData = new Dictionary<int, int>();
494496
var variableMetricData = new Dictionary<string, int>();
495-
var nbUndefinedVerseLength = 0;
496497
var poems = seasonId is not null
497498
? data.Seasons.First(x => x.Id == seasonId).Poems
499+
: forSonnet == true ? data.Seasons.SelectMany(x => x.Poems).Where(x => x.PoemType == "sonnet")
498500
: data.Seasons.SelectMany(x => x.Poems);
499501

500502
foreach (var poem in poems)
501503
{
502-
if (string.IsNullOrEmpty(poem.VerseLength))
503-
{
504-
nbUndefinedVerseLength++;
505-
}
506-
else if (poem.HasVariableMetric)
504+
if (poem.HasVariableMetric)
507505
{
508506
if (isGeneral)
509507
{
@@ -563,14 +561,10 @@ public void GeneratePoemMetricBarAndPieChartDataFile(Root data, int? seasonId)
563561
variableMetricChartData.Add(new(verseLength, variableMetricData[verseLength], "rgba(72, 149, 239, 1)"));
564562
}
565563

566-
var undefinedVerseLengthChartData = new ColoredDataLine
567-
("Pas de données pour l\\'instant", nbUndefinedVerseLength, "rgb(211, 211, 211)"
568-
);
569-
570-
// General pie chart or Season's bar chart
564+
// General/for sonnet pie chart vs Season's bar chart
571565
var dataLines = new List<DataLine>();
572566

573-
if (isGeneral)
567+
if (seasonId is null || forSonnet == true)
574568
{
575569
var metrics = configuration.GetSection(Constants.METRIC_SETTINGS).Get<MetricSettings>()!.Metrics;
576570
var coloredDataLines = new List<ColoredDataLine>();
@@ -591,9 +585,7 @@ public void GeneratePoemMetricBarAndPieChartDataFile(Root data, int? seasonId)
591585
{
592586
dataLines.AddRange(regularMetricChartData);
593587
dataLines.AddRange(variableMetricChartData);
594-
if (nbUndefinedVerseLength > 0)
595-
dataLines.Add(undefinedVerseLengthChartData);
596-
588+
597589
chartDataFileHelper.WriteData(dataLines, true);
598590

599591
chartDataFileHelper.WriteAfterData(chartId, ["Poèmes"],
@@ -1635,7 +1627,6 @@ private void GenerateTopMostCategoriesListing(IEnumerable<Poem> poems, string fi
16351627
streamWriter.Close();
16361628
}
16371629

1638-
16391630
/// <summary>
16401631
/// Retrieves the top most represented months from the provided dictionary of month-day data.
16411632
/// The method aggregates the data by month, ranks the months by their total occurrences,

src/Toolbox/Program.cs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,8 @@ private static async Task<bool> PerformActionAsync(MenuItem menuChoice)
139139
case MainMenuSettings.MenuChoices.GeneratePoemsLengthBarChartDataFile:
140140
GeneratePoemsLengthPieChartDataFile();
141141
break;
142-
case MainMenuSettings.MenuChoices.GeneratePoemVersesLengthBarChartDataFile:
143-
GeneratePoemMetricPieChartDataFile();
142+
case MainMenuSettings.MenuChoices.GeneratePoemMetricBarAndPieChartDataFiles:
143+
GeneratePoemMetricPieChartDataFile(null);
144144
break;
145145
case MainMenuSettings.MenuChoices.GenerateSeasonCategoriesPieChartDataFile:
146146
GenerateSeasonCategoriesPieChart(menuChoice);
@@ -393,10 +393,15 @@ private static void GeneratePoemsLengthPieChartDataFile()
393393
Console.WriteLine("Poems length pie chart data file OK");
394394
}
395395

396-
private static void GeneratePoemMetricPieChartDataFile()
396+
private static void GeneratePoemMetricPieChartDataFile(int? seasonId)
397397
{
398398
_chartDataFileGenerator.GeneratePoemMetricBarAndPieChartDataFile(_data, null);
399-
Console.WriteLine("Poem verses length pie chart data file OK");
399+
_chartDataFileGenerator.GeneratePoemMetricBarAndPieChartDataFile(_data, null, forSonnet: true);
400+
if (seasonId is not null)
401+
{
402+
_chartDataFileGenerator.GeneratePoemMetricBarAndPieChartDataFile(_data, seasonId);
403+
}
404+
Console.WriteLine("Poem metric pie chart data files OK");
400405
}
401406

402407
private static void GenerateSeasonCategoriesPieChart(MenuItem menuChoice)
@@ -453,8 +458,7 @@ private static void GenerateDependantChartDataFilesAndCheckQuality(int seasonId,
453458
GeneratePoemsLengthPieChartDataFile();
454459

455460
// General and season's metric
456-
GeneratePoemMetricPieChartDataFile();
457-
_chartDataFileGenerator.GeneratePoemMetricBarAndPieChartDataFile(_data, seasonId);
461+
GeneratePoemMetricPieChartDataFile(seasonId);
458462

459463
// Season categories' pie
460464
_chartDataFileGenerator.GenerateSeasonCategoriesPieChartDataFile(_data, seasonId);

src/Toolbox/Settings/MainMenuSettings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public enum MenuChoices
2525
GenerateSeasonCategoriesPieChartAskSeasonId = 421,
2626
GeneratePoemsRadarChartDataFile = 430,
2727
GeneratePoemsRadarChartAskCategory = 431,
28-
GeneratePoemVersesLengthBarChartDataFile = 440,
28+
GeneratePoemMetricBarAndPieChartDataFiles = 440,
2929
GenerateAllSeasonsPoemIntervalBarChartDataFile = 450,
3030
GenerateBubbleChartDataFile = 460,
3131
GenerateLineChartDataFile = 470,

src/Toolbox/appsettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@
109109
},
110110
{
111111
"Key": 440,
112-
"Label": "Poem metric (bar and pie chart)"
112+
"Label": "Poem metric (bar and pie charts)"
113113
},
114114
{
115115
"Key": 450,

0 commit comments

Comments
 (0)