private DataFile LoadLayout(string path)
{
var parser = new ParseDocumentCommand(path);
parser.Execute();
var metadataDate = parser.Date;
if (this.AdditionalMetadataForFiles != null)
{
var rootPath = Path.GetDirectoryName(this.DataPath.TrimEnd('\\'));
var relativePath = path.Substring(rootPath.Length + 1);
foreach (var additionalMetadataConfig in this.AdditionalMetadataForFiles)
{
if (additionalMetadataConfig.Match.IsMatch(relativePath))
{
parser.Metadata.AssignFrom(path, additionalMetadataConfig.Metadata);
}
}
}
var disableDateFromFileName = parser.Metadata.GetAndRemove("DisableDateFromFileName", false);
// If the parser metadata didn't specify the date, try to use a date from the filename.
//
if (!disableDateFromFileName && !metadataDate.HasValue)
{
var fileName = Path.GetFileName(path);
var match = DateFromFileName.Match(fileName);
if (match.Success)
{
var year = Convert.ToInt32(match.Groups[1].Value, 10);
var month = Convert.ToInt32(match.Groups[2].Value, 10);
var day = Convert.ToInt32(match.Groups[3].Value, 10);
var hour = match.Groups[4].Success ? Convert.ToInt32(match.Groups[4].Value, 10) : 0;
var minute = match.Groups[5].Success ? Convert.ToInt32(match.Groups[5].Value, 10) : 0;
var second = match.Groups[6].Success ? Convert.ToInt32(match.Groups[6].Value, 10) : 0;
metadataDate = new DateTime(year, month, day, hour, minute, second);
}
}
var dataFile = new DataFile(path, this.DataPath, parser.Content, parser.Metadata, parser.Queries);
if (metadataDate.HasValue)
{
dataFile.Date = metadataDate.Value;
}
return dataFile;
}