From e1fc33626e364e97ce10ca1a4803d530cb7be364 Mon Sep 17 00:00:00 2001 From: Athou Date: Tue, 13 Aug 2013 09:40:13 +0200 Subject: [PATCH] added ability to exclude subscriptions from markAll --- .../frontend/model/request/MarkRequest.java | 4 ++++ .../frontend/rest/resources/CategoryREST.java | 20 +++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/commafeed/frontend/model/request/MarkRequest.java b/src/main/java/com/commafeed/frontend/model/request/MarkRequest.java index 5472e769..2e477690 100644 --- a/src/main/java/com/commafeed/frontend/model/request/MarkRequest.java +++ b/src/main/java/com/commafeed/frontend/model/request/MarkRequest.java @@ -1,6 +1,7 @@ package com.commafeed.frontend.model.request; import java.io.Serializable; +import java.util.List; import lombok.Data; @@ -23,4 +24,7 @@ public class MarkRequest implements Serializable { required = false) private Long olderThan; + @ApiProperty(value = "if marking a category or 'all', exclude those subscriptions from the marking", required = false) + private List excludedSubscriptions; + } diff --git a/src/main/java/com/commafeed/frontend/rest/resources/CategoryREST.java b/src/main/java/com/commafeed/frontend/rest/resources/CategoryREST.java index 7ed03395..f199aa67 100644 --- a/src/main/java/com/commafeed/frontend/rest/resources/CategoryREST.java +++ b/src/main/java/com/commafeed/frontend/rest/resources/CategoryREST.java @@ -4,6 +4,7 @@ import java.io.StringWriter; import java.util.Collections; import java.util.Comparator; import java.util.Date; +import java.util.Iterator; import java.util.List; import java.util.Map; @@ -20,6 +21,7 @@ import javax.ws.rs.core.Response.Status; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; @@ -224,19 +226,33 @@ public class CategoryREST extends AbstractREST { Date olderThan = req.getOlderThan() == null ? null : new Date(req.getOlderThan()); if (ALL.equals(req.getId())) { - List subscriptions = feedSubscriptionDAO.findAll(getUser()); - feedEntryService.markSubscriptionEntries(getUser(), subscriptions, olderThan); + List subs = feedSubscriptionDAO.findAll(getUser()); + removeExcludedSubscriptions(subs, req.getExcludedSubscriptions()); + feedEntryService.markSubscriptionEntries(getUser(), subs, olderThan); } else if (STARRED.equals(req.getId())) { feedEntryService.markStarredEntries(getUser(), olderThan); } else { FeedCategory parent = feedCategoryDAO.findById(getUser(), Long.valueOf(req.getId())); List categories = feedCategoryDAO.findAllChildrenCategories(getUser(), parent); List subs = feedSubscriptionDAO.findByCategories(getUser(), categories); + removeExcludedSubscriptions(subs, req.getExcludedSubscriptions()); feedEntryService.markSubscriptionEntries(getUser(), subs, olderThan); } return Response.ok().build(); } + private void removeExcludedSubscriptions(List subs, List excludedIds) { + if (CollectionUtils.isNotEmpty(excludedIds)) { + Iterator it = subs.iterator(); + while (it.hasNext()) { + FeedSubscription sub = it.next(); + if (excludedIds.contains(sub.getId())) { + it.remove(); + } + } + } + } + @Path("/add") @POST @ApiOperation(value = "Add a category", notes = "Add a new feed category", responseClass = "java.lang.Long")