Exemplo n.º 1
0
        public void Apply(
            Changeset changeset,
            SqlConnection connection,
            SqlTransaction transaction,
            RepositoryManager repositoryManager
            )
        {
            var manager           = this.managerFactory.CreateDataManager(connection, transaction);
            var basketIdRange     = manager.ReserveBasketIds(changeset.CountryBasketChanges.Count());
            var countryRepository = repositoryManager.ClaimCountryRepository(manager);
            var basketRepository  = manager.GetAllCountryBaskets();

            foreach (var change in changeset.CountryBasketChanges)
            {
                int basketId;
                var basketInfo = basketRepository.Where(b => b.IsoCountryCode == change.UnsavedBasketCountry.Country.IsoCode).SingleOrDefault();
                if (basketInfo != null)
                {
                    basketId = basketInfo.Id;
                }
                else
                {
                    if (!basketIdRange.MoveNext())
                    {
                        throw new ApplicationException("There is no ID for a basket reserved.");
                    }
                    basketId = basketIdRange.Current;
                    this.ApplyCountryBasketChange(change, basketId, manager);
                }
                change.UnsavedBasketCountry.BasketId = basketId;


                var country = change.UnsavedBasketCountry.BasketCountry;
                country.Basket = new CountryBasket(basketId, change.UnsavedBasketCountry.Country);
                change.Other.BasketCountries.Add(country);
                change.Other.UnsavedBasketCountries.Remove(change.UnsavedBasketCountry);
            }

            if (changeset.TaxonomyChange != null)
            {
                ApplyTaxonomyChange(changeset, manager);
            }
        }
        public Changeset TryTransformToChangeset(RootModel model, Taxonomy taxonomy)
        {
            var models   = this.traverser.TraverseGlobe(model.Globe);
            var otherOpt = models.Select(x => x.TryAsOther()).Where(x => x != null).SingleOrDefault();

            if (otherOpt == null)
            {
                return(null);                              // no other model, no unsaved baskets, no changeset
            }
            var changes = otherOpt.UnsavedBasketCountries.Select(
                x => new CountryBasketChange(x, otherOpt)
                );

            if (!changes.Any())
            {
                return(null);                            // no changes, no changeset
            }
            var change = new TaxonomyChange(taxonomy, model);

            var result = new Changeset(change, changes);

            return(result);
        }