1 31 package org.blojsom.plugin.weblogsping; 32 33 import org.apache.commons.logging.Log; 34 import org.apache.commons.logging.LogFactory; 35 import org.apache.xmlrpc.XmlRpcClient; 36 import org.apache.xmlrpc.XmlRpcException; 37 import org.blojsom.blog.Blog; 38 import org.blojsom.blog.Entry; 39 import org.blojsom.event.Event; 40 import org.blojsom.event.EventBroadcaster; 41 import org.blojsom.event.Filter; 42 import org.blojsom.event.Listener; 43 import org.blojsom.plugin.Plugin; 44 import org.blojsom.plugin.PluginException; 45 import org.blojsom.plugin.admin.event.EntryAddedEvent; 46 import org.blojsom.plugin.admin.event.EntryDeletedEvent; 47 import org.blojsom.plugin.admin.event.EntryEvent; 48 import org.blojsom.plugin.admin.event.EntryUpdatedEvent; 49 import org.blojsom.util.BlojsomConstants; 50 import org.blojsom.util.BlojsomUtils; 51 52 import javax.servlet.http.HttpServletRequest ; 53 import javax.servlet.http.HttpServletResponse ; 54 import java.io.IOException ; 55 import java.net.MalformedURLException ; 56 import java.util.Map ; 57 import java.util.Vector ; 58 59 66 public class WeblogsPingPlugin implements Listener, Plugin { 67 68 private Log _logger = LogFactory.getLog(WeblogsPingPlugin.class); 69 70 private static final String WEBLOGS_PING_METHOD = "weblogUpdates.ping"; 71 private static final String WEBLOGS_EXTENDED_PING_METHOD = "weblogUpdates.extendedPing"; 72 private static final String DEFAULT_PREFERRED_SYNDICATION_FLAVOR = "rss2"; 73 74 public static final String BLOG_PING_URLS_IP = "blog-ping-urls"; 75 public static final String NO_PING_WEBLOGS_METADATA = "no-ping-weblogs"; 76 77 private EventBroadcaster _eventBroadcaster; 78 79 82 public WeblogsPingPlugin() { 83 } 84 85 90 public void setEventBroadcaster(EventBroadcaster eventBroadcaster) { 91 _eventBroadcaster = eventBroadcaster; 92 } 93 94 99 public void init() throws PluginException { 100 Filter pingEventFilter = new Filter() { 101 public boolean processEvent(Event event) { 102 return (event instanceof EntryAddedEvent || event instanceof EntryDeletedEvent || event instanceof EntryUpdatedEvent); 103 } 104 }; 105 106 _eventBroadcaster.addListener(this, pingEventFilter); 107 } 108 109 120 public Entry[] process(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Blog blog, Map context, Entry[] entries) throws PluginException { 121 return entries; 122 } 123 124 129 public void handleEvent(Event event) { 130 if (event instanceof EntryEvent) { 131 EntryEvent entryEvent = (EntryEvent) event; 132 Blog blog = entryEvent.getBlog(); 133 String syndicationURL = blog.getBlogURL(); 134 135 Map metaData = entryEvent.getEntry().getMetaData(); 137 if (BlojsomUtils.checkMapForKey(metaData, NO_PING_WEBLOGS_METADATA)) { 138 return; 139 } 140 141 String preferredSyndicationFlavor = blog.getProperty(BlojsomConstants.PREFERRED_SYNDICATION_FLAVOR); 143 if (BlojsomUtils.checkNullOrBlank(preferredSyndicationFlavor)) { 144 preferredSyndicationFlavor = DEFAULT_PREFERRED_SYNDICATION_FLAVOR; 145 } 146 syndicationURL = syndicationURL + "?flavor=" + preferredSyndicationFlavor; 147 148 String pingURLsIP = blog.getProperty(BLOG_PING_URLS_IP); 150 String [] pingURLs = BlojsomUtils.parseDelimitedList(pingURLsIP, BlojsomConstants.WHITESPACE); 151 if (pingURLs != null && pingURLs.length > 0) { 152 Vector params = new Vector (); 153 Vector extendedParams = new Vector (); 154 params.add(blog.getBlogName()); 155 extendedParams.add(blog.getBlogName()); 156 params.add(blog.getBlogURL()); 157 extendedParams.add(blog.getBlogURL()); 158 extendedParams.add(blog.getBlogURL()); 159 extendedParams.add(syndicationURL); 160 161 for (int i = 0; i < pingURLs.length; i++) { 162 String pingURL = pingURLs[i]; 163 try { 164 XmlRpcClient weblogsPingClient = new XmlRpcClient(pingURL); 165 try { 167 weblogsPingClient.execute(WEBLOGS_EXTENDED_PING_METHOD, extendedParams); 168 } catch (XmlRpcException e) { 169 _logger.error(e); 170 try { 171 weblogsPingClient.execute(WEBLOGS_PING_METHOD, params); 172 } catch (XmlRpcException e1) { 173 if (_logger.isErrorEnabled()) { 174 _logger.error(e1); 175 } 176 } catch (IOException e1) { 177 if (_logger.isErrorEnabled()) { 178 _logger.error(e1); 179 } 180 } 181 } catch (IOException e) { 182 if (_logger.isErrorEnabled()) { 183 _logger.error(e); 184 } 185 } 186 } catch (MalformedURLException e) { 187 if (_logger.isErrorEnabled()) { 188 _logger.error(e); 189 } 190 } 191 } 192 193 if (_logger.isDebugEnabled()) { 194 _logger.debug("Pinged notification URLs based on blog entry event"); 195 } 196 } else { 197 if (_logger.isDebugEnabled()) { 198 _logger.debug("No ping notification URLs specified"); 199 } 200 } 201 } 202 } 203 204 209 public void processEvent(Event event) { 210 } 211 212 217 public void cleanup() throws PluginException { 218 } 219 220 225 public void destroy() throws PluginException { 226 } 227 } 228 | Popular Tags |