public static async Task <HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "v1/azuresearch/performance/blobstorage/serially/repetitions/{repetitions}")] HttpRequestMessage req,
            int repetitions,
            ExecutionContext executionContext,
            ILogger log)
        {
            List <string>      ids                = Common.IdsList;
            DateTime           startTime          = DateTime.Now;
            StorageCredentials storageCredentials = new StorageCredentials(
                Environment.GetEnvironmentVariable("storageAccountName", EnvironmentVariableTarget.Process),
                Environment.GetEnvironmentVariable("storageAccountKey", EnvironmentVariableTarget.Process));
            CloudStorageAccount        cloudStorageAccount = new CloudStorageAccount(storageCredentials, useHttps: true);
            CloudBlobClient            blobClient          = cloudStorageAccount.CreateCloudBlobClient();
            CloudBlobContainer         cloudBlobContainer  = blobClient.GetContainerReference("providers");
            List <KyruusDataStructure> providers           = new List <KyruusDataStructure>(ids.Count);

            for (int r = 0; r < repetitions; r++)
            {
                foreach (string id in ids)
                {
                    CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference($"ky-2019-04-25-16-00-00-0387-Utc/{id}.json");
                    string         doc            = await cloudBlockBlob.DownloadTextAsync();

                    KyruusDataStructure p = JsonConvert.DeserializeObject <KyruusDataStructure>(doc);
                    providers.Add(p);
                }
            }

            return(req.CreateResponse(
                       HttpStatusCode.OK,
                       $"{repetitions} repetitions in {nameof(BlobStorageSerial)}->{executionContext.FunctionName}(): {(DateTime.Now - startTime).TotalMilliseconds}, per repetition {(DateTime.Now - startTime).TotalMilliseconds/repetitions}"));
        }
        public static HttpResponseMessage Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "v1/azuresearch/performance/blobstorage/serially/repetitions/{repetitions}")] HttpRequestMessage req,
            int repetitions,
            ExecutionContext executionContext,
            TraceWriter log)
        {
            List <string>              ids                 = Common.IdsList;
            DateTime                   startTime           = DateTime.Now;
            StorageCredentials         storageCredentials  = new StorageCredentials(CloudConfigurationManager.GetSetting("storageAccountName"), CloudConfigurationManager.GetSetting("storageAccountKey"));
            CloudStorageAccount        cloudStorageAccount = new CloudStorageAccount(storageCredentials, useHttps: true);
            CloudBlobClient            blobClient          = cloudStorageAccount.CreateCloudBlobClient();
            CloudBlobContainer         cloudBlobContainer  = blobClient.GetContainerReference("providers");
            List <KyruusDataStructure> providers           = new List <KyruusDataStructure>(ids.Count);

            for (int r = 0; r < repetitions; r++)
            {
                foreach (string id in ids)
                {
                    CloudBlockBlob      cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference($"p-2018-11-12-15-00-01-000726-Utc-4d41468f-51d7-4c4f-9698-24b6637b7eb5/{id}.json");
                    string              doc            = cloudBlockBlob.DownloadText();
                    KyruusDataStructure p = JsonConvert.DeserializeObject <KyruusDataStructure>(doc);
                    providers.Add(p);
                }
            }

            return(req.CreateResponse(
                       HttpStatusCode.OK,
                       $"{repetitions} repetitions in {nameof(BlobStorageSerial)}->{executionContext.FunctionName}(): {(DateTime.Now - startTime).TotalMilliseconds}, per repetition {(DateTime.Now - startTime).TotalMilliseconds/repetitions}"));
        }
Exemplo n.º 3
0
        private static async Task GetDocumentsSection(CloudBlobContainer cloudBlobContainer, List <string> ids, int section)
        {
            List <KyruusDataStructure> providers = new List <KyruusDataStructure>(5);
            int start = section * 5;
            int end   = start + 5;

            for (int i = start; i < end; i++)
            {
                CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference($"p-2018-11-12-15-00-01-000726-Utc-4d41468f-51d7-4c4f-9698-24b6637b7eb5/{ids[i]}.json");
                string         doc            = await cloudBlockBlob.DownloadTextAsync();

                KyruusDataStructure p = JsonConvert.DeserializeObject <KyruusDataStructure>(doc);
                providers.Add(p);
            }
            Console.WriteLine($"{providers.Count} providers");
        }
