Beispiel #1
0
        protected IList <UCommerceProduct> GenerateVariants(UmbracoDbContext context, ProductWithDefinition[] products,
                                                            string[] mediaIds)
        {
            uint batchSize       = 100_000;
            uint numberOfBatches = (uint)Math.Ceiling(1.0 * Count / batchSize);

            Console.Write($"Generating {Count:N0} {EntityNamePlural} in {numberOfBatches} batches of {batchSize}. ");
            var insertedProducts = new List <UCommerceProduct>((int)Count);

            using (var p = new ProgressBar())
            {
                var variantBatches =
                    GeneratorHelper.Generate(() => GenerateVariant(mediaIds, products),
                                             Count)
                    .DistinctBy(a => a.UniqueIndex())
                    .Batch(batchSize);

                variantBatches.EachWithIndex((variants, index) =>
                {
                    var listOfVariants = variants.ToList();
                    context.BulkInsert(listOfVariants, options => options.SetOutputIdentity = true);
                    insertedProducts.AddRange(listOfVariants);
                    p.Report(1.0 * index / numberOfBatches);
                });

                return(insertedProducts);
            }
        }
        public override void Seed(UmbracoDbContext context)
        {
            int[] productIds = context.UCommerceProduct
                               .Where(product => product.UCommerceCategoryProductRelation.Count == 0)
                               .Where(product => product.ParentProductId == null) // not variants
                               .Select(x => x.ProductId).ToArray();

            int[] categoryIds = context.UCommerceCategory.Select(x => x.CategoryId).ToArray();

            uint batchSize  = 100_000;
            uint batchCount = (uint)Math.Ceiling(1.0 * Count / batchSize);

            Console.Write(
                $"Generating {Count:N0} relations for {productIds.Length:N0} products and {categoryIds.Length:N0} categories in batches of {batchSize:N0}. ");
            using (var p = new ProgressBar())
            {
                var relationBatches = GeneratorHelper
                                      .Generate(() => GenerateRelation(productIds, categoryIds), Count)
                                      .DistinctBy(a => a.UniqueIndex())
                                      .Batch(batchSize);

                relationBatches.EachWithIndex((relations, index) =>
                {
                    context.BulkInsert(relations.ToList(), options => options.SetOutputIdentity = false);
                    p.Report(1.0 * index / batchCount);
                });
            }
        }
        private List <UCommerceCategory> GenerateSubCategories(DataContext context,
                                                               int[] definitionIds, string[] mediaIds, IEnumerable <UCommerceCategory> topLevelCategories)
        {
            uint batchSize       = 100_000;
            uint numberOfBatches = (uint)Math.Ceiling(4.0 * Count / 5.0 / batchSize);

            Console.Write($"Generating {4 * Count / 5:N0} subcategories in batches of {batchSize}. ");
            var insertedCategories = new List <UCommerceCategory>((int)Count / 5);

            using (var p = new ProgressBar())
            {
                var categoryBatches = GeneratorHelper
                                      .Generate(() => GenerateSubCategory(definitionIds, mediaIds, topLevelCategories), 4 * Count / 5)
                                      .DistinctBy(a => a.UniqueIndex())
                                      .Batch(batchSize);

                categoryBatches.EachWithIndex((categories, index) =>
                {
                    var listOfCats = categories.ToList();
                    context.Ucommerce.BulkInsert(listOfCats, options => options.SetOutputIdentity = true);
                    insertedCategories.AddRange(listOfCats);
                    p.Report(1.0 * index / numberOfBatches);
                });

                return(insertedCategories);
            }
        }
