private void UpdateModifiedInformation(SitemapTag mediaTag) { UpdateModifiedInformation(mediaTag.Sitemap); }
/// <summary> /// Saves the tags. /// </summary> /// <param name="sitemap">The sitemap.</param> /// <param name="tags">The tags.</param> /// <param name="newCreatedTags">The new created tags.</param> public void SaveTags(Sitemap sitemap, IList<string> tags, out IList<Tag> newCreatedTags) { var trimmedTags = new List<string>(); if (tags != null) { foreach (var tag in tags) { trimmedTags.Add(tag.Trim()); } } newCreatedTags = new List<Tag>(); Tag tagAlias = null; // Tags merge: var sitemapTags = unitOfWork.Session .QueryOver<SitemapTag>() .Where(t => !t.IsDeleted && t.Sitemap.Id == sitemap.Id) .JoinQueryOver(t => t.Tag, JoinType.InnerJoin) .Where(t => !t.IsDeleted) .List<SitemapTag>(); // Remove deleted tags: for (var i = sitemapTags.Count - 1; i >= 0; i--) { var tag = trimmedTags.FirstOrDefault(s => s.ToLower() == sitemapTags[i].Tag.Name.ToLower()); if (tag == null) { unitOfWork.Session.Delete(sitemapTags[i]); } } // Add new tags: List<string> tagsInsert = new List<string>(); foreach (var tag in trimmedTags) { var existSitemapTag = sitemapTags.FirstOrDefault(sitemapTag => sitemapTag.Tag.Name.ToLower() == tag.ToLower()); if (existSitemapTag == null) { tagsInsert.Add(tag); } } if (tagsInsert.Count <= 0) { return; } // Get existing tags: var existingTags = unitOfWork.Session.QueryOver(() => tagAlias) .Where(t => !t.IsDeleted) .Where(Restrictions.In(Projections.Property(() => tagAlias.Name), tagsInsert)) .List<Tag>(); foreach (var tag in tagsInsert) { var sitemapTag = new SitemapTag { Sitemap = sitemap }; var existTag = existingTags.FirstOrDefault(t => t.Name.ToLower() == tag.ToLower()); if (existTag != null) { sitemapTag.Tag = existTag; } else { var newTag = new Tag { Name = tag }; unitOfWork.Session.SaveOrUpdate(newTag); newCreatedTags.Add(newTag); sitemapTag.Tag = newTag; } unitOfWork.Session.SaveOrUpdate(sitemapTag); } }
/// <summary> /// Saves the tags. /// </summary> /// <param name="sitemap">The sitemap.</param> /// <param name="tags">The tags.</param> /// <param name="newCreatedTags">The new created tags.</param> public void SaveTags(Sitemap sitemap, IList <string> tags, out IList <Tag> newCreatedTags) { var trimmedTags = new List <string>(); if (tags != null) { foreach (var tag in tags) { trimmedTags.Add(tag.Trim()); } } // remove tags who are equal (tags are case insensitive) for (int i = 0; i < trimmedTags.Count; i++) { for (int j = i + 1; j < trimmedTags.Count; j++) { if (i != j && trimmedTags[i].ToLowerInvariant() == trimmedTags[j].ToLowerInvariant()) { trimmedTags.RemoveAt(j); --j; } } } newCreatedTags = new List <Tag>(); Tag tagAlias = null; // Tags merge: var sitemapTags = unitOfWork.Session .QueryOver <SitemapTag>() .Where(t => !t.IsDeleted && t.Sitemap.Id == sitemap.Id) .JoinQueryOver(t => t.Tag, JoinType.InnerJoin) .Where(t => !t.IsDeleted) .List <SitemapTag>(); // Remove deleted tags: for (var i = sitemapTags.Count - 1; i >= 0; i--) { var tag = trimmedTags.FirstOrDefault(s => s.ToLower() == sitemapTags[i].Tag.Name.ToLower()); if (tag == null) { UpdateModifiedInformation(sitemapTags[i]); unitOfWork.Session.Delete(sitemapTags[i]); } } // Add new tags: List <string> tagsInsert = new List <string>(); foreach (var tag in trimmedTags) { var existSitemapTag = sitemapTags.FirstOrDefault(sitemapTag => sitemapTag.Tag.Name.ToLower() == tag.ToLower()); if (existSitemapTag == null) { tagsInsert.Add(tag); } } if (tagsInsert.Count <= 0) { return; } // Get existing tags: var existingTags = unitOfWork.Session.QueryOver(() => tagAlias) .Where(t => !t.IsDeleted) .Where(Restrictions.In(Projections.Property(() => tagAlias.Name), tagsInsert)) .List <Tag>(); foreach (var tag in tagsInsert) { var sitemapTag = new SitemapTag { Sitemap = sitemap }; var existTag = existingTags.FirstOrDefault(t => t.Name.ToLower() == tag.ToLower()); if (existTag != null) { sitemapTag.Tag = existTag; } else { var newTag = new Tag { Name = tag }; unitOfWork.Session.SaveOrUpdate(newTag); newCreatedTags.Add(newTag); sitemapTag.Tag = newTag; } UpdateModifiedInformation(sitemapTag); unitOfWork.Session.SaveOrUpdate(sitemapTag); } }