public DirectoryInfo GetDirectoryFor(IExtractCommand request) { var cmd = request as IExtractDatasetCommand; if (string.IsNullOrWhiteSpace(ExtractionSubdirectoryPattern) || cmd == null) { return(request.GetExtractionDirectory()); } var cata = cmd.SelectedDataSets.ExtractableDataSet.Catalogue; if (ExtractionSubdirectoryPattern.Contains("$a") && string.IsNullOrWhiteSpace(cata.Acronym)) { throw new Exception($"Catalogue {cata} does not have an Acronym and ExtractionSubdirectoryPattern contains $a"); } var path = Path.Combine(cmd.Project.ExtractionDirectory, ExtractionSubdirectoryPattern .Replace("$c", QuerySyntaxHelper.MakeHeaderNameSensible(cmd.Configuration.Name)) .Replace("$i", cmd.Configuration.ID.ToString()) .Replace("$d", QuerySyntaxHelper.MakeHeaderNameSensible(cata.Name)) .Replace("$a", QuerySyntaxHelper.MakeHeaderNameSensible(cata.Acronym)) .Replace("$n", cata.ID.ToString()) ); var dir = new DirectoryInfo(path); if (!dir.Exists) { dir.Create(); } return(dir); }
/// <inheritdoc/> public virtual void Check(ICheckNotifier notifier) { if (!string.IsNullOrWhiteSpace(ExtractionSubdirectoryPattern)) { if (ExtractionSubdirectoryPattern.Contains(".")) { notifier.OnCheckPerformed(new CheckEventArgs( "ExtractionSubdirectoryPattern cannot contain dots, it must be relative e.g. $c/$d", CheckResult.Fail)); } if (!ExtractionSubdirectoryPattern.Contains("$i") && !ExtractionSubdirectoryPattern.Contains("$c")) { notifier.OnCheckPerformed(new CheckEventArgs( "ExtractionSubdirectoryPattern must contain a Configuration element ($i or $c)", CheckResult.Fail)); } if (!ExtractionSubdirectoryPattern.Contains("$a") && !ExtractionSubdirectoryPattern.Contains("$d") && !ExtractionSubdirectoryPattern.Contains("$n")) { notifier.OnCheckPerformed(new CheckEventArgs( "ExtractionSubdirectoryPattern must contain a Dataset element ($d, $a or $n)", CheckResult.Fail)); } } }