Exemplo n.º 4
0
        public static void GetDocuments(string storageAccountKey, string storageAccountName)
        {
            List <string>              ids                 = Common.IdsList;
            DateTime                   startTime           = DateTime.Now;
            StorageCredentials         storageCredentials  = new StorageCredentials(storageAccountName, storageAccountKey);
            CloudStorageAccount        cloudStorageAccount = new CloudStorageAccount(storageCredentials, useHttps: true);
            CloudBlobClient            blobClient          = cloudStorageAccount.CreateCloudBlobClient();
            CloudBlobContainer         cloudBlobContainer  = blobClient.GetContainerReference("providers");
            List <KyruusDataStructure> providers           = new List <KyruusDataStructure>(ids.Count);

            foreach (string id in ids)
            {
                CloudBlockBlob      cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference($"p-2018-11-12-15-00-01-000726-Utc-4d41468f-51d7-4c4f-9698-24b6637b7eb5/{id}.json");
                string              doc            = cloudBlockBlob.DownloadText();
                KyruusDataStructure p = JsonConvert.DeserializeObject <KyruusDataStructure>(doc);
                providers.Add(p);
            }
            Console.WriteLine($"{providers.Count} providers from {nameof(BlobStorage)}->{nameof(GetDocuments)}(): {(DateTime.Now - startTime).TotalMilliseconds}");
        }
        public static HttpResponseMessage Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "v1/azuresearch/performance/blobstorage/parallel/premium/repetitions/{repetitions}")] HttpRequestMessage req,
            int repetitions,
            ExecutionContext executionContext,
            ILogger log)
        {
            List <string>      ids                = Common.IdsList;
            DateTime           startTime          = DateTime.Now;
            StorageCredentials storageCredentials = new StorageCredentials(
                Environment.GetEnvironmentVariable("premiumStorageAccountName", EnvironmentVariableTarget.Process),
                Environment.GetEnvironmentVariable("premiumStorageAccountKey", EnvironmentVariableTarget.Process));
            CloudStorageAccount cloudStorageAccount = new CloudStorageAccount(storageCredentials, useHttps: true);
            CloudBlobClient     blobClient          = cloudStorageAccount.CreateCloudBlobClient();
            CloudBlobContainer  cloudBlobContainer  = blobClient.GetContainerReference("providers");
            ConcurrentBag <KyruusDataStructure> bag = new ConcurrentBag <KyruusDataStructure>();
            List <Task <string> > tasks             = new List <Task <string> >();

            for (int r = 0; r < repetitions; r++)
            {
                foreach (string id in ids)
                {
                    CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference($"ky-2019-04-25-16-00-00-0387-Utc/{id}.json");
//                    string text = cloudBlockBlob.DownloadTextAsync().Result;
                    tasks.Add(cloudBlockBlob.DownloadTextAsync());
                }
            }

            Task.WaitAll(tasks.ToArray());
            DateTime dt = DateTime.Now;
            List <KyruusDataStructure> providers = new List <KyruusDataStructure>();

            foreach (Task <string> task in tasks)
            {
                KyruusDataStructure p = JsonConvert.DeserializeObject <KyruusDataStructure>(task.Result);
                providers.Add(p);
            }
            return(req.CreateResponse(
                       HttpStatusCode.OK,
                       $"{repetitions} repetitions in {nameof(BlobStorageParallelPremuim)}->{executionContext.FunctionName}(): {(DateTime.Now - startTime).TotalMilliseconds}, per repetition {(DateTime.Now - startTime).TotalMilliseconds / repetitions}, number of providers returned in total {providers.Count}.  Deserialize time {(DateTime.Now - dt).TotalMilliseconds}"));
        }
