2013-03-20 20:33:42 +01:00
package com.commafeed.backend.dao ;
import java.util.Calendar ;
import java.util.Collection ;
2013-03-22 09:29:30 +01:00
import java.util.List ;
2013-03-20 20:33:42 +01:00
import javax.ejb.Stateless ;
import javax.inject.Inject ;
2013-03-22 09:29:30 +01:00
import javax.persistence.TypedQuery ;
2013-03-20 20:33:42 +01:00
2013-03-23 16:17:19 +01:00
import com.commafeed.backend.model.Feed ;
import com.commafeed.backend.model.FeedEntry ;
import com.commafeed.backend.model.User ;
2013-03-23 01:49:39 +01:00
import com.commafeed.frontend.utils.ModelFactory.MF ;
import com.google.common.collect.Iterables ;
2013-03-20 20:33:42 +01:00
@Stateless
2013-03-25 12:24:00 +01:00
@SuppressWarnings ( " serial " )
2013-03-23 01:49:39 +01:00
public class FeedEntryService extends GenericDAO < FeedEntry , Long > {
2013-03-20 20:33:42 +01:00
@Inject
FeedService feedService ;
public void updateEntries ( String url , Collection < FeedEntry > entries ) {
2013-03-23 01:49:39 +01:00
Feed feed = Iterables . getFirst (
feedService . findByField ( MF . i ( MF . p ( Feed . class ) . getUrl ( ) ) , url ) ,
null ) ;
2013-03-20 20:33:42 +01:00
for ( FeedEntry entry : entries ) {
2013-03-23 01:49:39 +01:00
FeedEntry existing = Iterables . getFirst (
findByField ( MF . i ( MF . p ( getType ( ) ) . getGuid ( ) ) ,
entry . getGuid ( ) ) , null ) ;
2013-03-20 20:33:42 +01:00
if ( existing = = null ) {
entry . setFeed ( feed ) ;
save ( entry ) ;
}
}
feed . setLastUpdated ( Calendar . getInstance ( ) . getTime ( ) ) ;
2013-03-25 12:24:00 +01:00
feed . setMessage ( null ) ;
2013-03-20 20:33:42 +01:00
em . merge ( feed ) ;
}
2013-03-22 09:29:30 +01:00
public List < FeedEntry > getUnreadEntries ( Feed feed , User user ) {
2013-03-22 11:42:25 +01:00
String query = " select e from FeedEntry e where e.feed=:feed and not exists (select s from FeedEntryStatus s where s.entry = e and s.user =:user and s.read = true) " ;
2013-03-22 09:29:30 +01:00
TypedQuery < FeedEntry > typedQuery = em . createQuery ( query ,
FeedEntry . class ) ;
typedQuery . setParameter ( " feed " , feed ) ;
typedQuery . setParameter ( " user " , user ) ;
return typedQuery . getResultList ( ) ;
}
2013-03-25 12:24:00 +01:00
2013-03-23 17:56:19 +01:00
public List < FeedEntry > getAllEntries ( Feed feed ) {
2013-03-23 15:52:26 +01:00
String query = " select e from FeedEntry e where e.feed=:feed " ;
TypedQuery < FeedEntry > typedQuery = em . createQuery ( query ,
FeedEntry . class ) ;
typedQuery . setParameter ( " feed " , feed ) ;
return typedQuery . getResultList ( ) ;
}
2013-03-22 09:29:30 +01:00
2013-03-20 20:33:42 +01:00
}