Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Lib_CSharp
2 changes: 1 addition & 1 deletion PoliNetwork.Graduatorie.Common/Objects/EnrollType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public int GetHashWithoutLastUpdate()

return i;
}

public static EnrollType From(string? rowCanEnrollInto, bool rowCanEnroll)
{
if (rowCanEnroll == false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using PoliNetwork.Graduatorie.Common.Data;
using PoliNetwork.Graduatorie.Common.Objects;
using PoliNetwork.Graduatorie.Parser.Objects.Json.Indexes.Specific;
using PoliNetwork.Graduatorie.Parser.Objects.RankingNS;

Expand All @@ -23,8 +22,8 @@ public void Write(string outFolder, string pathFile)
var mainJsonString = JsonConvert.SerializeObject(this, Culture.JsonSerializerSettings);
File.WriteAllText(mainJsonPath, mainJsonString);
}
public static void WriteAllIndexes(RankingsSet rankingsSet, string outFolder, ArgsConfig argsConfig)

public static void WriteAllIndexes(RankingsSet rankingsSet, string outFolder)
{
//now let's write each single different index
BySchoolYearJson.From(rankingsSet).Write(outFolder, BySchoolYearJson.CustomPath);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
#region

using System.Diagnostics;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using PoliNetwork.Graduatorie.Common.Enums;
using PoliNetwork.Graduatorie.Parser.Objects.RankingNS;

#endregion

namespace PoliNetwork.Graduatorie.Parser.Objects.Json.Indexes.Specific;
Expand All @@ -20,20 +22,20 @@ namespace PoliNetwork.Graduatorie.Parser.Objects.Json.Indexes.Specific;
public class BySchoolYearCourseJson : IndexJsonBase
{
internal const string CustomPath = "bySchoolYearCourse.json";
public List<SingleCourseJson> All = new(); // decide whether to include it in the json serialization

//keys: school, year, course, location
public SchoolsDict Schools = new();
public List<SingleCourseJson> All = new(); // decide whether to include it in the json serialization

public static BySchoolYearCourseJson From(RankingsSet set)
{
var mainJson = new BySchoolYearCourseJson { LastUpdate = set.LastUpdate };

var list = set.Rankings
.SelectMany(r => r.ToSingleCourseJson())
.DistinctBy(r => new { r.Id, r.Location })
.ToList();

list.Sort();
mainJson.All = list;

Expand Down Expand Up @@ -67,7 +69,7 @@ private static YearsDict GetYearsDict(IEnumerable<IGrouping<int, Ranking>> byYea
return yearsDict;
}

private static CoursesDict GetCoursesDict(IGrouping<int, Ranking> yearGroup)
private static CoursesDict GetCoursesDict(IEnumerable<Ranking> yearGroup)
{
var coursesDict = new CoursesDict();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ namespace PoliNetwork.Graduatorie.Parser.Objects.Json.Indexes.Specific;
public class BySchoolYearJson : IndexJsonBase
{
internal const string CustomPath = "bySchoolYear.json";
public List<SingleCourseJson> All = new(); // decide whether to include it in the json serialization

public SchoolsDict Schools = new();
public List<SingleCourseJson> All = new(); // decide whether to include it in the json serialization

public static BySchoolYearJson From(RankingsSet set)
{
Expand All @@ -30,7 +30,7 @@ public static BySchoolYearJson From(RankingsSet set)
.SelectMany(r => r.ToSingleCourseJson())
.DistinctBy(r => new { r.Id })
.ToList();

list.Sort();
mainJson.All = list;

Expand Down Expand Up @@ -90,15 +90,7 @@ public static RankingsSet GetAndParse(string dataFolder)

public List<Ranking> GetRankings(string outFolder)
{
List<Ranking> rankings = new();

foreach (var singleCourseJson in All)
{
var fullPath = singleCourseJson.GetFullPath(outFolder);
var ranking = Ranking.FromJson(fullPath);
if (ranking != null) rankings.Add(ranking);
}

return rankings;
return All.Select(singleCourseJson => singleCourseJson.GetFullPath(outFolder)).Select(Ranking.FromJson)
.OfType<Ranking>().ToList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,22 @@ namespace PoliNetwork.Graduatorie.Parser.Objects.Json.Indexes.Specific;
public class ByYearSchoolJson : IndexJsonBase
{
internal const string CustomPath = "byYearSchool.json";
public List<SingleCourseJson> All = new(); // decide whether to include it in the json serialization

public YearsDict Years = new();
public List<SingleCourseJson> All = new(); // decide whether to include it in the json serialization

public static ByYearSchoolJson From(RankingsSet set)
{
var mainJson = new ByYearSchoolJson { LastUpdate = set.LastUpdate };

var list = set.Rankings
.SelectMany(r => r.ToSingleCourseJson()).ToList()
.DistinctBy(r => new { r.Id })
.ToList();

list.Sort();
mainJson.All = list;

// group rankings by year
var byYear = set.Rankings.Where(r => r.Year != null).GroupBy(r => r.Year!.Value);
foreach (var yearGroup in byYear)
Expand All @@ -57,7 +57,7 @@ private static SchoolsDict GetSchoolsDict(IEnumerable<IGrouping<SchoolEnum, Rank
.DistinctBy(x => x.Link)
.OrderBy(r => r.Id)
.ToList();

schoolsDict.Add(schoolGroup.Key, filenames);
}

Expand Down
34 changes: 17 additions & 17 deletions PoliNetwork.Graduatorie.Parser/Objects/Json/SingleCourseJson.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,25 +22,10 @@ public class SingleCourseJson : IComparable<SingleCourseJson>
public SchoolEnum? School;
public int? Year;

public static SingleCourseJson From(Ranking ranking, CourseTable? course)
{
var basePath = $"{ranking.School}/{ranking.Year}/"; // "Ingegneria/2023"
return new SingleCourseJson
{
Link = ranking.GetFilename(),
Id = ranking.GetId(),
BasePath = basePath,
Year = ranking.Year,
School = ranking.School,
Location = course?.Location,
RankingOrder = ranking.RankingOrder
};
}

public int CompareTo(SingleCourseJson? singleCourseJson)
{
if (singleCourseJson == null) return 1;

if (Year != singleCourseJson.Year)
return (Year ?? -1) < (singleCourseJson.Year ?? -1) ? -1 : 1;

Expand All @@ -60,7 +45,22 @@ public int CompareTo(SingleCourseJson? singleCourseJson)

return 0;
}


public static SingleCourseJson From(Ranking ranking, CourseTable? course)
{
var basePath = $"{ranking.School}/{ranking.Year}/"; // "Ingegneria/2023"
return new SingleCourseJson
{
Link = ranking.GetFilename(),
Id = ranking.GetId(),
BasePath = basePath,
Year = ranking.Year,
School = ranking.School,
Location = course?.Location,
RankingOrder = ranking.RankingOrder
};
}

public int GetHashWithoutLastUpdate()
{
var hashWithoutLastUpdate = Link?.GetHashCode() ?? "Link".GetHashCode();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using Newtonsoft.Json.Serialization;
using PoliNetwork.Graduatorie.Common.Objects;
using PoliNetwork.Graduatorie.Parser.Objects.RankingNS;

// ReSharper disable CanSimplifyDictionaryLookupWithTryAdd

#endregion
Expand Down Expand Up @@ -41,10 +42,7 @@ public void Write(string outFolder, ArgsConfig argsConfig)
var statsFolderPath = Path.Join(outFolder, StatsFolderName);
if (!Directory.Exists(statsFolderPath)) Directory.CreateDirectory(statsFolderPath);

foreach (var yearStats in Stats.Values)
{
yearStats.Write(statsFolderPath, argsConfig);
}
foreach (var yearStats in Stats.Values) yearStats.Write(statsFolderPath, argsConfig);
}

public int GetHashWithoutLastUpdate()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ public class StatsSchool
public List<StatsSingleCourseJson> List = new();
public int NumStudents;

public static StatsSchool From(List<Ranking> pRankings)
public static StatsSchool From(IEnumerable<Ranking> pRankings)
{
var statsSchool = new StatsSchool();
var rankings = pRankings.Where(r => r.Year != null && r.School != null).ToList();
var rankings = pRankings.Where(r => r is { Year: not null, School: not null }).ToList();

statsSchool.NumStudents =
rankings.Select(x => (x.RankingSummary ?? x.CreateSummary()).HowManyStudents ?? 0).Sum();
Expand Down
21 changes: 12 additions & 9 deletions PoliNetwork.Graduatorie.Parser/Objects/Json/Stats/StatsYear.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using PoliNetwork.Graduatorie.Common.Enums;
using PoliNetwork.Graduatorie.Common.Objects;
using PoliNetwork.Graduatorie.Parser.Objects.RankingNS;

// ReSharper disable CanSimplifyDictionaryLookupWithTryAdd

#endregion
Expand All @@ -19,27 +20,29 @@ namespace PoliNetwork.Graduatorie.Parser.Objects.Json.Stats;
[JsonObject(MemberSerialization.Fields, NamingStrategyType = typeof(CamelCaseNamingStrategy))]
public class StatsYear
{
public SchoolsDict Schools = new();
public int NumStudents;
public SchoolsDict Schools = new();
public int Year;

public static StatsYear From(List<Ranking> rankings)
{
var statsYear = new StatsYear();

statsYear.Year = rankings.First(r => r.Year != null).Year!.Value; // just hilarious
statsYear.NumStudents =
rankings.Select(r => (r.RankingSummary ?? r.CreateSummary()).HowManyStudents ?? 0).Sum(); // this ?? is crazy
var statsYear = new StatsYear
{
Year = rankings.First(r => r.Year != null).Year!.Value, // just hilarious
NumStudents = rankings.Select(r => (r.RankingSummary ?? r.CreateSummary()).HowManyStudents ?? 0)
.Sum() // this ?? is crazy
};

var bySchool = rankings.Where(r => r.School != null).GroupBy(r => r.School!.Value);
foreach (var schoolGroup in bySchool)
{
var statsSchool = StatsSchool.From(schoolGroup.ToList());

if (statsYear.Schools.ContainsKey(schoolGroup.Key)) throw new UnreachableException(); // should be impossible, right?
if (statsYear.Schools.ContainsKey(schoolGroup.Key))
throw new UnreachableException(); // should be impossible, right?
statsYear.Schools.Add(schoolGroup.Key, statsSchool);
}

return statsYear;
}

Expand All @@ -62,7 +65,7 @@ private bool ExitIfThereIsntAnUpdate(string fullJsonPath)
var savedStats = JsonConvert.DeserializeObject<StatsYear>(saved, Culture.JsonSerializerSettings);

if (string.IsNullOrEmpty(saved) || savedStats == null) return false;

var savedHash = savedStats.GetHashWithoutLastUpdate();
var hash = GetHashWithoutLastUpdate();
return savedHash == hash;
Expand Down
60 changes: 34 additions & 26 deletions PoliNetwork.Graduatorie.Parser/Objects/RankingNS/Ranking.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,23 +30,6 @@ public class Ranking : IComparable<Ranking>, IEquatable<Ranking>
public RankingUrl? Url;
public int? Year;

public RankingSummaryStudent GetRankingSummaryStudent()
{
return new RankingSummaryStudent(RankingOrder?.Phase, School, Year, Url);
}

public static Ranking? FromJson(string fullPath)
{
// if (!File.Exists(fullPath)) return null;
//
// var str = File.ReadAllText(fullPath);
// var ranking = JsonConvert.DeserializeObject<Ranking>(str, Culture.JsonSerializerSettings);
// return ranking;

// consider merging the two functions at some point
return Utils.Transformer.ParserNS.Parser.ParseJsonRanking(fullPath);
}

public int CompareTo(Ranking? other)
{
if (ReferenceEquals(this, other)) return 0;
Expand All @@ -62,6 +45,23 @@ public bool Equals(Ranking? other)
return GetHashWithoutLastUpdate() == other.GetHashWithoutLastUpdate();
}

public RankingSummaryStudent GetRankingSummaryStudent()
{
return new RankingSummaryStudent(RankingOrder?.Phase, School, Year, Url);
}

public static Ranking? FromJson(string fullPath)
{
// if (!File.Exists(fullPath)) return null;
//
// var str = File.ReadAllText(fullPath);
// var ranking = JsonConvert.DeserializeObject<Ranking>(str, Culture.JsonSerializerSettings);
// return ranking;

// consider merging the two functions at some point
return Utils.Transformer.ParserNS.Parser.ParseJsonRanking(fullPath);
}


public bool IsSimilarTo(Ranking ranking)
{
Expand Down Expand Up @@ -142,19 +142,18 @@ public void WriteAsJson(string outFolder, bool forceReparse = false)
{
var folderPath = GetBasePath(outFolder);
Directory.CreateDirectory(folderPath);

var fullPath = GetFullPath(outFolder);

var savedRanking = FromJson(fullPath);
var equalsSaved = savedRanking != null && Equals(savedRanking);

if (forceReparse || equalsSaved || savedRanking == null)
{
var rankingJsonString = JsonConvert.SerializeObject(this, Culture.JsonSerializerSettings);
File.WriteAllText(fullPath, rankingJsonString);
}
if (!forceReparse && equalsSaved) return;

var rankingJsonString = JsonConvert.SerializeObject(this, Culture.JsonSerializerSettings);
File.WriteAllText(fullPath, rankingJsonString);
}

/***
* Ottieni l'hash senza considerare il valore di LastUpdate
*/
Expand All @@ -177,10 +176,19 @@ public int GetHashWithoutLastUpdate()
i = ByCourse.Aggregate(i, (current, variable) =>
{
var hashWithoutLastUpdate = variable.GetHashWithoutLastUpdate();
var iList = hashWithoutLastUpdate;
return current ^ iList;
return current ^ hashWithoutLastUpdate;
});

return i;
}

public override bool Equals(object? obj)
{
return Equals(obj as Ranking);
}

public override int GetHashCode()
{
return GetHashWithoutLastUpdate();
}
}
Loading