From a7f5f9ee00668528c9f720e1acc1ef7ac68104a4 Mon Sep 17 00:00:00 2001 From: Athou Date: Tue, 2 Jul 2013 14:57:00 +0200 Subject: [PATCH] method to merge feeds --- .../com/commafeed/backend/model/Feed.java | 3 +-- .../backend/services/FeedService.java | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/commafeed/backend/model/Feed.java b/src/main/java/com/commafeed/backend/model/Feed.java index ed7f16d9..4aacf5f2 100644 --- a/src/main/java/com/commafeed/backend/model/Feed.java +++ b/src/main/java/com/commafeed/backend/model/Feed.java @@ -4,7 +4,6 @@ import java.util.Date; import java.util.Set; import javax.persistence.Cacheable; -import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.ManyToMany; @@ -111,7 +110,7 @@ public class Feed extends AbstractModel { @Column(length = 40) private String lastContentHash; - @ManyToMany(mappedBy = "feeds", cascade = CascadeType.REMOVE) + @ManyToMany(mappedBy = "feeds") private Set entries = Sets.newHashSet(); @OneToMany(mappedBy = "feed") diff --git a/src/main/java/com/commafeed/backend/services/FeedService.java b/src/main/java/com/commafeed/backend/services/FeedService.java index f7300f9b..8b1ed13b 100644 --- a/src/main/java/com/commafeed/backend/services/FeedService.java +++ b/src/main/java/com/commafeed/backend/services/FeedService.java @@ -1,5 +1,7 @@ package com.commafeed.backend.services; +import java.util.List; + import javax.ejb.Lock; import javax.ejb.LockType; import javax.ejb.Singleton; @@ -8,8 +10,10 @@ import javax.inject.Inject; import org.apache.commons.codec.digest.DigestUtils; import com.commafeed.backend.dao.FeedDAO; +import com.commafeed.backend.dao.FeedSubscriptionDAO; import com.commafeed.backend.feeds.FeedUtils; import com.commafeed.backend.model.Feed; +import com.commafeed.backend.model.FeedSubscription; @Singleton public class FeedService { @@ -17,6 +21,9 @@ public class FeedService { @Inject FeedDAO feedDAO; + @Inject + FeedSubscriptionDAO feedSubscriptionDAO; + @Lock(LockType.WRITE) public Feed findOrCreate(String url) { Feed feed = feedDAO.findByUrl(url); @@ -32,4 +39,19 @@ public class FeedService { return feed; } + public void mergeFeeds(Feed into, Feed... feeds) { + for (Feed feed : feeds) { + if (into.getId().equals(feed.getId())) { + continue; + } + List subs = feedSubscriptionDAO.findByFeed(feed); + for (FeedSubscription sub : subs) { + sub.setFeed(into); + } + feedSubscriptionDAO.saveOrUpdate(subs); + feedDAO.delete(feed); + } + feedDAO.saveOrUpdate(into); + } + }