Beispiel #4
0
        private void btnGo_Click(object sender, EventArgs e)
        {
            var sb = getMissingDependencyString();

            if (sb.Length > 0)
            {
                MessageBox.Show(sb.ToString(), "Dependencies");
                return;
            }


            var workspaces = getSortedWorkspaces((gridTables.DataSource as BindingList <TableWorkspace>)
                                                 .Where(t => t.AddRowCount > 0 || t.Truncate || t.Delete).ToList());

            var changes = workspaces.Select(t => t.Table.TableName).ToList();

            if (changes.Count() > 15)
            {
                changes = changes.Take(15).ToList();
                changes.Add("...");
            }

            if (MessageBox.Show(string.Format("{0} - {1} will be populated:\r\n\r\n{2}\r\n\r\nContinue?", _generatorHelper.Database.DataSource,
                                              _generatorHelper.Database.DatabaseName,
                                              string.Join("\r\n", changes.ToArray())), "Proceed", MessageBoxButtons.YesNo) != System.Windows.Forms.DialogResult.Yes)
            {
                return;
            }


            if (!workspaces.Any())
            {
                MessageBox.Show("Nothing to populate.");
                return;
            }

            bool success = false;
            var  worker  = new BackgroundWorker();

            worker.WorkerReportsProgress      = true;
            worker.WorkerSupportsCancellation = true;
            worker.DoWork += delegate(object sender2, DoWorkEventArgs e2)
            {
                if (workspaces.Any() && !_generatorHelper.Generate(worker, workspaces))
                {
                    return;
                }

                success = true;
            };

            PaJaMa.WinControls.WinProgressBox.ShowProgress(worker, allowCancel: true);

            if (success)
            {
                MessageBox.Show("Done");
                refreshPage(true);
            }
        }
 public override void Seed(DataContext context)
 {
     Console.Write($"Generating {Count:N0} product relation types. ");
     using (var p = new ProgressBar())
     {
         var dataTypes = GeneratorHelper.Generate(Generate, Count);
         p.Report(0.5);
         context.Ucommerce.BulkInsert(dataTypes, options => options.SetOutputIdentity = false);
     }
 }
 private List <UCommerceDataType> GenerateDataTypes(DataContext context, int[] definitionIds)
 {
     Console.Write($"Generating {Count:N0} data types.");
     using (var p = new ProgressBar())
     {
         var dataTypes = GeneratorHelper.Generate(() => Generate(definitionIds), Count).ToList();
         p.Report(0.5);
         context.Ucommerce.BulkInsert(dataTypes);
         return(dataTypes);
     }
 }
Beispiel #7
0
 public override void Seed(UmbracoDbContext context)
 {
     Console.Write($"Generating {Count:N0} order number series. ");
     using (var p = new ProgressBar())
     {
         p.Report(0.1);
         var orderNumberSeries =
             GeneratorHelper.Generate(() => _faker.Generate(), Count);
         p.Report(0.5);
         context.BulkInsert(orderNumberSeries);
     }
 }
Beispiel #8
0
 public override void Seed(DataContext context)
 {
     Console.Write($"Generating {Count:N0} product definitions. ");
     using (var p = new ProgressBar())
     {
         var productDefinitions = GeneratorHelper.Generate(Generate, Count);
         p.Report(0.33);
         productDefinitions.ConsecutiveSortOrder((def, val) => { def.SortOrder = (int)val; });
         p.Report(0.66);
         context.Ucommerce.BulkInsert(productDefinitions, options => options.SetOutputIdentity = false);
     }
 }
 private List <UCommerceDefinitionField> GenerateFields(DataContext context, int[] definitionIds,
                                                        int[] dataTypeIds)
 {
     Console.Write($"Generating {Count:N0} definition fields. ");
     using (var p = new ProgressBar())
     {
         var fields = GeneratorHelper.Generate(() => GenerateField(definitionIds, dataTypeIds), Count).ToList();
         fields.ConsecutiveSortOrder((f, v) => { f.SortOrder = (int)v; });
         p.Report(0.5);
         context.Ucommerce.BulkInsert(fields);
         return(fields);
     }
 }
