File Source: updatenotificationpingsclient.java
/*
P/P * Method: net.sourceforge.pebble.webservice.UpdateNotificationPingsClient__static_init
*
* Postconditions:
* init'ed(log)
*/
1 /*
2 * Copyright (c) 2003-2006, Simon Brown
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * - Neither the name of Pebble nor the names of its contributors may
17 * be used to endorse or promote products derived from this software
18 * without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
31 */
32 package net.sourceforge.pebble.webservice;
33
34 import net.sourceforge.pebble.domain.Blog;
35 import net.sourceforge.pebble.util.StringUtils;
36
37 import org.apache.commons.logging.Log;
38 import org.apache.commons.logging.LogFactory;
/*
P/P * Method: void net.sourceforge.pebble.webservice.UpdateNotificationPingsClient()
*/
39 import org.apache.xmlrpc.AsyncCallback;
40 import org.apache.xmlrpc.XmlRpcClient;
41
42 import java.io.IOException;
43 import java.net.URL;
44 import java.util.Hashtable;
45 import java.util.Vector;
46
47 /**
48 * A simple client to ping (notify) sites like weblogs.com when this blog has
49 * been updated.
50 *
51 * @author Simon Brown
52 */
53 public class UpdateNotificationPingsClient {
54
55 /** the log used by this class */
/*
P/P * Method: Log access$0()
*
* Preconditions:
* init'ed(log)
*
* Postconditions:
* return_value == log
* init'ed(return_value)
*/
56 private static Log log = LogFactory.getLog(UpdateNotificationPingsClient.class);
57
58 /** the name of the method to call via XML-RPC */
59 private static final String WEBLOGS_METHOD_NAME = "weblogUpdates.ping";
60
61 /**
62 * Sends a weblogUpdates.ping indicating this the specified blog has
63 * recently been updated. This version sends the blog's home URL.
64 *
65 * @param blog the Blog representing the updated blog
66 * @param sites the list of sites (URLs) to ping
67 */
/*
P/P * Method: void sendUpdateNotificationPing(Blog, String[])
*
* Preconditions:
* blog != null
* (soft) log != null
* (soft) sites != null
* (soft) sites.length <= 232-1
* (soft) init'ed(sites[...])
*/
68 public void sendUpdateNotificationPing(Blog blog, String[] sites) {
69 sendUpdateNotificationPing(blog, blog.getUrl(), sites);
70 }
71
72 /**
73 * Sends a weblogUpdates.ping indicating this the specified blog has
74 * recently been updated. This version sends an arbitrary URL.
75 *
76 * @param blog the Blog representing the updated blog
77 * @param url the URL to send the ping for
78 * @param sites the list of sites (URLs) to ping
79 */
80 public void sendUpdateNotificationPing(Blog blog, String url, String[] sites) {
81 try {
82 for (String site : sites) {
83 log.info("Sending XML-RPC ping to " + site);
84 blog.info("Sending XML-RPC ping to " + StringUtils.transformHTML(site));
/*
P/P * Method: void sendUpdateNotificationPing(Blog, String, String[])
*
* Preconditions:
* (soft) blog != null
* (soft) log != null
* (soft) sites != null
* (soft) sites.length <= 232-1
* (soft) init'ed(sites[...])
*/
85 XmlRpcClient xmlrpc = new XmlRpcClient(site);
86 Vector params = new Vector();
87 params.addElement(blog.getName());
88 params.addElement(url);
89 xmlrpc.executeAsync(WEBLOGS_METHOD_NAME, params, new UpdateNotificationPingsAsyncCallback(blog));
90 }
91 } catch (IOException ioe) {
92 log.error(ioe.getMessage(), ioe);
93 }
94 }
95
96 /**
97 * A callback class used to log the result/error message.
98 */
99 class UpdateNotificationPingsAsyncCallback implements AsyncCallback {
100
101 private Blog blog;
102
103 public UpdateNotificationPingsAsyncCallback(Blog blog) {
104 this.blog = blog;
105 }
106
107 /**
108 * Called if the XML-RPC was successful.
109 *
110 * @param o the resulting Object
111 * @param url the original URL
112 * @param method the original method name
113 */
/*
P/P * Method: void handleResult(Object, URL, String)
*
* Preconditions:
* (soft) net/sourceforge/pebble/webservice/UpdateNotificationPingsClient.log != null
* (soft) this.blog != null
*
* Test Vectors:
* o: Addr_Set{null}, Inverse{null}
*/
114 public void handleResult(Object o, URL url, String method) {
115 Hashtable result = (Hashtable)o;
116 if (result != null) {
117 log.info("Result of XML-RPC ping to " + method + " at " + url + " was " + result.get("flerror") + ", " + result.get("message"));
118 blog.info("Result of XML-RPC ping to " + t(method) + " at " + t(url) + " was " + t(result.get("flerror")) + ", " + t(result.get("message")));
119 }
120 }
121
122 /**
123 * Called if the XML-RPC was not successful.
124 *
125 * @param e the resulting Exception
126 * @param url the original URL
127 * @param method the original method name
128 */
/*
P/P * Method: void handleError(Exception, URL, String)
*
* Preconditions:
* net/sourceforge/pebble/webservice/UpdateNotificationPingsClient.log != null
*/
129 public void handleError(Exception e, URL url, String method) {
130 log.error("Exception when calling " + method + " at " + url, e);
131 }
132
/*
P/P * Method: String t(Object)
*
* Postconditions:
* init'ed(return_value)
*
* Test Vectors:
* object: Inverse{null}, Addr_Set{null}
*/
133 private String t(Object object) {
134 if(object == null) return null;
135 return StringUtils.transformHTML(object.toString());
136 }
137 }
138
139 }
SofCheck Inspector Build Version : 2.22510
| updatenotificationpingsclient.java |
2010-Jun-25 19:40:32 |
| updatenotificationpingsclient.class |
2010-Jul-19 20:23:38 |
| updatenotificationpingsclient$updatenotificationpingsasynccallback.class |
2010-Jul-19 20:23:38 |