protected override void Process(LinqExtender.Interface.IModify <Tag> items) { object tagList = Bucket.Instance.For.Item(TagColums.ListMode).Value; TagListMode tagListMode = tagList == null ? TagListMode.Popular : (TagListMode)tagList; if (tagListMode == TagListMode.Popular) { object tagsPeriod = Bucket.Instance.For.Item(TagColums.Period).Value; TagPeriod period = tagsPeriod == null ? TagPeriod.Day : (TagPeriod)tagsPeriod; int score = Convert.ToInt32(Bucket.Instance.For.Item(TagColums.Score).Value ?? "0"); int count = (int)Bucket.Instance.For.Item(TagColums.Count).Value; if (count > 200) { throw new Exception("Tag count should be less than 200"); } using (ITagRepository tagRepositoryRepo = repositoryFactory.CreateTagRepository()) { IEnumerable <Tag> tags = tagRepositoryRepo.GetPopularTags(period, count); // do the filter on score. if (score > 0) { tags = tags.Where(tag => tag.Score == score).Select(tag => tag); } items.AddRange(tags, true); } } else { object photoId = Bucket.Instance.For.Item(TagColums.PhotoId).Value; if (photoId == null) { throw new Exception("Must provide a valid photoId"); } using (ITagRepository tagRepositoryRepo = repositoryFactory.CreateTagRepository()) { items.AddRange(tagRepositoryRepo.GetTagsForPhoto((string)photoId)); } } }
IEnumerable<Tag> ITagRepository.GetPopularTags(TagPeriod period, int count) { IList<Tag> list = new List<Tag>(); string method = Helper.GetExternalMethodName(); string requestUrl = BuildUrl(method, "period", period.ToString().ToLower(), "count", count.ToString()); XmlElement element = elementProxy.GetResponseElement(requestUrl); foreach (var xmlElement in element.Descendants("tag")) { Tag tag = new Tag(XmlToObject<PopularTag>.Deserialize(xmlElement.OuterXml)); tag.Period = period; tag.Count = count; list.Add(tag); } return list; }
IEnumerable <Tag> ITagRepository.GetPopularTags(TagPeriod period, int count) { IList <Tag> list = new List <Tag>(); string method = Helper.GetExternalMethodName(); string requestUrl = BuildUrl(method, "period", period.ToString().ToLower(), "count", count.ToString()); XmlElement element = elementProxy.GetResponseElement(requestUrl); foreach (var xmlElement in element.Descendants("tag")) { Tag tag = new Tag(XmlToObject <PopularTag> .Deserialize(xmlElement.OuterXml)); tag.Period = period; tag.Count = count; list.Add(tag); } return(list); }