Beispiel #10
0
 public override void Seed(DataContext context)
 {
     Console.Write($"Generating {Count:N0} definitions. ");
     using (var p = new ProgressBar())
     {
         var catalogDefinitions = Enum.GetValues(typeof(DefinitionType))
                                  .Cast <DefinitionType>()
                                  .SelectMany(definitionType => GeneratorHelper.Generate(() => Generate(definitionType), Count));
         p.Report(0.33);
         catalogDefinitions.ConsecutiveSortOrder((f, v) => { f.SortOrder = (int)v; });
         p.Report(0.66);
         context.Ucommerce.BulkInsert(catalogDefinitions.ToList(), options => options.SetOutputIdentity = false);
     }
 }
        public override void Seed(UmbracoDbContext context)
        {
            Console.Write($"Generating {Count} currencies. ");
            using (var p = new ProgressBar())
            {
                var defaultCurrenciesNotInDb = GetDefaultCurrenciesNotInDb(context);
                var currenciesLeft           = Math.Max(0, Count - defaultCurrenciesNotInDb.Count);

                var currencies = currenciesLeft == 0
                    ? defaultCurrenciesNotInDb.Take((int)Count)
                    : defaultCurrenciesNotInDb.Concat(GeneratorHelper.Generate(GenerateCurrency, (uint)currenciesLeft))
                                 .DistinctBy(x => x.Isocode);

                p.Report(0.5);
                context.BulkInsert(currencies.ToList(), options => options.SetOutputIdentity = false);
            }
        }
        private List <UCommerceProductCatalog> GenerateCatalogs(UmbracoDbContext context, int[] definitionIds,
                                                                int[] priceGroupIds)
        {
            Console.Write($"Generating {Count:N0} catalogs. ");
            using (var p = new ProgressBar())
            {
                var storeIds = context.UCommerceProductCatalogGroup.Select(c => c.ProductCatalogGroupId).ToArray();
                var catalogs =
                    GeneratorHelper.Generate(() => GenerateCatalog(definitionIds, storeIds, priceGroupIds), Count)
                    .DistinctBy(a => a.UniqueIndex())
                    .ToList();

                p.Report(0.5);
                context.BulkInsert(catalogs, options => options.SetOutputIdentity = true);
                return(catalogs);
            }
        }
        public override void Seed(UmbracoDbContext context)
        {
            Console.Write($"Generating {Count} languages. ");
            using (var p = new ProgressBar())
            {
                var availableCultures = CultureInfo.GetCultures(CultureTypes.AllCultures)
                                        .Where(cultureInfo => !context.UmbracoLanguage
                                               .Any(language => language.LanguageIsocode == cultureInfo.Name))
                                        .ToArray();

                _pickedCultures = _faker.PickRandom(availableCultures, (int)Count).ToArray();

                var umbracoLanguages = GeneratorHelper.Generate(Generate, Count).Where(x => x != null).ToList();
                p.Report(0.5);
                context.BulkInsert(umbracoLanguages, options => options.SetOutputIdentity = false);
            }
        }
Beispiel #14
0
        public override void Seed(UmbracoDbContext context)
        {
            Console.Write($"Generating {Count:N0} price groups. ");
            using (var p = new ProgressBar())
            {
                var currencyIds = context.UCommerceCurrency.Select(x => new Tuple <int, string>(x.CurrencyId, x.Isocode))
                                  .ToArray();
                p.Report(0.1);

                var priceGroups = GeneratorHelper.Generate(() => Generate(currencyIds), Count)
                                  .DistinctBy(x => x.UniqueIndex())
                                  .ToArray();

                p.Report(0.5);

                context.BulkInsert(priceGroups, options => options.SetOutputIdentity = false);
            }
        }
 private List <UCommerceProductCatalogGroup> GenerateStores(DataContext context, int[] definitionIds)
 {
     Console.Write($"Generating {Count:N0} stores. ");
     using (var p = new ProgressBar())
     {
         var emailProfileIds      = context.Ucommerce.UCommerceEmailProfile.Select(x => x.EmailProfileId).ToArray();
         var currencyIds          = context.Ucommerce.UCommerceCurrency.Select(c => c.CurrencyId).ToArray();
         var orderNumberSeriesIds = context.Ucommerce.UCommerceOrderNumberSerie.Select(c => c.OrderNumberId).ToArray();
         p.Report(0.1);
         var stores =
             GeneratorHelper
             .Generate(
                 () => GenerateStore(currencyIds, definitionIds, emailProfileIds, orderNumberSeriesIds),
                 Count).ToList();
         p.Report(0.5);
         context.Ucommerce.BulkInsert(stores, options => options.SetOutputIdentity = true);
         return(stores);
     }
 }