Exemplo n.º 6
0
        public static HttpResponseMessage Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "v1/azuresearch/performance/blobstorage/parallel/premium/repetitions/{repetitions}")] HttpRequestMessage req,
            int repetitions,
            ExecutionContext executionContext,
            TraceWriter log)
        {
            List <string>       ids                 = Common.IdsList;
            DateTime            startTime           = DateTime.Now;
            StorageCredentials  storageCredentials  = new StorageCredentials(CloudConfigurationManager.GetSetting("premiumStorageAccountName"), CloudConfigurationManager.GetSetting("premiumStorageAccountKey"));
            CloudStorageAccount cloudStorageAccount = new CloudStorageAccount(storageCredentials, useHttps: true);
            CloudBlobClient     blobClient          = cloudStorageAccount.CreateCloudBlobClient();
            CloudBlobContainer  cloudBlobContainer  = blobClient.GetContainerReference("providers");
            ConcurrentBag <KyruusDataStructure> bag = new ConcurrentBag <KyruusDataStructure>();
            List <Task> tasks = new List <Task>();

            for (int r = 0; r < repetitions; r++)
            {
                foreach (string id in ids)
                {
                    CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference($"?/{id}.json");
                    tasks.Add(Task.Run(() =>
                    {
                        string doc            = cloudBlockBlob.DownloadText();
                        KyruusDataStructure p = JsonConvert.DeserializeObject <KyruusDataStructure>(doc);
                        bag.Add(p);
                    }));
                }
            }

            Task.WaitAll(tasks.ToArray());
            List <KyruusDataStructure> providers = bag.ToList();    //Accumulate the entries per thread into a single list.

            return(req.CreateResponse(
                       HttpStatusCode.OK,
                       $"{repetitions} repetitions in {nameof(BlobStorageSerial)}->{executionContext.FunctionName}(): {(DateTime.Now - startTime).TotalMilliseconds}, per repetition {(DateTime.Now - startTime).TotalMilliseconds / repetitions}, number of providers returned in total {providers.Count}"));
        }
