/// <summary> /// Constructor /// </summary> /// <param name="archivePath">Fully qualified file name for archive file</param> /// <param name="abstractFactory">Factory to create tokenizers, readers etc.</param> public ArchiveReader(string archivePath, IAbstractFactory abstractFactory) { this.abstractFactory = abstractFactory ?? throw new ArgumentNullException(nameof(abstractFactory)); FileAttributes fileAttributes = File.GetAttributes(archivePath); if ((fileAttributes & FileAttributes.Directory) == FileAttributes.Directory) { //File is a directory. Set the outputPath and continue OutputPath = string.IsNullOrWhiteSpace(archivePath) ? throw new ArgumentNullException(nameof(archivePath)) : archivePath; } else { //File is an archive file. Extract to temp directory archiveFolder = abstractFactory.CreateArchiveFolder(archivePath); OutputPath = archiveFolder.Extract(); } FileName = archivePath; metaDataReader = abstractFactory.CreateMetaDataReader(); MetaData = metaDataReader.ReadMetaData(OutputPath); //Create a core file reader var coreFileMetaData = abstractFactory.CreateCoreMetaData(MetaData.Core); coreFile = CreateFileReader(coreFileMetaData); //Create file readers for extensions foreach (var extension in MetaData.Extension) { var extensionFileName = extension.Files.FirstOrDefault(); var extensionFileMetaData = abstractFactory.CreateExtensionMetaData(extension); extensionFiles.Add(CreateFileReader(extensionFileMetaData)); } Extensions = new FileReaderCollection(extensionFiles); }
public FeedReader(IMetaDataReader metaReader) { _metaDataReader = metaReader; }