Beispiel #16
0
        private List <UCommerceProductDefinitionField> GenerateDefinitionFields(DataContext context)
        {
            Console.Write($"Generating {Count:N0} product definition fields. ");
            using (var p = new ProgressBar())
            {
                var dataTypeIds = context.Ucommerce.UCommerceDataType.Select(x => x.DataTypeId).ToArray();

                var allProductDefinitionIds =
                    context.Ucommerce.UCommerceProductDefinition.Select(x => x.ProductDefinitionId).ToList();
                var oneHalfProductDefinitionIds =
                    allProductDefinitionIds.Take(allProductDefinitionIds.Count / 2).ToList();
                var oneHalfProductFamiliyDefinitionIds =
                    allProductDefinitionIds.Skip(allProductDefinitionIds.Count / 2).ToList();

                var familyDefinitionFields = GeneratorHelper.Generate(
                    () => GenerateDefinitionFieldForFamily(oneHalfProductFamiliyDefinitionIds, dataTypeIds), Count / 2).ToList();

                var definitionFields = GeneratorHelper.Generate(
                    () => GenerateDefinitionFieldForNonFamily(oneHalfProductDefinitionIds, dataTypeIds), Count / 2).ToList();

                var allFields = familyDefinitionFields.Concat(definitionFields).ToList();
                p.Report(0.25);

                allFields.ConsecutiveSortOrder((f, v) => { f.SortOrder = (int)v; });
                p.Report(0.50);

                allFields = allFields
                            .Where(f => f.Name != "name")
                            .DistinctBy(f => new CompositeKey {
                    Key1 = f.Name.GetHashCode(), Key2 = f.ProductDefinitionId
                })
                            .ToList();

                p.Report(0.75);
                context.Ucommerce.BulkInsert(allFields, options => options.SetOutputIdentity = true);
                return(allFields);
            }
        }
Beispiel #17
0
 protected override void OnCalculateClicked()
 {
     NumberOfSteps = 0;
     RealItems     = GeneratorHelper.Generate(MinValue, MaxValue, SolutionAccuracy, PopulationNumber);
 }
