private DatabaseEntity GetDatabaseFromAliasBlob(string databaseName, DatabaseAlias dbalias, string aliasBlobName, IEnumerable <Blob> allBlobs) { var fragments = new List <DatabaseFragment>(); foreach (var dbSegment in dbalias.DatabaseList) { // Get all blobs prefixed with this db segment name, e.g. nt.00* var segmentBlobs = allBlobs.Where(blob => blob.BlobName.StartsWith(dbSegment)); // Create a db fragment for each file in the segment, e.g. nt.00.nhd, nt.00.nhi, // nt.00.nhr, etc. var segmentFragments = segmentBlobs.Select( blob => new DatabaseFragment(blob.BlobName, blob.Length)); fragments.AddRange(segmentFragments); } var aliasBlob = allBlobs.First(blob => blob.BlobName == aliasBlobName); fragments.Add(new DatabaseFragment(aliasBlob.BlobName, aliasBlob.Length)); var length = fragments.Where(frag => !frag.Filename.EndsWith(".nal") && !frag.Filename.EndsWith(".pal")) .Sum(frag => frag.Size); return(new DatabaseEntity( databaseName, ContainerName, fragments.Count, length, DatabaseState.Ready, aliasBlobName.EndsWith(".nal") ? DatabaseType.Nucleotide : DatabaseType.Protein)); }
private DatabaseEntity GetDatabase(string databaseName, IEnumerable <Blob> databaseBlobs) { var aliasBlobName = GetDatabaseAliasBlobs(databaseBlobs).FirstOrDefault(); if (aliasBlobName != null) { var content = _blobStorageProvider.GetBlobAsText(_databaseContainerName, aliasBlobName); if (!string.IsNullOrEmpty(content)) { var alias = DatabaseAlias.FromContent(content); if (!string.IsNullOrEmpty(alias.Title) && alias.Length > 0 && alias.DatabaseList != null) { return(GetDatabaseFromAliasBlob(databaseName, alias, aliasBlobName, databaseBlobs)); } } } // Create a db fragment for each file in the segment, e.g. nt.00.nhd, nt.00.nhi, // nt.00.nhr, etc. var segmentFragments = databaseBlobs.Select( blob => new DatabaseFragment(blob.BlobName, blob.Length)); var fragments = new List <DatabaseFragment>(segmentFragments); if (fragments.Any()) { var type = Path.GetExtension(databaseBlobs.First().BlobName).StartsWith("n") ? DatabaseType.Nucleotide : DatabaseType.Protein; var length = fragments.Where(frag => !frag.Filename.EndsWith(".nal") && !frag.Filename.EndsWith(".pal")) .Sum(frag => frag.Size); return(new DatabaseEntity(databaseName, ContainerName, fragments.Count, length, DatabaseState.Ready, type)); } return(null); }