Author: krispopat
Date: Thu Mar  8 09:03:48 2012
New Revision: 1298307

URL: http://svn.apache.org/viewvc?rev=1298307&view=rev
Log:
Updated Java connector framework to reflect xml changes in the widgets/xml as 
described in WOOKIE-32.  Also updated test

Modified:
    
incubator/wookie/trunk/connector/java/src-test/org/apache/wookie/tests/connector/framework/impl/TestWookieConnectorService.java
    
incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java
    
incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/IWookieConnectorService.java
    
incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/Widget.java
    
incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/WookieConnectorService.java

Modified: 
incubator/wookie/trunk/connector/java/src-test/org/apache/wookie/tests/connector/framework/impl/TestWookieConnectorService.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/connector/java/src-test/org/apache/wookie/tests/connector/framework/impl/TestWookieConnectorService.java?rev=1298307&r1=1298306&r2=1298307&view=diff
==============================================================================
--- 
incubator/wookie/trunk/connector/java/src-test/org/apache/wookie/tests/connector/framework/impl/TestWookieConnectorService.java
 (original)
+++ 
incubator/wookie/trunk/connector/java/src-test/org/apache/wookie/tests/connector/framework/impl/TestWookieConnectorService.java
 Thu Mar  8 09:03:48 2012
@@ -67,7 +67,7 @@ public class TestWookieConnectorService 
     if (instance == null) {
       try {
         new URL("http://localhost:8080/wookie";).openStream();
-        instance = new 
TestWookieConnectorService("http://localhost:8080/wookie";, "TEST", 
"myshareddata");
+        instance = new 
TestWookieConnectorService("http://localhost:8080/wookie";, 
"57x7addiQCmrGNUvJ7avvyEoTIM.eq.", "myshareddata");
       } catch (ConnectException e) {
         // assume localhost is not running so run against bombax
         instance = new 
TestWookieConnectorService("http://bombax.oucs.ox.ac.uk:8888/wookie";, "TEST", 
"myshareddata");
@@ -76,4 +76,5 @@ public class TestWookieConnectorService 
     return instance;
   }
 
+
 }

Modified: 
incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java?rev=1298307&r1=1298306&r2=1298307&view=diff
==============================================================================
--- 
incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java
 (original)
+++ 
incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java
 Thu Mar  8 09:03:48 2012
@@ -36,314 +36,389 @@ import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.xml.sax.SAXException;
 