Beispiel #18
0
        public override void Seed(DataContext context)
        {
            Console.Write(
                $"Generating {_sizeOptions.CmsMediaFolders} media folders with {_sizeOptions.CmsImagesPerFolder} images in each. ");

            using (var p = new ProgressBar())
            {
                // Folders

                var folderNodes = GeneratorHelper.Generate(GenerateFolder, _sizeOptions.CmsMediaFolders).ToList();

                folderNodes.ConsecutiveSortOrder((f, v) => f.SortOrder = (int)v);

                context.Cms.BulkInsert(folderNodes, options => options.SetOutputIdentity = true);

                foreach (var folderNode in folderNodes)
                {
                    folderNode.Path = $"{folderNode.Path},{folderNode.Id}";
                }

                context.Cms.BulkUpdate(folderNodes);
                p.Report(0.1);


                // Folder contents

                var folderContents = folderNodes.Select(folder => new UmbracoContent
                {
                    NodeId = folder.Id, ContentTypeId = mediaFolderType
                }).ToArray();
                context.Cms.BulkInsert(folderContents, options => options.SetOutputIdentity = true);
                p.Report(0.2);


                // Folder ContentNUs

                var folderContentNus =
                    folderContents.Select(folder => new CmsContentNu
                {
                    NodeId = folder.NodeId, Published = false,
                    Data   = "{\"properties\":{},\"cultureData\":{},\"urlSegment\":\"" + _faker.Lorem.Slug() + "\"}"
                }).ToArray();
                context.Cms.BulkInsert(folderContentNus);
                p.Report(0.3);

                // Images

                var imageNodes = folderNodes.SelectMany(folder =>
                {
                    return(GeneratorHelper.Generate(() => GenerateImage(folder), _sizeOptions.CmsImagesPerFolder));
                }
                                                        ).ToList();

                imageNodes.ConsecutiveSortOrder((f, v) => f.SortOrder = (int)v);
                context.Cms.BulkInsert(imageNodes, options => options.SetOutputIdentity = true);

                foreach (var imageNode in imageNodes)
                {
                    imageNode.Path = $"{imageNode.Path},{imageNode.Id}";
                }

                context.Cms.BulkUpdate(imageNodes);
                p.Report(0.4);

                // Image Content

                var imageContents = imageNodes
                                    .Select(image => new UmbracoContent {
                    NodeId = image.Id, ContentTypeId = mediaType
                }).ToList();
                context.Cms.BulkInsert(imageContents, options => options.SetOutputIdentity = true);
                p.Report(0.5);


                // Sample images

                var    sampleImageNames     = File.ReadAllLines("sample_image_list.txt");
                string contentNuTemplate    = File.ReadAllText("cmsContentNu.template");
                string propertyDataTemplate = File.ReadAllText("propertyData.template");

                Dictionary <int, string> imagePaths = imageNodes.ToDictionary(node => node.Id,
                                                                              node => $"/media/samples/{_faker.PickRandom(sampleImageNames)}");
                p.Report(0.6);

                // Image ContentNUs

                var imageContentNus =
                    imageContents.Select(imageContent =>
                                         GenerateImageNu(imageContent, imagePaths[imageContent.NodeId], contentNuTemplate)).ToList();
                context.Cms.BulkInsert(imageContentNus, options => options.SetOutputIdentity = true);
                p.Report(0.7);


                // Folder: Content versions and media versions

                var folderContentVersions = folderNodes
                                            .Select(media => new UmbracoContentVersion
                {
                    Current = true, NodeId = media.Id, Text = media.Text, UserId = -1, VersionDate = DateTime.Now
                })
                                            .ToList();
                context.Cms.BulkInsert(folderContentVersions, options => options.SetOutputIdentity = true);

                var folderMediaVersions = folderContentVersions
                                          .Select(contentVersion => new UmbracoMediaVersion {
                    Id = contentVersion.Id, Path = ""
                }).ToList();
                context.Cms.BulkInsert(folderMediaVersions, options => options.SetOutputIdentity = true);
                p.Report(0.8);


                // Image: Content versions and media versions

                var imageContentVersions = imageNodes
                                           .Select(media => new UmbracoContentVersion
                {
                    Current = true, NodeId = media.Id, Text = media.Text, UserId = -1, VersionDate = DateTime.Now
                }).ToList();
                context.Cms.BulkInsert(imageContentVersions, options => options.SetOutputIdentity = true);

                var propertyData = imageContentVersions.SelectMany(contentVersion =>
                {
                    return(new[]
                    {
                        new UmbracoPropertyData
                        {
                            VersionId = contentVersion.Id, PropertyTypeId = 10, VarcharValue = "jpg"
                        },
                        new UmbracoPropertyData
                        {
                            VersionId = contentVersion.Id, PropertyTypeId = 9, VarcharValue = "10000"
                        },
                        new UmbracoPropertyData {
                            VersionId = contentVersion.Id, PropertyTypeId = 8, IntValue = 1080
                        },
                        new UmbracoPropertyData {
                            VersionId = contentVersion.Id, PropertyTypeId = 7, IntValue = 1080
                        },
                        new UmbracoPropertyData
                        {
                            VersionId = contentVersion.Id, PropertyTypeId = 6,
                            TextValue = propertyDataTemplate.Replace("<mediaPath>", imagePaths[contentVersion.NodeId])
                        },
                    });
                });
                context.Cms.BulkInsert(propertyData.ToList(), options => options.SetOutputIdentity = false);
                p.Report(0.9);

                var imageMediaVersions = imageContentVersions
                                         .Select(contentVersion => new UmbracoMediaVersion
                {
                    Id = contentVersion.Id, Path = imagePaths[contentVersion.NodeId]
                }).ToList();
                context.Cms.BulkInsert(imageMediaVersions);
            }
        }