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);
        }