You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wookie.apache.org by sc...@apache.org on 2010/02/28 22:44:25 UTC
svn commit: r917299 - in /incubator/wookie/trunk:
src-tests/org/apache/wookie/tests/connector/framework/impl/WookieConnectorService.java
src/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java
Author: scottbw
Date: Sun Feb 28 21:44:25 2010
New Revision: 917299
URL: http://svn.apache.org/viewvc?rev=917299&view=rev
Log:
Fixed the problem in connecting to REST participants service, and added a getUsers(instance) method with test case, for checking that participants are correctly set up on the service. Also corrected a typo in getCurrentUser test case.
Modified:
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/connector/framework/impl/WookieConnectorService.java
incubator/wookie/trunk/src/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java
Modified: incubator/wookie/trunk/src-tests/org/apache/wookie/tests/connector/framework/impl/WookieConnectorService.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src-tests/org/apache/wookie/tests/connector/framework/impl/WookieConnectorService.java?rev=917299&r1=917298&r2=917299&view=diff
==============================================================================
--- incubator/wookie/trunk/src-tests/org/apache/wookie/tests/connector/framework/impl/WookieConnectorService.java (original)
+++ incubator/wookie/trunk/src-tests/org/apache/wookie/tests/connector/framework/impl/WookieConnectorService.java Sun Feb 28 21:44:25 2010
@@ -19,6 +19,7 @@
import java.io.IOException;
import java.util.HashMap;
+import org.apache.wookie.connector.framework.User;
import org.apache.wookie.connector.framework.Widget;
import org.apache.wookie.connector.framework.WidgetInstance;
import org.apache.wookie.connector.framework.WookieConnectorException;
@@ -41,7 +42,7 @@
@Test
public void getUser() {
- assertNotNull("Test user is null", service.getUser("test"));
+ assertNotNull("Test user is null", service.getUser("testuser"));
}
@Test
@@ -57,4 +58,18 @@
WidgetInstance instance = service.getOrCreateInstance((Widget)widgets.values().toArray()[0]);
assertNotNull("Retrieved widget instance is null", instance);
}
+
+ @Test
+ public void addParticipant() throws WookieConnectorException, IOException {
+ HashMap<String, Widget> widgets = service.getAvailableWidgets();
+ WidgetInstance instance = service.getOrCreateInstance((Widget)widgets.values().toArray()[0]);
+ assertNotNull("Retrieved widget instance is null", instance);
+
+ User user = new User("test1","test user 1");
+ service.addParticipant(instance, user);
+ User[] users = service.getUsers(instance);
+ assertTrue("Wrong number of users returned",users.length==2);
+ assertTrue("Wrong user returned", users[0].getLoginName().equals("testuser"));
+ assertTrue("Wrong user returned", users[1].getLoginName().equals("test1"));
+ }
}
Modified: incubator/wookie/trunk/src/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java
URL: http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java?rev=917299&r1=917298&r2=917299&view=diff
==============================================================================
--- incubator/wookie/trunk/src/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java (original)
+++ incubator/wookie/trunk/src/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java Sun Feb 28 21:44:25 2010
@@ -106,14 +106,7 @@
return instance;
}
- /**
- * @refactor At time of writing the REST API for adding a participant is broken so we are
- * using the non-REST approach. The code for REST API is commented out and should be used
- * in the future.
- */
public void addParticipant(WidgetInstance widget, User user) throws WookieConnectorException {
- /*
- * REST API approach - REST API is broken at time of writing
StringBuilder postdata;
try {
postdata = new StringBuilder("api_key=");
@@ -137,18 +130,12 @@
URL url = null;
try {
url = new URL(conn.getURL() + "/participants");
- URLConnection conn = url.openConnection();
+ HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(postdata.toString());
wr.flush();
-
- InputStream is = conn.getInputStream();
-
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- DocumentBuilder db;
- db = dbf.newDocumentBuilder();
- Document xml = db.parse(is);
+ if (conn.getResponseCode() > 201) throw new IOException(conn.getResponseMessage());
} catch (MalformedURLException e) {
throw new WookieConnectorException("Participants rest URL is incorrect: " + url, e);
} catch (IOException e) {
@@ -158,47 +145,7 @@
sb.append(" data: ");
sb.append(postdata);
throw new WookieConnectorException(sb.toString(), e);
- } catch (ParserConfigurationException e) {
- throw new RuntimeException("Unable to configure XML parser", e);
- } catch (SAXException e) {
- throw new RuntimeException("Problem parsing XML from Wookie Server", e);
- }
- */
-
- StringBuilder url;
- try {
- url = new StringBuilder(conn.getURL());
- url.append("/WidgetServiceServlet?");
- url.append("requestid=addparticipant");
- url.append("&api_key=");
- url.append(URLEncoder.encode(getConnection().getApiKey(), "UTF-8"));
- url.append("&shareddatakey=");
- url.append(URLEncoder.encode(getConnection().getSharedDataKey(), "UTF-8"));
- url.append("&userid=");
- url.append(URLEncoder.encode(getCurrentUser().getLoginName(), "UTF-8"));
- url.append("&widgetid=");
- url.append(URLEncoder.encode(widget.getId(), "UTF-8"));
- url.append("&participant_id=");
- url.append(URLEncoder.encode(user.getLoginName(), "UTF-8"));
- url.append("&participant_display_name=");
- url.append(URLEncoder.encode(user.getScreenName(), "UTF-8"));
- url.append("&participant_thumbnail_url=");
- url.append(URLEncoder.encode(user.getThumbnailUrl(), "UTF-8"));
- } catch (UnsupportedEncodingException e) {
- throw new WookieConnectorException("Must support UTF-8 encoding", e);
- }
-
- try {
- HttpURLConnection conn = (HttpURLConnection)new URL(url.toString()).openConnection();
- conn.disconnect();
- } catch (MalformedURLException e) {
- throw new WookieConnectorException("Participants rest URL is incorrect: " + url, e);
- } catch (IOException e) {
- StringBuilder sb = new StringBuilder("Problem adding a participant. ");
- sb.append("URL: ");
- sb.append(url);
- throw new WookieConnectorException(sb.toString(), e);
- }
+ }
}
/**
@@ -258,6 +205,65 @@
public WidgetInstances getInstances() {
return instances;
}
+
+ /**
+ * Get the array of users for a widget instance
+ * @param instance
+ * @return an array of users
+ * @throws WookieConnectorException
+ */
+ public User[] getUsers(WidgetInstance instance) throws WookieConnectorException{
+ String queryString;
+ try {
+ queryString = new String("?api_key=");
+ queryString+=(URLEncoder.encode(getConnection().getApiKey(), "UTF-8"));
+ queryString+=("&shareddatakey=");
+ queryString+=(URLEncoder.encode(getConnection().getSharedDataKey(), "UTF-8"));
+ queryString+=("&userid=");
+ queryString+=(URLEncoder.encode(getCurrentUser().getLoginName(), "UTF-8"));
+ queryString+=("&widgetid=");
+ queryString+=(URLEncoder.encode(instance.getId(), "UTF-8"));
+ } catch (UnsupportedEncodingException e) {
+ throw new WookieConnectorException("Must support UTF-8 encoding", e);
+ }
+
+ URL url = null;
+ try {
+ url = new URL(conn.getURL() + "/participants"+queryString);
+ HttpURLConnection conn = (HttpURLConnection)url.openConnection();
+ InputStream is = conn.getInputStream();
+ if (conn.getResponseCode() > 200) throw new IOException(conn.getResponseMessage());
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ DocumentBuilder db = dbf.newDocumentBuilder();
+ Document widgetsDoc = db.parse(is);
+ Element root = widgetsDoc.getDocumentElement();
+ NodeList participantsList = root.getElementsByTagName("participant");
+ if (participantsList == null || participantsList.getLength() == 0) return new User[0];
+ User[] users = new User[participantsList.getLength()];
+ for (int idx = 0; idx < participantsList.getLength(); idx = idx + 1) {
+ Element participantEl = (Element) participantsList.item(idx);
+ String id = participantEl.getAttribute("id");
+ String name = participantEl.getAttribute("display_name");
+ //FIXME implement: String thumbnail = participantEl.getAttribute("thumbnail_url");
+ User user = new User(id,name);
+ users[idx] = user;
+ }
+ return users;
+ } catch (MalformedURLException e) {
+ throw new WookieConnectorException("Participants rest URL is incorrect: " + url, e);
+ } catch (IOException e) {
+ StringBuilder sb = new StringBuilder("Problem getting participants. ");
+ sb.append("URL: ");
+ sb.append(url);
+ sb.append(" data: ");
+ sb.append(queryString);
+ throw new WookieConnectorException(sb.toString(), e);
+ } catch (ParserConfigurationException e) {
+ throw new WookieConnectorException("Problem parsing data: " + url, e);
+ } catch (SAXException e) {
+ throw new WookieConnectorException("Problem parsing data: " + url, e);
+ }
+ }
}