1 18 19 package org.apache.roller.business.hibernate; 20 21 import com.sun.syndication.fetcher.FeedFetcher; 22 import com.sun.syndication.fetcher.impl.FeedFetcherCache; 23 import java.text.MessageFormat ; 24 import java.util.ArrayList ; 25 import java.util.Date ; 26 import java.util.HashMap ; 27 import java.util.Iterator ; 28 import java.util.List ; 29 import java.util.Map ; 30 import java.util.Set ; 31 import java.util.TreeSet ; 32 import org.apache.commons.logging.Log; 33 import org.apache.commons.logging.LogFactory; 34 import org.apache.roller.RollerException; 35 import org.apache.roller.config.RollerRuntimeConfig; 36 import org.apache.roller.model.PluginManager; 37 import org.apache.roller.model.RollerFactory; 38 import org.apache.roller.model.UserManager; 39 import org.apache.roller.model.WeblogManager; 40 import org.apache.roller.pojos.PlanetEntryData; 41 import org.apache.roller.pojos.PlanetSubscriptionData; 42 import org.apache.roller.pojos.WeblogEntryData; 43 import org.apache.roller.pojos.WebsiteData; 44 import org.apache.commons.lang.StringUtils; 45 46 47 48 55 public class HibernateRollerPlanetManagerImpl extends HibernatePlanetManagerImpl { 56 57 private static Log log = LogFactory.getLog(HibernateRollerPlanetManagerImpl.class); 58 59 60 public HibernateRollerPlanetManagerImpl(HibernatePersistenceStrategy strat) { 61 62 super(strat); 63 64 log.info("Instantiating Hibernate Roller Planet Manager"); 65 } 66 67 68 protected Set getNewEntries(PlanetSubscriptionData sub, 69 FeedFetcher feedFetcher, 70 FeedFetcherCache feedInfoCache) 71 throws RollerException { 72 73 String localURL = RollerRuntimeConfig.getProperty("site.absoluteurl"); 74 75 if (StringUtils.isEmpty(localURL) || !sub.getFeedURL().startsWith(localURL)) { 77 78 log.debug("Feed is remote, letting parent handle it "+sub.getFeedURL()); 79 80 return super.getNewEntries(sub, feedFetcher, feedInfoCache); 81 } 82 83 try { 84 if(sub.getAuthor() != null) { 87 88 log.debug("Getting LOCAL feed "+sub.getFeedURL()); 89 90 Set newEntries = new TreeSet (); 91 92 UserManager usermgr = RollerFactory.getRoller().getUserManager(); 94 WebsiteData website = usermgr.getWebsiteByHandle(sub.getAuthor()); 95 if (website == null) 96 return newEntries; 97 98 WeblogManager blogmgr = RollerFactory.getRoller().getWeblogManager(); 100 101 Date siteUpdated = website.getLastModified(); 102 if (siteUpdated == null) { log.warn("Last-publish time null, skipping local feed [" 104 + website.getHandle() + "]"); 105 return newEntries; 106 } 107 108 List entries = new ArrayList (); 110 if (sub.getLastUpdated()==null || siteUpdated.after(sub.getLastUpdated())) { 111 int entryCount = RollerRuntimeConfig.getIntProperty( 112 "site.newsfeeds.defaultEntries"); 113 entries = blogmgr.getWeblogEntries( 114 website, 115 null, 116 null, new Date (), null, WeblogEntryData.PUBLISHED, null, null, 0, entryCount); 124 125 sub.setLastUpdated(siteUpdated); 126 saveSubscription(sub); 127 128 } else { 129 if (log.isDebugEnabled()) { 130 String msg = MessageFormat.format( 131 " Skipping ({0} / {1})", new Object [] { 132 siteUpdated, sub.getLastUpdated()}); 133 log.debug(msg); 134 } 135 } 136 137 PluginManager ppmgr = RollerFactory.getRoller().getPagePluginManager(); 139 Map pagePlugins = ppmgr.getWeblogEntryPlugins(website); 140 Iterator entryIter = entries.iterator(); 141 while (entryIter.hasNext()) { 142 try { 143 WeblogEntryData rollerEntry = 144 (WeblogEntryData)entryIter.next(); 145 PlanetEntryData entry = 146 new PlanetEntryData(rollerEntry, sub, pagePlugins); 147 saveEntry(entry); 148 newEntries.add(entry); 149 } catch (Exception e) { 150 log.error("ERROR processing subscription entry", e); 151 } 152 } 153 154 return newEntries; 155 } 156 } catch (Exception e) { 157 log.warn("Problem reading local feed", e); 158 } 159 160 log.debug("Failed to fetch locally, trying remote "+sub.getFeedURL()); 161 162 return super.getNewEntries(sub, feedFetcher, feedInfoCache); 164 } 165 166 } 167 | Popular Tags |