From 50585b3ff9e46ab27df38205763951d60768d986 Mon Sep 17 00:00:00 2001 From: Athou Date: Thu, 25 Apr 2013 14:43:52 +0200 Subject: [PATCH] refactored feed updating --- .../backend/services/FeedUpdateService.java | 76 +++++++++++-------- 1 file changed, 45 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/commafeed/backend/services/FeedUpdateService.java b/src/main/java/com/commafeed/backend/services/FeedUpdateService.java index 341ed2c6..745c28c1 100644 --- a/src/main/java/com/commafeed/backend/services/FeedUpdateService.java +++ b/src/main/java/com/commafeed/backend/services/FeedUpdateService.java @@ -5,7 +5,6 @@ import java.util.Calendar; import java.util.Collection; import java.util.List; -import javax.ejb.Stateless; import javax.inject.Inject; import org.apache.commons.lang.ObjectUtils; @@ -23,7 +22,6 @@ import com.commafeed.backend.model.FeedEntryStatus; import com.commafeed.backend.model.FeedSubscription; import com.google.common.collect.Lists; -@Stateless public class FeedUpdateService { @Inject @@ -39,26 +37,21 @@ public class FeedUpdateService { FeedEntryStatusDAO feedEntryStatusDAO; public void updateEntries(Feed feed, Collection entries) { - List guids = Lists.newArrayList(); - for (FeedEntry entry : entries) { - guids.add(entry.getGuid()); - } - List existingEntries = guids.isEmpty() ? new ArrayList() - : feedEntryDAO.findByGuids(guids); + List existingEntries = getExistingEntries(entries); + List subscriptions = feedSubscriptionDAO + .findByFeed(feed); + + List entryUpdateList = Lists.newArrayList(); + List statusUpdateList = Lists.newArrayList(); for (FeedEntry entry : entries) { - FeedEntry foundEntry = null; - for (FeedEntry existingEntry : existingEntries) { - if (StringUtils - .equals(entry.getGuid(), existingEntry.getGuid())) { - foundEntry = existingEntry; - break; - } - } + + FeedEntry foundEntry = findEntry(existingEntries, entry); + if (foundEntry == null) { FeedEntryContent content = entry.getContent(); - content.setContent(FeedUtils.handleContent(content.getContent())); + content.setContent(FeedUtils.handleContent(content.getContent())); String title = FeedUtils.handleContent(content.getTitle()); if (title != null) { content.setTitle(title.substring(0, @@ -66,7 +59,8 @@ public class FeedUpdateService { } entry.setInserted(Calendar.getInstance().getTime()); - addFeedToEntry(entry, feed); + entry.getFeeds().add(feed); + entryUpdateList.add(entry); } else { boolean foundFeed = false; for (Feed existingFeed : foundEntry.getFeeds()) { @@ -77,24 +71,44 @@ public class FeedUpdateService { } if (!foundFeed) { - addFeedToEntry(foundEntry, feed); + foundEntry.getFeeds().add(feed); + entryUpdateList.add(entry); } } } - } - - private void addFeedToEntry(FeedEntry entry, Feed feed) { - entry.getFeeds().add(feed); - feedEntryDAO.saveOrUpdate(entry); - List subscriptions = feedSubscriptionDAO - .findByFeed(feed); - for (FeedSubscription sub : subscriptions) { - FeedEntryStatus status = new FeedEntryStatus(); - status.setEntry(entry); - status.setSubscription(sub); - feedEntryStatusDAO.save(status); + for (FeedEntry entry : entryUpdateList) { + for (FeedSubscription sub : subscriptions) { + FeedEntryStatus status = new FeedEntryStatus(); + status.setEntry(entry); + status.setSubscription(sub); + statusUpdateList.add(status); + } } + feedEntryDAO.saveOrUpdate(entryUpdateList); + feedEntryStatusDAO.saveOrUpdate(statusUpdateList); + } + private FeedEntry findEntry(List existingEntries, FeedEntry entry) { + FeedEntry foundEntry = null; + for (FeedEntry existingEntry : existingEntries) { + if (StringUtils.equals(entry.getGuid(), existingEntry.getGuid())) { + foundEntry = existingEntry; + break; + } + } + return foundEntry; + } + + private List getExistingEntries(Collection entries) { + List guids = Lists.newArrayList(); + for (FeedEntry entry : entries) { + guids.add(entry.getGuid()); + } + List existingEntries = guids.isEmpty() ? new ArrayList() + : feedEntryDAO.findByGuids(guids); + + return existingEntries; + } }