1 18 19 package org.apache.roller.ui.core.tasks; 20 21 import java.util.ArrayList ; 22 import java.util.Iterator ; 23 import java.util.List ; 24 import java.util.TimerTask ; 25 import org.apache.commons.logging.Log; 26 import org.apache.commons.logging.LogFactory; 27 import org.apache.roller.RollerException; 28 import org.apache.roller.config.RollerRuntimeConfig; 29 import org.apache.roller.model.PlanetManager; 30 import org.apache.roller.model.Roller; 31 import org.apache.roller.model.RollerFactory; 32 import org.apache.roller.model.ScheduledTask; 33 import org.apache.roller.model.UserManager; 34 import org.apache.roller.pojos.PlanetGroupData; 35 import org.apache.roller.pojos.PlanetSubscriptionData; 36 import org.apache.roller.pojos.WebsiteData; 37 import org.apache.roller.util.URLUtilities; 38 39 40 43 public class SyncWebsitesTask extends TimerTask implements ScheduledTask { 44 45 private static Log log = LogFactory.getLog(SyncWebsitesTask.class); 46 47 48 51 public static void main(String [] args) { 52 try { 53 RollerFactory.setRoller( 54 "org.apache.roller.business.hibernate.HibernateRollerImpl"); 55 SyncWebsitesTask task = new SyncWebsitesTask(); 56 task.init(RollerFactory.getRoller(), "dummy"); 57 task.run(); 58 System.exit(0); 59 } catch (Throwable t) { 60 t.printStackTrace(); 61 System.exit(-1); 62 } 63 } 64 65 66 public void init(Roller roller, String realPath) throws RollerException { 67 } 69 70 71 public void run() { 72 syncWebsites(); 73 } 74 75 76 79 private void syncWebsites() { 80 81 String absUrl = RollerRuntimeConfig.getProperty("site.absoluteurl"); 83 if(absUrl == null || absUrl.trim().length() == 0) { 84 log.error("ERROR: cannot sync websites with Planet Roller - " 85 +"absolute URL not specified in Roller Config"); 86 return; 87 } 88 89 try { 90 PlanetManager planet = RollerFactory.getRoller().getPlanetManager(); 91 UserManager userManager = RollerFactory.getRoller().getUserManager(); 92 93 PlanetGroupData group = planet.getGroup("all"); 95 if(group == null) { 96 group = new PlanetGroupData(); 97 group.setHandle("all"); 98 group.setTitle("all"); 99 planet.saveGroup(group); 100 } 101 102 List liveUserFeeds = new ArrayList (); 104 Iterator websites = 105 userManager.getWebsites(null, Boolean.TRUE, Boolean.TRUE, null, null, 0, -1).iterator(); 106 while(websites.hasNext()) { 107 WebsiteData weblog = (WebsiteData) websites.next(); 108 109 String siteUrl = URLUtilities.getWeblogURL(weblog, null, true); 110 String feedUrl = URLUtilities.getWeblogFeedURL(weblog, null, "entries", "rss", null, false, true); 111 112 liveUserFeeds.add(feedUrl); 114 115 PlanetSubscriptionData sub = planet.getSubscription(feedUrl); 117 if (sub == null) { 118 log.info("ADDING feed: "+feedUrl); 119 120 sub = new PlanetSubscriptionData(); 121 sub.setTitle(weblog.getName()); 122 sub.setFeedURL(feedUrl); 123 sub.setSiteURL(siteUrl); 124 sub.setAuthor(weblog.getHandle()); 125 126 planet.saveSubscription(sub); 127 group.addSubscription(sub); 128 } else { 129 sub.setTitle(weblog.getName()); 130 sub.setAuthor(weblog.getHandle()); 131 132 planet.saveSubscription(sub); 133 } 134 } 135 136 Iterator subs = group.getSubscriptions().iterator(); 138 while(subs.hasNext()) { 139 PlanetSubscriptionData sub = 140 (PlanetSubscriptionData) subs.next(); 141 if (!liveUserFeeds.contains(sub.getFeedURL())) { 142 log.info("DELETING feed: "+sub.getFeedURL()); 143 planet.deleteSubscription(sub); 144 group.removeSubscription(sub); 145 } 146 } 147 148 planet.saveGroup(group); 150 RollerFactory.getRoller().flush(); 151 152 } catch (RollerException e) { 153 log.error("ERROR refreshing entries", e); 154 } finally { 155 RollerFactory.getRoller().release(); 157 } 158 } 159 160 } 161 | Popular Tags |