using View_by_Distance.Shared.Models.Stateless; namespace View_by_Distance.Property.Models.Stateless; internal class Result { internal static string GetRelativePath(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string path) { string result = Shared.Models.Stateless.Methods.IPath.GetRelativePath(path, propertyConfiguration.RootDirectory.Length); return result; } internal static string GetResultsGroupDirectory(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string description, bool create) { string result = Path.Combine($"{propertyConfiguration.RootDirectory}-Results", description.Replace('_', ')')); if (create && !Directory.Exists(result)) _ = Directory.CreateDirectory(result); return result; } internal static string GetResultsDateGroupDirectory(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string description) { string result = Path.Combine(GetResultsGroupDirectory(propertyConfiguration, description, create: true), propertyConfiguration.DateGroup); if (!Directory.Exists(result)) _ = Directory.CreateDirectory(result); return result; } internal static string GetResultsDateGroupDirectory(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string description, string jsonGroup) { string result = Path.Combine(GetResultsDateGroupDirectory(propertyConfiguration, description), jsonGroup); if (!Directory.Exists(result)) _ = Directory.CreateDirectory(result); return result; } internal static string GetResultsFullGroupDirectory(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel) { string result = GetResultsDateGroupDirectory(propertyConfiguration, description); if (includeResizeGroup) result = Path.Combine(result, outputResolution); if (includeModel && includePredictorModel) { string modelName; string predictorModelName; if (propertyConfiguration.ModelName is null) modelName = Model.Hog.ToString(); else modelName = propertyConfiguration.ModelName; if (propertyConfiguration.PredictorModelName is null) predictorModelName = PredictorModel.Large.ToString(); else predictorModelName = propertyConfiguration.PredictorModelName; string dateGroupDirectory = string.Concat(outputResolution.Replace(" ", string.Empty), "-", modelName, "-", predictorModelName, "-", propertyConfiguration.NumberOfJitters, "-", propertyConfiguration.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; } private static void CheckContent(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string dateGroupDirectory, string contentDescription, string result) { string checkDirectory; checkDirectory = Path.Combine(dateGroupDirectory, propertyConfiguration.ResultContent, propertyConfiguration.ResultAllInOne); if (!Directory.Exists(checkDirectory)) _ = Directory.CreateDirectory(checkDirectory); string contentDirectory = new(result.Replace("<>", propertyConfiguration.ResultContent)); if (!Directory.Exists(contentDirectory)) _ = Directory.CreateDirectory(contentDirectory); checkDirectory = Path.Combine(dateGroupDirectory, string.Concat("() - ", contentDescription)); if (!Directory.Exists(checkDirectory)) _ = Directory.CreateDirectory(checkDirectory); } private static void CheckSingleton(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string dateGroupDirectory, string singletonDescription, bool converted, string result) { string checkDirectory; checkDirectory = Path.Combine(dateGroupDirectory, propertyConfiguration.ResultSingleton, propertyConfiguration.ResultAllInOne); if (!Directory.Exists(checkDirectory)) _ = Directory.CreateDirectory(checkDirectory); if (!converted) { string singletonDirectory = new(result.Replace("<>", propertyConfiguration.ResultSingleton)); if (!Directory.Exists(singletonDirectory)) _ = Directory.CreateDirectory(singletonDirectory); } checkDirectory = Path.Combine(dateGroupDirectory, string.Concat("{} - ", singletonDescription)); if (!Directory.Exists(checkDirectory)) _ = Directory.CreateDirectory(checkDirectory); } private static void CheckCollection(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string dateGroupDirectory, string collectionDescription, bool converted, string result) { string checkDirectory = Path.Combine(dateGroupDirectory, propertyConfiguration.ResultCollection, propertyConfiguration.ResultAllInOne); if (!Directory.Exists(checkDirectory)) _ = Directory.CreateDirectory(checkDirectory); if (!converted) { string collectionDirectory = new(result.Replace("<>", propertyConfiguration.ResultCollection)); if (!Directory.Exists(collectionDirectory)) _ = Directory.CreateDirectory(collectionDirectory); } checkDirectory = Path.Combine(dateGroupDirectory, string.Concat("[] - ", collectionDescription)); if (!Directory.Exists(checkDirectory)) _ = Directory.CreateDirectory(checkDirectory); } internal static List GetDirectoryInfoCollection(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string sourceDirectory, string dateGroupDirectory, string contentDescription, string singletonDescription, string collectionDescription, bool converted) { List results = new(); string sourceDirectorySegment = GetRelativePath(propertyConfiguration, sourceDirectory); string result = string.Concat(Path.Combine(dateGroupDirectory, "<>"), sourceDirectorySegment); if (!string.IsNullOrEmpty(contentDescription)) CheckContent(propertyConfiguration, dateGroupDirectory, contentDescription, result); if (!string.IsNullOrEmpty(singletonDescription)) CheckSingleton(propertyConfiguration, dateGroupDirectory, singletonDescription, converted, result); if (!string.IsNullOrEmpty(collectionDescription)) CheckCollection(propertyConfiguration, dateGroupDirectory, collectionDescription, converted, result); results.Add(result); return results; } internal static List GetDirectoryInfoCollection(Shared.Models.Properties.IPropertyConfiguration propertyConfiguration, string sourceDirectory, string description, string outputResolution, bool includeResizeGroup, bool includeModel, bool includePredictorModel, string contentDescription, string singletonDescription, string collectionDescription) { List results; bool converted = false; string dateGroupDirectory = GetResultsFullGroupDirectory(propertyConfiguration, description, outputResolution, includeResizeGroup, includeModel, includePredictorModel); results = GetDirectoryInfoCollection(propertyConfiguration, sourceDirectory, dateGroupDirectory, contentDescription, singletonDescription, collectionDescription, converted); return results; } }