aa/Shared/Models/Stateless/XResult.cs

140 lines
7.1 KiB
C#

namespace View_by_Distance.Shared.Models.Stateless;
internal abstract class XResult
{
internal static string GetResultsDateGroupDirectory(ResultSettings resultSettings, string description, string jsonGroup)
{
string result = Path.Combine(GetResultsDateGroupDirectory(resultSettings, description), jsonGroup);
if (!Directory.Exists(result))
_ = Directory.CreateDirectory(result);
return result;
}
internal static string GetResultsDateGroupDirectory(ResultSettings resultSettings, string description)
{
string result = Path.Combine(GetResultsGroupDirectory(resultSettings, description, create: true), resultSettings.DateGroup);
if (!Directory.Exists(result))
_ = Directory.CreateDirectory(result);
return result;
}
internal static string GetRelativePath(ResultSettings resultSettings, string path)
{
string result = IPath.GetRelativePath(path, resultSettings.RootDirectory.Length);
return result;
}
private static void VerifyDirectories(ResultSettings resultSettings, string dateGroupDirectory, string jsonGroup)
{
string checkDirectory;
int currentYear = DateTime.Now.Year;
for (int i = resultSettings.EpicYear; i < currentYear + 1; i++)
{
checkDirectory = Path.Combine(dateGroupDirectory, jsonGroup, i.ToString());
if (!Directory.Exists(checkDirectory))
_ = Directory.CreateDirectory(checkDirectory);
}
}
private static void CheckContent(ResultSettings resultSettings, string dateGroupDirectory, string contentDescription, string result)
{
VerifyDirectories(resultSettings, dateGroupDirectory, resultSettings.ResultContent);
string contentDirectory = new(result.Replace("<>", resultSettings.ResultContent));
if (!Directory.Exists(contentDirectory))
_ = Directory.CreateDirectory(contentDirectory);
string checkDirectory = Path.Combine(dateGroupDirectory, string.Concat("() - ", contentDescription));
if (!Directory.Exists(checkDirectory))
_ = Directory.CreateDirectory(checkDirectory);
}
private static void CheckSingleton(ResultSettings resultSettings, string dateGroupDirectory, string singletonDescription, bool converted, string result)
{
VerifyDirectories(resultSettings, dateGroupDirectory, resultSettings.ResultSingleton);
if (!converted)
{
string singletonDirectory = new(result.Replace("<>", resultSettings.ResultSingleton));
if (!Directory.Exists(singletonDirectory))
_ = Directory.CreateDirectory(singletonDirectory);
}
string checkDirectory = Path.Combine(dateGroupDirectory, string.Concat("{} - ", singletonDescription));
if (!Directory.Exists(checkDirectory))
_ = Directory.CreateDirectory(checkDirectory);
}
private static void CheckCollection(ResultSettings resultSettings, string dateGroupDirectory, string collectionDescription, bool converted, string result)
{
VerifyDirectories(resultSettings, dateGroupDirectory, resultSettings.ResultCollection);
if (!converted)
{
string collectionDirectory = new(result.Replace("<>", resultSettings.ResultCollection));
if (!Directory.Exists(collectionDirectory))
_ = Directory.CreateDirectory(collectionDirectory);
}
string checkDirectory = Path.Combine(dateGroupDirectory, string.Concat("[] - ", collectionDescription));
if (!Directory.Exists(checkDirectory))
_ = Directory.CreateDirectory(checkDirectory);
}
internal static string GetResultsFullGroupDirectory(ResultSettings resultSettings, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel)
{
string result = GetResultsDateGroupDirectory(resultSettings, description);
if (includeResizeGroup)
result = Path.Combine(result, outputResolution);
if (includeModel && includePredictorModel)
{
string modelName;
string predictorModelName;
if (resultSettings.ModelName is null)
modelName = Model.Hog.ToString();
else
modelName = resultSettings.ModelName;
if (resultSettings.PredictorModelName is null)
predictorModelName = PredictorModel.Large.ToString();
else
predictorModelName = resultSettings.PredictorModelName;
string dateGroupDirectory = string.Concat(outputResolution.Replace(" ", string.Empty), "-", modelName, "-", predictorModelName, "-", resultSettings.NumberOfJitters, "-", resultSettings.NumberOfTimesToUpsample);
result = Path.Combine(result, dateGroupDirectory);
}
else if (includeModel)
throw new Exception();
else if (includePredictorModel)
throw new Exception();
if (!Directory.Exists(result))
_ = Directory.CreateDirectory(result);
return result;
}
internal static List<string> GetDirectoryInfoCollection(ResultSettings resultSettings, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted)
{
List<string> results = [];
string sourceDirectorySegment = GetRelativePath(resultSettings, sourceDirectory);
string result = string.Concat(Path.Combine(dateGroupDirectory, "<>"), sourceDirectorySegment);
if (!string.IsNullOrEmpty(contentDescription))
CheckContent(resultSettings, dateGroupDirectory, contentDescription, result);
if (!string.IsNullOrEmpty(singletonDescription))
CheckSingleton(resultSettings, dateGroupDirectory, singletonDescription, converted, result);
if (!string.IsNullOrEmpty(collectionDescription))
CheckCollection(resultSettings, dateGroupDirectory, collectionDescription, converted, result);
results.Add(result);
return results;
}
internal static string GetResultsGroupDirectory(ResultSettings resultSettings, string description, bool create)
{
string result = Path.Combine($"{resultSettings.RootDirectory}-Results", description.Replace('_', ')'));
if (create && !Directory.Exists(result))
_ = Directory.CreateDirectory(result);
return result;
}
internal static List<string> GetDirectoryInfoCollection(ResultSettings resultSettings, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription)
{
List<string> results;
bool converted = false;
string dateGroupDirectory = GetResultsFullGroupDirectory(resultSettings, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel);
results = GetDirectoryInfoCollection(resultSettings, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted);
return results;
}
}