Exemplo n.º 7
0
        public void GetAllSpecialitiesAliasesAndTypes_Test01()
        {
            List <KyruusDataStructure> providers = new List <KyruusDataStructure>();
            int                          index;
            Alias                        a1 = new Alias();
            Alias                        a2 = new Alias();
            Alias                        a3 = new Alias();
            Alias                        a4 = new Alias();
            Alias                        a5 = new Alias();
            Alias                        a6 = new Alias();
            Alias                        a7 = new Alias();
            Alias                        a8 = new Alias();
            Specialty                    s1 = new Specialty();
            Specialty                    s2 = new Specialty();
            Specialty                    s3 = new Specialty();
            Specialty                    s4 = new Specialty();
            List <Specialty>             sList1;
            List <Specialty>             sList2;
            KyruusDataStructure          p1 = new KyruusDataStructure();
            KyruusDataStructure          p2 = new KyruusDataStructure();
            KyruusDataStructure          p3 = new KyruusDataStructure();
            List <SpecialtyAliasAndType> specialtiesAliasesAndTypes;

            //Empty provider list.
            specialtiesAliasesAndTypes = Specialties.AccumulateAllSpecialitiesAliasesAndTypes(providers);
            Assert.AreEqual(0, specialtiesAliasesAndTypes.Count);

            //Single provider with null components.
            providers.Add(p1);
            specialtiesAliasesAndTypes = Specialties.AccumulateAllSpecialitiesAliasesAndTypes(providers);
            Assert.AreEqual(0, specialtiesAliasesAndTypes.Count);

            //Single provider with empty specialties collection.
            p1.specialties             = new Specialty[0];
            specialtiesAliasesAndTypes = Specialties.AccumulateAllSpecialitiesAliasesAndTypes(providers);
            Assert.AreEqual(0, specialtiesAliasesAndTypes.Count);

            //Single provider with single item in specialties collection.  Only a specialty.  No aliases.
            s1.aliases      = null;
            s1.specialty    = "specialty01";
            s1.subspecialty = null;
            sList1          = new List <Specialty>()
            {
                s1
            };
            p1.specialties             = sList1.ToArray();
            specialtiesAliasesAndTypes = Specialties.AccumulateAllSpecialitiesAliasesAndTypes(providers);
            Assert.AreEqual(1, specialtiesAliasesAndTypes.Count);
            //One alias
            index = 0;
            Assert.AreEqual("specialty01", specialtiesAliasesAndTypes[0].Alias);
            Assert.AreEqual(null, specialtiesAliasesAndTypes[0].Specialty);
            Assert.AreEqual(EntryTypes.Specialty, specialtiesAliasesAndTypes[0].EntryType);

            //Single provider with single item in specialties collection.  One specialty with one alias.
            s1.specialty    = "specialty01";
            s1.subspecialty = null;
            a1 = new Alias {
                name = "a1"
            };
            s1.aliases = new Alias[1] {
                a1
            };
            sList1 = new List <Specialty>()
            {
                s1
            };
            p1.specialties             = sList1.ToArray();
            specialtiesAliasesAndTypes = Specialties.AccumulateAllSpecialitiesAliasesAndTypes(providers);
            Assert.AreEqual(1, specialtiesAliasesAndTypes.Count);
            //One alias
            index = 0;
            Assert.AreEqual("a1", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty01", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);

            //Single provider with single item in specialties collection.  One specialty with no aliases but a subspecialty.
            s1.specialty    = "specialty01";
            s1.subspecialty = "subs";
            s1.aliases      = null;
            sList1          = new List <Specialty>()
            {
                s1
            };
            p1.specialties             = sList1.ToArray();
            specialtiesAliasesAndTypes = Specialties.AccumulateAllSpecialitiesAliasesAndTypes(providers);
            Assert.AreEqual(1, specialtiesAliasesAndTypes.Count);
            index = 0;
            Assert.AreEqual("subs", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty01", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Subspecialty, specialtiesAliasesAndTypes[index].EntryType);

            //Single provider with single item in specialties collection.  One specialty with two similar aliases and a subspecialty.
            s1.specialty    = "specialty01";
            s1.subspecialty = "subs";
            a1 = new Alias {
                name = "a1"
            };
            a2 = new Alias {
                name = "a1"
            };
            s1.aliases = new Alias[2] {
                a1, a2
            };
            sList1 = new List <Specialty>()
            {
                s1
            };
            p1.specialties             = sList1.ToArray();
            specialtiesAliasesAndTypes = Specialties.AccumulateAllSpecialitiesAliasesAndTypes(providers);
            Assert.AreEqual(3, specialtiesAliasesAndTypes.Count);

            index = 0;
            Assert.AreEqual("subs", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty01", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Subspecialty, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("a1", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty01", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("a1", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty01", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);

            //Single provider with single item in specialties collection.  One specialty with two dissimilar aliases.
            s1.specialty    = "specialty01";
            s1.subspecialty = null;
            a1 = new Alias {
                name = "a1"
            };
            a2 = new Alias {
                name = "a2"
            };
            s1.aliases = new Alias[2] {
                a1, a2
            };
            sList1 = new List <Specialty>()
            {
                s1
            };
            p1.specialties             = sList1.ToArray();
            specialtiesAliasesAndTypes = Specialties.AccumulateAllSpecialitiesAliasesAndTypes(providers);
            Assert.AreEqual(2, specialtiesAliasesAndTypes.Count);
            //Two aliases
            index = 0;
            Assert.AreEqual("a1", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty01", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("a2", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty01", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);

            //Single provider with single item in specialties collection.  One specialty with two dissimilar aliases plus same subspecialty.
            s1.specialty    = "specialty01";
            s1.subspecialty = "specialty01";
            a1 = new Alias {
                name = "a1"
            };
            a2 = new Alias {
                name = "a2"
            };
            s1.aliases = new Alias[2] {
                a1, a2
            };
            sList1 = new List <Specialty>()
            {
                s1
            };
            p1.specialties             = sList1.ToArray();
            specialtiesAliasesAndTypes = Specialties.AccumulateAllSpecialitiesAliasesAndTypes(providers);
            Assert.AreEqual(2, specialtiesAliasesAndTypes.Count);
            //Two aliases
            index = 0;
            Assert.AreEqual("a1", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty01", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("a2", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty01", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);

            //Single provider with multiple specialties.
            s1.specialty    = "specialty01";
            s1.subspecialty = "sub1";
            a1 = new Alias {
                name = "a1"
            };
            a2 = new Alias {
                name = "a2"
            };
            s1.aliases = new Alias[2] {
                a1, a2
            };

            s2.specialty    = "specialty02";
            s2.subspecialty = "sub2";
            a3 = new Alias {
                name = "a3"
            };
            a4 = new Alias {
                name = "a4"
            };
            s2.aliases = new Alias[2] {
                a3, a4
            };
            sList1 = new List <Specialty>()
            {
                s1, s2
            };
            p1.specialties             = sList1.ToArray();
            specialtiesAliasesAndTypes = Specialties.AccumulateAllSpecialitiesAliasesAndTypes(providers);

            Assert.AreEqual(6, specialtiesAliasesAndTypes.Count);

            index = 0;
            Assert.AreEqual("sub1", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty01", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Subspecialty, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("a1", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty01", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("a2", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty01", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("sub2", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty02", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Subspecialty, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("a3", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty02", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("a4", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty02", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);

            //Multiple providers with multiple specialties.
            s1.specialty    = "specialty01";
            s1.subspecialty = "sub1";
            a1 = new Alias {
                name = "a1"
            };
            a2 = new Alias {
                name = "a2"
            };
            s1.aliases = new Alias[2] {
                a1, a2
            };

            s2.specialty    = "specialty02";
            s2.subspecialty = "sub2";
            a3 = new Alias {
                name = "a3"
            };
            a4 = new Alias {
                name = "a4"
            };
            s2.aliases = new Alias[2] {
                a3, a4
            };
            sList1 = new List <Specialty>()
            {
                s1, s2
            };
            p1.specialties = sList1.ToArray();

            s3.specialty    = "specialty03";
            s3.subspecialty = "sub3";
            a5 = new Alias {
                name = "a5"
            };
            a6 = new Alias {
                name = "a6"
            };
            s3.aliases = new Alias[2] {
                a5, a6
            };

            s4.specialty    = "specialty04";
            s4.subspecialty = "sub4";
            a7 = new Alias {
                name = "a7"
            };
            a8 = new Alias {
                name = "a8"
            };
            s4.aliases = new Alias[2] {
                a7, a8
            };
            sList2 = new List <Specialty>()
            {
                s3, s4
            };
            p2             = new KyruusDataStructure();
            p2.specialties = sList2.ToArray();
            providers.Add(p2);

            specialtiesAliasesAndTypes = Specialties.AccumulateAllSpecialitiesAliasesAndTypes(providers);

            Assert.AreEqual(12, specialtiesAliasesAndTypes.Count);
            index = 0;
            Assert.AreEqual("sub1", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty01", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Subspecialty, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("a1", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty01", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("a2", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty01", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("sub2", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty02", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Subspecialty, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("a3", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty02", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("a4", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty02", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("sub3", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty03", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Subspecialty, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("a5", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty03", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("a6", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty03", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("sub4", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty04", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Subspecialty, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("a7", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty04", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);
            index++;
            Assert.AreEqual("a8", specialtiesAliasesAndTypes[index].Alias);
            Assert.AreEqual("specialty04", specialtiesAliasesAndTypes[index].Specialty);
            Assert.AreEqual(EntryTypes.Alias, specialtiesAliasesAndTypes[index].EntryType);
        }
Exemplo n.º 8
0
        public static List <SpecialtyAliasAndType> AccumulateAllSpecialitiesAliasesAndTypes(List <KyruusDataStructure> providers)
        {
            List <SpecialtyAliasAndType> specialtiesAliasesAndTypes = new List <SpecialtyAliasAndType>();

            for (int i = 0; i < providers.Count; i++)
            {
                KyruusDataStructure p = providers[i];
                if (p.specialties == null)
                {   //This provider has no specialties.
                    continue;
                }
                foreach (Specialty s in p.specialties)
                {
                    if (string.IsNullOrWhiteSpace(s.subspecialty) && (s.aliases == null || s.aliases.Length == 0))
                    { //If the specialty has no aliases and no subspecialty, use specialty as alias/synonym.
                        specialtiesAliasesAndTypes.Add(new SpecialtyAliasAndType
                        {
                            Alias     = s.specialty,
                            EntryType = EntryTypes.Specialty,
                            Specialty = null
                        });
                        continue;
                    }
                    if (string.IsNullOrWhiteSpace(s.subspecialty) == false && s.specialty != s.subspecialty)
                    {   //Have a subspecialty that is different from specialty.  Treat subspecialty same as alias.
                        if (s.specialty != s.subspecialty)
                        {
                            specialtiesAliasesAndTypes.Add(new SpecialtyAliasAndType
                            {
                                Alias     = s.subspecialty,
                                EntryType = EntryTypes.Subspecialty,
                                Specialty = s.specialty
                            });
                        }
                    }

                    if (s.aliases == null)
                    {
                        return(specialtiesAliasesAndTypes);
                    }
                    foreach (Alias a in s.aliases)
                    {
                        if (s.specialty != a.name)
                        {
                            specialtiesAliasesAndTypes.Add(new SpecialtyAliasAndType
                            {
                                Alias     = a.name,
                                EntryType = EntryTypes.Alias,
                                Specialty = s.specialty
                            });
                            continue;
                        }
                        //Specialty and alias is the same.
                        specialtiesAliasesAndTypes.Add(new SpecialtyAliasAndType
                        {
                            Alias     = a.name,
                            EntryType = EntryTypes.Specialty,
                            Specialty = s.specialty
                        });
                    }
                }
            }

            return(specialtiesAliasesAndTypes);
        }