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);
        }       


Reply via email to