Author: scottbw
Date: Mon Jun 28 12:38:36 2010
New Revision: 958556
URL: http://svn.apache.org/viewvc?rev=958556&view=rev
Log:
Applying patch to fix issue with Widgets REST API; see WOOKIE-144. Thanks to
Randy Watler for the patch. Some changes made to better support published API,
including updated functional tests
Modified:
incubator/wookie/branches/pluggablepersistence/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java
incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/controller/WidgetsController.java
Modified:
incubator/wookie/branches/pluggablepersistence/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java
URL:
http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java?rev=958556&r1=958555&r2=958556&view=diff
==============================================================================
---
incubator/wookie/branches/pluggablepersistence/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java
(original)
+++
incubator/wookie/branches/pluggablepersistence/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java
Mon Jun 28 12:38:36 2010
@@ -96,13 +96,13 @@ public class WidgetsControllerTest exten
fail("get failed");
}
}
-
+
// We expect a valid response, just no actual widgets
@Test
- public void getWidgetType_noneexistant(){
+ public void getWidgetType_empty(){
try {
HttpClient client = new HttpClient();
- GetMethod get = new
GetMethod(TEST_WIDGETS_SERVICE_URL_VALID+"/nosuchtype");
+ GetMethod get = new
GetMethod(TEST_WIDGETS_SERVICE_URL_VALID+"/games");
client.executeMethod(get);
int code = get.getStatusCode();
assertEquals(200,code);
@@ -116,4 +116,21 @@ public class WidgetsControllerTest exten
}
}
+ // resource doesn't match either a widget.id or a
widgetservice.servicename
+ @Test
+ public void getWidgetType_noneexistant(){
+ try {
+ HttpClient client = new HttpClient();
+ GetMethod get = new
GetMethod(TEST_WIDGETS_SERVICE_URL_VALID+"/nosuchtype");
+ client.executeMethod(get);
+ int code = get.getStatusCode();
+ assertEquals(404,code);
+ get.releaseConnection();
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ fail("get failed");
+ }
+ }
+
}
Modified:
incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/controller/WidgetsController.java
URL:
http://svn.apache.org/viewvc/incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/controller/WidgetsController.java?rev=958556&r1=958555&r2=958556&view=diff
==============================================================================
---
incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/controller/WidgetsController.java
(original)
+++
incubator/wookie/branches/pluggablepersistence/src/org/apache/wookie/controller/WidgetsController.java
Mon Jun 28 12:38:36 2010
@@ -23,6 +23,7 @@ import javax.servlet.http.HttpServletRes
import org.apache.wookie.beans.IWidget;
import org.apache.wookie.beans.IWidgetDefault;
+import org.apache.wookie.beans.IWidgetService;
import org.apache.wookie.beans.util.IPersistenceManager;
import org.apache.wookie.beans.util.PersistenceManagerFactory;
import org.apache.wookie.exceptions.ResourceNotFoundException;
@@ -69,13 +70,25 @@ public class WidgetsController extends C
* @see org.apache.wookie.controller.Controller#show(java.lang.String,
javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
protected void show(String resourceId, HttpServletRequest request,
- HttpServletResponse response) throws
ResourceNotFoundException, IOException {
- if (!isAnInteger(resourceId)){
+ HttpServletResponse response) throws
ResourceNotFoundException, IOException {
+ // support "all" queries
+ if ((resourceId == null) || resourceId.equals("")){
index(resourceId, request, response);
return;
}
+ // attempt to get specific widget by id
IPersistenceManager persistenceManager =
PersistenceManagerFactory.getPersistenceManager();
IWidget widget = persistenceManager.findById(IWidget.class,
resourceId);
+ // support queries by type
+ if (widget == null) {
+ IWidgetService[] services =
persistenceManager.findByValue(IWidgetService.class, "serviceName", resourceId);
+ if (services != null && services.length == 1) {
+ IWidget[] widgets =
persistenceManager.findWidgetsByType(resourceId);
+
returnXml(WidgetHelper.createXMLWidgetsDocument(widgets, getLocalPath(request),
getLocales(request)),response);
+ return;
+ }
+ }
+ // return widget result
if (widget == null) throw new ResourceNotFoundException();
returnXml(WidgetHelper.createXMLWidgetsDocument(widget,
getLocalPath(request), getLocales(request)),response);
}