private static void AddCatalogLanguage(CatalogDto workingDto, CatalogDto.CatalogRow catalogRow, string languageCode)
 {
     CatalogDto.CatalogLanguageRow languageRow = workingDto.CatalogLanguage.NewCatalogLanguageRow();
     languageRow.LanguageCode = languageCode;
     languageRow.CatalogId    = catalogRow.CatalogId;
     workingDto.CatalogLanguage.AddCatalogLanguageRow(languageRow);
 }
        /// <summary>
        /// Saves the changes.
        /// </summary>
        /// <param name="context">The context.</param>
        public void SaveChanges(IDictionary context)
        {
            CatalogDto dto = (CatalogDto)context["Catalog"];

            CatalogDto.CatalogRow row = null;

            if (dto.Catalog.Count > 0)
            {
                row          = dto.Catalog[0];
                row.Modified = DateTime.UtcNow;
            }
            else
            {
                row           = dto.Catalog.NewCatalogRow();
                row.Created   = DateTime.UtcNow;
                row.Modified  = DateTime.UtcNow;
                row.IsPrimary = true;
            }

            row.Name            = CatalogName.Text;
            row.DefaultCurrency = DefaultCurrency.SelectedValue;
            row.DefaultLanguage = DefaultLanguage.SelectedValue;
            row.WeightBase      = BaseWeight.SelectedValue;
            row.StartDate       = this.AvailableFrom.Value.ToUniversalTime();
            row.EndDate         = this.ExpiresOn.Value.ToUniversalTime();
            row.IsActive        = this.IsCatalogActive.IsSelected;
            row.SortOrder       = Int32.Parse(this.SortOrder.Text);
            row.ApplicationId   = CatalogConfiguration.Instance.ApplicationId;

            if (row.RowState == DataRowState.Detached)
            {
                dto.Catalog.Rows.Add(row);
            }

            // Populate other languages
            foreach (ListItem item in OtherLanguagesList.Items)
            {
                if (item.Selected && !DefaultLanguage.SelectedValue.Equals(item.Value))
                {
                    if (dto.CatalogLanguage.Select(String.Format("CatalogId = {0} and LanguageCode = '{1}'", CatalogId, item.Value)).Length == 0)
                    {
                        CatalogDto.CatalogLanguageRow langRow = dto.CatalogLanguage.NewCatalogLanguageRow();
                        langRow.LanguageCode = item.Value;
                        langRow.CatalogId    = row.CatalogId;
                        dto.CatalogLanguage.Rows.Add(langRow);
                    }
                }
                else
                {
                    DataRow[] rows = dto.CatalogLanguage.Select(String.Format("CatalogId = {0} and LanguageCode = '{1}'", CatalogId, item.Value));
                    if (rows.Length > 0)
                    {
                        foreach (CatalogDto.CatalogLanguageRow lrow in rows)
                        {
                            lrow.Delete();
                        }
                    }
                }
            }

            // Populate sites
            foreach (ListItem item in SiteList.Items)
            {
                if (item.Selected) // add row
                {
                    DataRow[] rows = dto.SiteCatalog.Select(String.Format("CatalogId = {0} and SiteId = '{1}'", CatalogId, item.Value));
                    if (rows.Length == 0)
                    {
                        CatalogDto.SiteCatalogRow siteRow = dto.SiteCatalog.NewSiteCatalogRow();
                        siteRow.SiteId    = new Guid(item.Value);
                        siteRow.CatalogId = row.CatalogId;
                        dto.SiteCatalog.Rows.Add(siteRow);
                    }
                }
                else // delete row
                {
                    DataRow[] rows = dto.SiteCatalog.Select(String.Format("CatalogId = {0} and SiteId = '{1}'", CatalogId, item.Value));
                    if (rows.Length > 0)
                    {
                        foreach (CatalogDto.SiteCatalogRow srow in rows)
                        {
                            srow.Delete();
                        }
                    }
                }
            }

            // Re add sites
        }