WeblogsPingPlugin.java [plain text]
package org.blojsom.plugin.weblogsping;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.xmlrpc.XmlRpcClient;
import org.apache.xmlrpc.XmlRpcException;
import org.blojsom.blog.Blog;
import org.blojsom.blog.BlogEntry;
import org.blojsom.blog.BlogUser;
import org.blojsom.blog.BlojsomConfiguration;
import org.blojsom.event.BlojsomEvent;
import org.blojsom.event.BlojsomListener;
import org.blojsom.plugin.BlojsomPlugin;
import org.blojsom.plugin.BlojsomPluginException;
import org.blojsom.plugin.admin.event.BlogEntryEvent;
import org.blojsom.util.BlojsomConstants;
import org.blojsom.util.BlojsomUtils;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Map;
import java.util.Vector;
public class WeblogsPingPlugin implements BlojsomListener, BlojsomPlugin, BlojsomConstants {
private Log _logger = LogFactory.getLog(WeblogsPingPlugin.class);
private static final String WEBLOGS_PING_METHOD = "weblogUpdates.ping";
private static final String WEBLOGS_EXTENDED_PING_METHOD = "weblogUpdates.extendedPing";
private static final String DEFAULT_PREFERRED_SYNDICATION_FLAVOR = "rss2";
public static final String BLOG_PING_URLS_IP = "blog-ping-urls";
public static final String NO_PING_WEBLOGS_METADATA = "no-ping-weblogs";
public WeblogsPingPlugin() {
}
public void init(ServletConfig servletConfig, BlojsomConfiguration blojsomConfiguration) throws BlojsomPluginException {
blojsomConfiguration.getEventBroadcaster().addListener(this);
}
public BlogEntry[] process(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse,
BlogUser user,
Map context,
BlogEntry[] entries) throws BlojsomPluginException {
return entries;
}
public void handleEvent(BlojsomEvent event) {
if (event instanceof BlogEntryEvent) {
BlogEntryEvent entryEvent = (BlogEntryEvent) event;
Blog blog = entryEvent.getBlogUser().getBlog();
String syndicationURL = blog.getBlogURL();
Map metaData = entryEvent.getBlogEntry().getMetaData();
if (BlojsomUtils.checkMapForKey(metaData, NO_PING_WEBLOGS_METADATA)) {
return;
}
String preferredSyndicationFlavor = blog.getBlogProperty(PREFERRED_SYNDICATION_FLAVOR);
if (BlojsomUtils.checkNullOrBlank(preferredSyndicationFlavor)) {
preferredSyndicationFlavor = DEFAULT_PREFERRED_SYNDICATION_FLAVOR;
}
syndicationURL = syndicationURL + "?flavor=" + preferredSyndicationFlavor;
String pingURLsIP = blog.getBlogProperty(BLOG_PING_URLS_IP);
String[] pingURLs = BlojsomUtils.parseDelimitedList(pingURLsIP, WHITESPACE);
if (pingURLs != null && pingURLs.length > 0) {
Vector params = new Vector();
Vector extendedParams = new Vector();
params.add(blog.getBlogName());
extendedParams.add(blog.getBlogName());
params.add(blog.getBlogURL());
extendedParams.add(blog.getBlogURL());
extendedParams.add(blog.getBlogURL());
extendedParams.add(syndicationURL);
for (int i = 0; i < pingURLs.length; i++) {
String pingURL = pingURLs[i];
try {
XmlRpcClient weblogsPingClient = new XmlRpcClient(pingURL);
try {
weblogsPingClient.execute(WEBLOGS_EXTENDED_PING_METHOD, extendedParams);
} catch (XmlRpcException e) {
_logger.error(e);
try {
weblogsPingClient.execute(WEBLOGS_PING_METHOD, params);
} catch (XmlRpcException e1) {
_logger.error(e1);
} catch (IOException e1) {
_logger.error(e1);
}
} catch (IOException e) {
_logger.error(e);
}
} catch (MalformedURLException e) {
_logger.error(e);
}
}
}
_logger.debug("Pinged notification URLs based on add/update blog entry event");
}
}
public void processEvent(BlojsomEvent event) {
}
public void cleanup() throws BlojsomPluginException {
}
public void destroy() throws BlojsomPluginException {
}
}