+public abstract class AbstractWookieConnectorService implements 
IWookieConnectorService {
+       
+       private static final Logger logger = 
LoggerFactory.getLogger(AbstractWookieConnectorService.class);
+       
+       WookieServerConnection conn;
+       
+       WidgetInstances instances = new WidgetInstances();
 
-public abstract class AbstractWookieConnectorService implements
-    IWookieConnectorService {
-  private static final Logger logger = 
LoggerFactory.getLogger(AbstractWookieConnectorService.class);
-  WookieServerConnection conn;
-  WidgetInstances instances = new WidgetInstances();
-  
-  public AbstractWookieConnectorService(String url, String apiKey, String 
sharedDataKey) throws WookieConnectorException {
-    setConnection(new WookieServerConnection(url, apiKey, sharedDataKey));
-  }
-  
-  /**
-   * Creates a WookieConnectorService that has not yet been initialised to 
connect
-   * to a specific server.
-   */
-  protected AbstractWookieConnectorService() {
-    super();
-  }
-  
-  public void setConnection(WookieServerConnection newConn) {
-    logger.debug("Setting wookie connection to " + conn);
-    this.conn = newConn;
-  }
-  
-  public WookieServerConnection getConnection() {
-    return this.conn;
-  }
-  
-  /**
-   * Get or create an instance of a widget.
-   * 
-   * @param widget
-   * @return the ID of the widget instance
-   * @throws IOException
-   * @throws SimalRepositoryException
-   * 
-   */
-  public WidgetInstance getOrCreateInstance(Widget widget) throws IOException,
-      WookieConnectorException {
-    return getOrCreateInstance(widget.identifier);
-  }
-  
-  public void setPropertyForInstance(WidgetInstance instance, String 
propertyType, String fName, String fValue)
-       throws WookieConnectorException{
-           String queryString;             
-           try {
-               if(!propertyType.equals("setpublicproperty") && 
!propertyType.equals("setpersonalproperty")){
-                       logger.error("Incorrect requestId parameter.  Must be 
either 'setpublicproperty' or 'setprivateproperty'");
-                       throw new Exception();                  
-               }
-               queryString = new String("?requestid=" + propertyType + 
"&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"));
-               queryString+=("&propertyname=");
-               queryString+=(URLEncoder.encode(fName, "UTF-8"));
-               queryString+=("&propertyvalue=");
-               queryString+=(URLEncoder.encode(fValue, "UTF-8"));
-           } 
-           catch (UnsupportedEncodingException e) {
-             throw new WookieConnectorException("Must support UTF-8 encoding", 
e);
-           }
-           catch (Exception e) {
-                     throw new WookieConnectorException("Cannot set property 
type:" + fName + " using requestId " + propertyType, e);
-               }
-           URL url = null;
-           try {
-             url = new URL(conn.getURL() + "/WidgetServiceServlet" + 
queryString);
-             HttpURLConnection conn = (HttpURLConnection)url.openConnection();
-             if (conn.getResponseCode() > 200) throw new 
IOException(conn.getResponseMessage());                     
-           } 
-           catch (Exception e) {
-             throw new WookieConnectorException("Unable to set property ", e); 
      
-           }               
-  }
-      
-  public WidgetInstance getOrCreateInstance(String guid) throws IOException,
-      WookieConnectorException {
-    URL url;
-    WidgetInstance instance;
-    try {
-      StringBuilder postdata = new StringBuilder("api_key=");
-      postdata.append(URLEncoder.encode(getConnection().getApiKey(), "UTF-8"));
-      postdata.append("&shareddatakey=");
-      postdata.append(URLEncoder.encode(getConnection().getSharedDataKey(), 
"UTF-8"));
-      postdata.append("&userid=");
-      postdata.append(URLEncoder.encode(getCurrentUser().getLoginName(), 
"UTF-8"));
-      postdata.append("&widgetid=");
-      postdata.append(URLEncoder.encode(guid, "UTF-8"));
-      
-      logger.debug("Makeing Wookie REST query using: " + postdata);
-      
-      url = new URL(conn.getURL() + "/widgetinstances");
-      URLConnection urlConn = url.openConnection();
-      urlConn.setDoOutput(true);
-      OutputStreamWriter wr = new 
OutputStreamWriter(urlConn.getOutputStream());
-      wr.write(postdata.toString());
-      wr.flush();
-
-      InputStream is = urlConn.getInputStream();
-
-      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-      DocumentBuilder db = dbf.newDocumentBuilder();
-      instance = parseInstance(guid, db.parse(is));
-      
-      instances.put(instance);
-
-      wr.close();
-      is.close();
-      
-      addParticipant(instance, getCurrentUser());
-    } catch (MalformedURLException e) {
-      throw new RuntimeException("URL for supplied Wookie Server is malformed",
-          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);
-    }
-
-    return instance;
-  }
-
-  /**
-   * Parse an XML document returned from the Wookie server that describes a 
widget instance.
-   * 
-   * @param widgetId the identifier of the widget this document represents
-   * @param xml description of the instance as returned by the widget server 
when the widget was instantiated.
-   * 
-   * @return the identifier for this instance
-   */
-  public WidgetInstance parseInstance(String widgetId, Document xml) {
-    Element rootEl = xml.getDocumentElement();
-    String url = rootEl.getElementsByTagName("url").item(0).getTextContent();
-    String title = 
rootEl.getElementsByTagName("title").item(0).getTextContent();
-    String height = 
rootEl.getElementsByTagName("height").item(0).getTextContent();
-    String width = 
rootEl.getElementsByTagName("width").item(0).getTextContent();
-    WidgetInstance instance = new WidgetInstance(url, widgetId, title, height, 
width);
-    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 {
-    StringBuilder postdata;
-    try {
-      postdata = new StringBuilder("api_key=");
-      postdata.append(URLEncoder.encode(getConnection().getApiKey(), "UTF-8"));
-      postdata.append("&shareddatakey=");
-      postdata.append(URLEncoder.encode(getConnection().getSharedDataKey(), 
"UTF-8"));
-      postdata.append("&userid=");
-      postdata.append(URLEncoder.encode(getCurrentUser().getLoginName(), 
"UTF-8"));
-      postdata.append("&widgetid=");
-      postdata.append(URLEncoder.encode(widget.getId(), "UTF-8"));
-      postdata.append("&participant_id=");
-      postdata.append(URLEncoder.encode(user.getLoginName(), "UTF-8"));
-      postdata.append("&participant_display_name=");
-      postdata.append(URLEncoder.encode(user.getScreenName(), "UTF-8"));
-      postdata.append("&participant_thumbnail_url=");
-      postdata.append(URLEncoder.encode(user.getThumbnailUrl(), "UTF-8"));
-    } catch (UnsupportedEncodingException e) {
-      throw new WookieConnectorException("Must support UTF-8 encoding", e);
-    }
-    
-    URL url = null;
-    try {
-      url = new URL(conn.getURL() + "/participants");
-      HttpURLConnection conn = (HttpURLConnection)url.openConnection();
-      conn.setDoOutput(true);
-      OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
-      wr.write(postdata.toString());
-      wr.flush();
-      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) {
-      StringBuilder sb = new StringBuilder("Problem adding a participant. ");
-      sb.append("URL: ");
-      sb.append(url);
-      sb.append(" data: ");
-      sb.append(postdata);
-      throw new WookieConnectorException(sb.toString(), e);
-    } 
-  }
-  
-  /**
-   * Get a set of all the available widgets in the server. If there is an error
-   * communicating with the server return an empty set, or the set received so
-   * far in order to allow the application to proceed. The application should
-   * display an appropriate message in this case.
-   * 
-   * @return
-   * @throws SimalException
-   */
-  public HashMap<String, Widget> getAvailableWidgets()
-      throws WookieConnectorException {
-    HashMap<String, Widget> widgets = new HashMap<String, Widget>();
-    try {
-      InputStream is = new URL(conn.getURL() + 
"/widgets?all=true").openStream();
-      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-      DocumentBuilder db = dbf.newDocumentBuilder();
-      Document widgetsDoc = db.parse(is);
-
-      Element root = widgetsDoc.getDocumentElement();
-      NodeList widgetList = root.getElementsByTagName("widget");
-      for (int idx = 0; idx < widgetList.getLength(); idx = idx + 1) {
-        Element widgetEl = (Element) widgetList.item(idx);
-        String id = widgetEl.getAttribute("identifier");
-        if (widgets.containsKey(id)) {
-          break;
-        }
-        String title = 
widgetEl.getElementsByTagName("title").item(0).getTextContent();
-        String description = 
widgetEl.getElementsByTagName("description").item(0).getTextContent();
-        Node iconEl = widgetEl.getElementsByTagName("icon").item(0);
-        URL iconURL;
-        if (iconEl != null) {
-          iconURL = new URL(iconEl.getTextContent());
-        } else {
-          iconURL = new URL("http://www.oss-watch.ac.uk/images/logo2.gif";);
-        }
-        Widget widget = new Widget(id, title, description, iconURL);
-        widgets.put(id, widget);
-      }
-    } catch (ParserConfigurationException e) {
-      throw new WookieConnectorException("Unable to create XML parser", e);
-    } catch (MalformedURLException e) {
-      throw new WookieConnectorException("URL for Wookie is malformed", e);
-    } catch (IOException e) {
-      // return an empty set, or the set received so far in order to allow
-      // the application to proceed. The application should display an
-      // appropriate message in this case.
-      return widgets;
-    } catch (SAXException e) {
-      throw new WookieConnectorException(
-          "Unable to parse the response from Wookie", e);
-    }
-    return widgets;
-  }
-  
-  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");
-               String thumbnail = participantEl.getAttribute("thumbnail_url");
-               User user = new User(id,name, thumbnail);
-               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);
-               } 
-  }
+       public AbstractWookieConnectorService(String url, String apiKey,
+                       String sharedDataKey) throws WookieConnectorException {
+               setConnection(new WookieServerConnection(url, apiKey, 
sharedDataKey));
+       }
+       
+       
+       
+
+       /**
+        * Creates a WookieConnectorService that has not yet been initialised to
+        * connect to a specific server.
+        */
+       protected AbstractWookieConnectorService() {
+               super();
+       }
+       
+
+       public void setConnection(WookieServerConnection newConn) {
+               logger.debug("Setting wookie connection to " + conn);
+               this.conn = newConn;
+       }
+       
+
+       public WookieServerConnection getConnection() {
+               return this.conn;
+       }
+
+       /**
+        * Get or create an instance of a widget.
+        * 
+        * @param widget
+        * @return the ID of the widget instance
+        * @throws IOException
+        * @throws SimalRepositoryException
+        * 
+        */
+       public WidgetInstance getOrCreateInstance(Widget widget) throws 
IOException, WookieConnectorException {
+               return getOrCreateInstance(widget.identifier);
+       }
+
+       public void setPropertyForInstance(WidgetInstance instance,
+                                                                               
String propertyType, String fName,
+                                                                               
String fValue) throws WookieConnectorException {
+               String queryString;
+               try {
+                       if (!propertyType.equals("setpublicproperty") && 
!propertyType.equals("setpersonalproperty")) {
+                               logger.error("Incorrect requestId parameter.  
Must be either 'setpublicproperty' or 'setprivateproperty'");
+                               throw new Exception();
+                       }
+                       queryString = new String("?requestid=" + propertyType + 
"&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"));
+                       queryString += ("&propertyname=");
+                       queryString += (URLEncoder.encode(fName, "UTF-8"));
+                       queryString += ("&propertyvalue=");
+                       queryString += (URLEncoder.encode(fValue, "UTF-8"));
+               }
+               catch (UnsupportedEncodingException e) {
+                       throw new WookieConnectorException("Must support UTF-8 
encoding", e);
+               }
+               catch (Exception e) {
+                       throw new WookieConnectorException("Cannot set property 
type:" + fName + " using requestId " + propertyType, e);
+               }
+               URL url = null;
+               try {
+                       url = new URL(conn.getURL() + "/WidgetServiceServlet" + 
queryString);
+                       HttpURLConnection conn = (HttpURLConnection) 
url.openConnection();
+                       if (conn.getResponseCode() > 200) {
+                               throw new 
IOException(conn.getResponseMessage());
+                       }
+               }
+               catch (Exception e) {
+                       throw new WookieConnectorException("Unable to set 
property ", e);
+               }
+       }
+
+       public WidgetInstance getOrCreateInstance(String guid) throws 
IOException, WookieConnectorException {
+               URL url;
+               WidgetInstance instance;
+               try {
+                       StringBuilder postdata = new StringBuilder("api_key=");
+                       
postdata.append(URLEncoder.encode(getConnection().getApiKey(), "UTF-8"));
+                       postdata.append("&shareddatakey=");
+                       
postdata.append(URLEncoder.encode(getConnection().getSharedDataKey(), "UTF-8"));
+                       postdata.append("&userid=");
+                       
postdata.append(URLEncoder.encode(getCurrentUser().getLoginName(), "UTF-8"));
+                       postdata.append("&widgetid=");
+                       postdata.append(URLEncoder.encode(guid, "UTF-8"));
+
+                       logger.debug("Makeing Wookie REST query using: " + 
postdata);
+
+                       url = new URL(conn.getURL() + "/widgetinstances");
+                       URLConnection urlConn = url.openConnection();
+                       urlConn.setDoOutput(true);
+                       OutputStreamWriter wr = new 
OutputStreamWriter(urlConn.getOutputStream());
+                       wr.write(postdata.toString());
+                       
+                       wr.flush();
+
+                       instance = parseInstance(guid, getURLDoc(url));
+                       instances.put(instance);
+
+                       wr.close();
+
+                       addParticipant(instance, getCurrentUser());
+                       
+               }
+               catch (MalformedURLException e) {
+                       throw new RuntimeException(
+                                       "URL for supplied Wookie Server is 
malformed", 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);
+               }
+
+               return instance;
+       }
+
+       /**
+        * Parse an XML document returned from the Wookie server that describes 
a
+        * widget instance.
+        * 
+        * @param widgetId
+        *            the identifier of the widget this document represents
+        * @param xml
+        *            description of the instance as returned by the widget 
server
+        *            when the widget was instantiated.
+        * 
+        * @return the identifier for this instance
+        */
+       public WidgetInstance parseInstance(String widgetId, Document xml) {
+               Element rootEl = xml.getDocumentElement();
+               String url = getNodeTextContent(rootEl, "url");
+               String title = getNodeTextContent(rootEl, "title");
+               String height = getNodeTextContent(rootEl, "height");
+               String width = getNodeTextContent(rootEl, "width");
+               WidgetInstance instance = new WidgetInstance(url, widgetId, 
title, height, width);
+               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 {
+               StringBuilder postdata;
+               try {
+                       postdata = new StringBuilder("api_key=");
+                       
postdata.append(URLEncoder.encode(getConnection().getApiKey(), "UTF-8"));
+                       postdata.append("&shareddatakey=");
+                       
postdata.append(URLEncoder.encode(getConnection().getSharedDataKey(), "UTF-8"));
+                       postdata.append("&userid=");
+                       
postdata.append(URLEncoder.encode(getCurrentUser().getLoginName(), "UTF-8"));
+                       postdata.append("&widgetid=");
+                       postdata.append(URLEncoder.encode(widget.getId(), 
"UTF-8"));
+                       postdata.append("&participant_id=");
+                       postdata.append(URLEncoder.encode(user.getLoginName(), 
"UTF-8"));
+                       postdata.append("&participant_display_name=");
+                       postdata.append(URLEncoder.encode(user.getScreenName(), 
"UTF-8"));
+                       postdata.append("&participant_thumbnail_url=");
+                       
postdata.append(URLEncoder.encode(user.getThumbnailUrl(), "UTF-8"));
+               }
+               catch (UnsupportedEncodingException e) {
+                       throw new WookieConnectorException("Must support UTF-8 
encoding", e);
+               }
+
+               URL url = null;
+               try {
+                       url = new URL(conn.getURL() + "/participants");
+                       HttpURLConnection conn = (HttpURLConnection) 
url.openConnection();
+                       conn.setDoOutput(true);
+                       OutputStreamWriter wr = new 
OutputStreamWriter(conn.getOutputStream());
+                       wr.write(postdata.toString());
+                       wr.flush();
+                       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) {
+                       StringBuilder sb = new StringBuilder( "Problem adding a 
participant. ");
+                       sb.append("URL: ");
+                       sb.append(url);
+                       sb.append(" data: ");
+                       sb.append(postdata);
+                       throw new WookieConnectorException(sb.toString(), e);
+               }
+       }
+       
+
+       /**
+        * Get a set of all the available widgets in the server. If there is an
+        * error communicating with the server return an empty set, or the set
+        * received so far in order to allow the application to proceed. The
+        * application should display an appropriate message in this case.
+        * 
+        * @return
+        * @throws WookieConnectorException
+        */
+       public HashMap<String, Widget> getAvailableWidgets() throws 
WookieConnectorException {
+
+               HashMap<String, Widget> widgets = new HashMap<String, Widget>();
+
+               try {
+                       URL url = new URL(conn.getURL() + "/widgets?all=true");
+
+                       Document widgetsDoc = getURLDoc(url);
+
+                       Element root = widgetsDoc.getDocumentElement();
+                       NodeList widgetList = 
root.getElementsByTagName("widget");
+                       for (int idx = 0; idx < widgetList.getLength(); idx = 
idx + 1) {
+                               Element widgetEl = (Element) 
widgetList.item(idx);
+                               String id = widgetEl.getAttribute("id");
+                               String width = widgetEl.getAttribute("width");
+                               String height = widgetEl.getAttribute("height");
+                               String version = 
widgetEl.getAttribute("version");
+                               if (widgets.containsKey(id)) {
+                                       break;
+                               }
+                               String name = getNodeTextContent(widgetEl, 
"name" );
+                               String description = 
getNodeTextContent(widgetEl, "description" );
+                               String license = getNodeTextContent(widgetEl, 
"license" );
+                               String author = getNodeTextContent(widgetEl, 
"author" );
+                               Element iconEl = (Element) 
widgetEl.getElementsByTagName("icon").item(0);
+                               URL iconURL;
+                               if (iconEl != null) {
+                                       iconURL = new 
URL(iconEl.getAttribute("src"));
+                               }
+                               else {
+                                       iconURL = new 
URL("http://www.oss-watch.ac.uk/images/logo2.gif";);
+                               }
+
+                               Widget widget = new Widget(id, name, 
+                                                                               
description, iconURL,
+                                                                               
width, height,
+                                                                               
version, author,
+                                                                               
license);
+                               
+                               widgets.put(id, widget);
+                       }
+               }
+               catch (ParserConfigurationException e) {
+                       throw new WookieConnectorException("Unable to create 
XML parser", e);
+               }
+               catch (MalformedURLException e) {
+                       throw new WookieConnectorException("URL for Wookie is 
malformed", e);
+               }
+               catch (IOException e) {
+                       // return an empty set, or the set received so far in 
order to allow
+                       // the application to proceed. The application should 
display an
+                       // appropriate message in this case.
+                       return widgets;
+               }
+               catch (SAXException e) {
+                       throw new WookieConnectorException(
+                                       "Unable to parse the response from 
Wookie", e);
+               }
+               return widgets;
+       }
+       
+       
+       
+
+       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);
+                       Document usersDoc = getURLDoc(url);
+                       Element root = usersDoc.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");
+                               String thumbnail = 
participantEl.getAttribute("thumbnail_url");
+                               User user = new User(id, name, thumbnail);
+                               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);
+               }
+       }
+       
+       
+       private String getNodeTextContent(Element e, String subElementName ) {
+               NodeList nl = e.getElementsByTagName("description");
+               if ( nl.getLength() > 0 ) {
+                       Node n = nl.item(0);
+                       if ( n != null ) {
+                               return n.getTextContent();
+                       }
+               }
+               return "";
+       }
+
+       /**
+        * Gets the input stream and parses it to a document
+        * 
+        * @param url
+        * @return Document
+        * @throws IOException
+        * @throws ParserConfigurationException
+        * @throws SAXException
+        */
+       private Document getURLDoc(URL url) throws IOException, 
ParserConfigurationException, SAXException {
+               HttpURLConnection httpConnection = (HttpURLConnection) 
url.openConnection();
+               InputStream is = httpConnection.getInputStream();
+               if (httpConnection.getResponseCode() > 200) {
+                       throw new 
IOException(httpConnection.getResponseMessage());
+               }
+               DocumentBuilderFactory dbf = 
DocumentBuilderFactory.newInstance();
+               DocumentBuilder docb = dbf.newDocumentBuilder();
+               Document parsedDoc = docb.parse(is);
+               is.close();
+               return parsedDoc;
+       }
 
-  
 }

Modified: 
incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/IWookieConnectorService.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/IWookieConnectorService.java?rev=1298307&r1=1298306&r2=1298307&view=diff
==============================================================================
--- 
incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/IWookieConnectorService.java
 (original)
+++ 
incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/IWookieConnectorService.java
 Thu Mar  8 09:03:48 2012
@@ -114,6 +114,9 @@ public interface IWookieConnectorService
    */
   public HashMap<String, Widget> getAvailableWidgets()
       throws WookieConnectorException;
+  
+  
+ 
   /**
    * Get all the instances of widgets that are currently managed by this 
service.
    *

Modified: 
incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/Widget.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/Widget.java?rev=1298307&r1=1298306&r2=1298307&view=diff
==============================================================================
--- 
incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/Widget.java
 (original)
+++ 
incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/Widget.java
 Thu Mar  8 09:03:48 2012
@@ -22,18 +22,32 @@ import java.net.URL;
  * A client side representation of a widget. 
  * 
  * @refactor this duplicates data stored in the Widget bean on the server side.
+ * 
+ * @refactor additional properties
  */
 public class Widget { 
+       
   String identifier;
-  String title;
+  String name;
   String description;
   URL icon;
+  String width;
+  String height;
+  String version;
+  String author;
+  String license;
 
-  public Widget(String identifier, String title, String description, URL icon) 
{
+  public Widget(String identifier, String name, String description, URL icon,
+                 String width, String height, String version, String author, 
String license) {
     this.identifier = identifier;
-    this.title = title;
+    this.name = name;
     this.description = description;
     this.icon = icon;
+    this.width = width;
+    this.height = height;
+    this.version = version;
+    this.author = author;
+    this.license = license;
   }
   
   /**
@@ -49,8 +63,8 @@ public class Widget { 
    * Get the human readable title of this widget.
    * @return
    */
-  public String getTitle() {
-    return title;
+  public String getName() {
+    return name;
   }
 
   /**
@@ -69,4 +83,47 @@ public class Widget { 
   public String getDescription() {
     return description;
   }
+
+public String getWidth() {
+       return width;
+}
+
+public void setWidth(String width) {
+       this.width = width;
+}
+
+public String getHeight() {
+       return height;
+}
+
+public void setHeight(String height) {
+       this.height = height;
+}
+
+public String getVersion() {
+       return version;
+}
+
+public void setVersion(String version) {
+       this.version = version;
+}
+
+public String getAuthor() {
+       return author;
+}
+
+public void setAuthor(String author) {
+       this.author = author;
+}
+
+public String getLicense() {
+       return license;
+}
+
+public void setLicense(String license) {
+       this.license = license;
+}
+  
+  
+  
 }

Modified: 
incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/WookieConnectorService.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/WookieConnectorService.java?rev=1298307&r1=1298306&r2=1298307&view=diff
==============================================================================
--- 
incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/WookieConnectorService.java
 (original)
+++ 
incubator/wookie/trunk/connector/java/src/org/apache/wookie/connector/framework/WookieConnectorService.java
 Thu Mar  8 09:03:48 2012
@@ -13,6 +13,8 @@
  */
 package org.apache.wookie.connector.framework;
 
+import java.util.HashMap;
+
 
 /**
  * An implementation of the WookieConnectorService for use by Wookie itself.
@@ -64,6 +66,7 @@ public class WookieConnectorService exte
   private User getSecondTestUser() {
     return new User("testuser2", "Second Test User");
   }
+
   
 
 }


Reply via email to