Author: scottbw
Date: Thu Mar  1 11:25:17 2012
New Revision: 1295518

URL: http://svn.apache.org/viewvc?rev=1295518&view=rev
Log:
Added DELETE /widget/{id_or_uri} to REST API and added test cases. See 
WOOKIE-319.

Added:
    incubator/wookie/trunk/src-tests/testdata/delete-test.wgt   (with props)
Modified:
    incubator/wookie/trunk/WebContent/WEB-INF/web.xml
    
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java
    
incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java

Modified: incubator/wookie/trunk/WebContent/WEB-INF/web.xml
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/WebContent/WEB-INF/web.xml?rev=1295518&r1=1295517&r2=1295518&view=diff
==============================================================================
--- incubator/wookie/trunk/WebContent/WEB-INF/web.xml (original)
+++ incubator/wookie/trunk/WebContent/WEB-INF/web.xml Thu Mar  1 11:25:17 2012
@@ -383,6 +383,8 @@
                                
<web-resource-name>WidgetServlet</web-resource-name>
                                <url-pattern>/widgets/*</url-pattern>
                                <http-method>POST</http-method>
+                               <http-method>DELETE</http-method>
+                               <http-method>PUT</http-method>
                        </web-resource-collection>              
                        <auth-constraint>
                                <role-name>widgetadmin</role-name>

Modified: 
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java?rev=1295518&r1=1295517&r2=1295518&view=diff
==============================================================================
--- 
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java
 (original)
+++ 
incubator/wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java
 Thu Mar  1 11:25:17 2012
@@ -24,6 +24,7 @@ import org.apache.commons.httpclient.Htt
 import org.apache.commons.httpclient.HttpException;
 import org.apache.commons.httpclient.UsernamePasswordCredentials;
 import org.apache.commons.httpclient.auth.AuthScope;
+import org.apache.commons.httpclient.methods.DeleteMethod;
 import org.apache.commons.httpclient.methods.GetMethod;
 import org.apache.commons.httpclient.methods.PostMethod;
 import org.apache.commons.httpclient.methods.multipart.FilePart;
@@ -197,6 +198,77 @@ public class WidgetsControllerTest exten
          post.releaseConnection();     
        }
        
+       @Test
+       public void deleteWidgetUnauthorized() throws HttpException, 
IOException{
+    HttpClient client = new HttpClient();
+    DeleteMethod delete = new DeleteMethod(TEST_WIDGETS_SERVICE_URL_VALID + 
"/1");
+         client.executeMethod(delete);
+         assertEquals(401, delete.getStatusCode());
+         
+    //
+    // Check it wasn't deleted
+    //
+    GetMethod get = new GetMethod(TEST_WIDGETS_SERVICE_URL_VALID + "/1");
+    client.executeMethod(get);
+    assertEquals(200, get.getStatusCode());
+       }
+       
+       @Test
+       public void deleteWidgetNonexisting() throws HttpException, IOException{
+    HttpClient client = new HttpClient();
+    //
+    // Use admin credentials
+    //
+    client.getState().setCredentials(
+        new AuthScope("localhost", 8080, "wookie"),
+        new UsernamePasswordCredentials("java", "java")
+        );
+    DeleteMethod delete = new DeleteMethod(TEST_WIDGETS_SERVICE_URL_VALID + 
"/9999");
+    client.executeMethod(delete);
+    assertEquals(404, delete.getStatusCode());
+       }
+       
+       @Test
+       public void deleteWidget() throws HttpException, IOException{
+    HttpClient client = new HttpClient();
+    //
+    // Use admin credentials
+    //
+    client.getState().setCredentials(
+        new AuthScope("localhost", 8080, "wookie"),
+        new UsernamePasswordCredentials("java", "java")
+        );
+    
+    
+    //
+    // Upload widget we'll test deleting next
+    //
+    File file = new File("src-tests/testdata/delete-test.wgt");
+    assertTrue(file.exists());
+    PostMethod post = new PostMethod(TEST_WIDGETS_SERVICE_URL_VALID);
+    Part[] parts = { new FilePart(file.getName(), file) };
+    post.setRequestEntity(new MultipartRequestEntity(parts, post
+        .getParams()));
+    client.executeMethod(post);   
+    int code = post.getStatusCode();
+    assertEquals(201,code);
+    post.releaseConnection();   
+    
+    //
+    // Delete the widget
+    //
+    DeleteMethod delete = new DeleteMethod(TEST_WIDGETS_SERVICE_URL_VALID + 
"/http%3A%2F%2Fdeletetest");
+    client.executeMethod(delete);
+    assertEquals(200, delete.getStatusCode());
+    
+    //
+    // Check it was deleted
+    //
+    GetMethod get = new GetMethod(TEST_WIDGETS_SERVICE_URL_VALID + 
"/http%3A%2F%2Fdeletetest");
+    client.executeMethod(get);
+    assertEquals(404, get.getStatusCode());
+       }
+       
        /**
         * Check that when we update a widget, we don't duplicate access 
policies. See WOOKIE-273.
         * @throws HttpException

Added: incubator/wookie/trunk/src-tests/testdata/delete-test.wgt
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src-tests/testdata/delete-test.wgt?rev=1295518&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/wookie/trunk/src-tests/testdata/delete-test.wgt
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: 
incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java
URL: 
http://svn.apache.org/viewvc/incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java?rev=1295518&r1=1295517&r2=1295518&view=diff
==============================================================================
--- 
incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java 
(original)
+++ 
incubator/wookie/trunk/src/org/apache/wookie/controller/WidgetsController.java 
Thu Mar  1 11:25:17 2012
@@ -62,12 +62,6 @@ import org.apache.wookie.w3c.exceptions.
 public class WidgetsController extends Controller{
 
        private static final long serialVersionUID = 8759704878105474902L;
-       
-       @Override
-       protected void doDelete(HttpServletRequest req, HttpServletResponse 
resp)
-                       throws ServletException, IOException {
-               resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
-       }
 
        @Override
        protected void doPut(HttpServletRequest req, HttpServletResponse resp)
@@ -88,7 +82,6 @@ public class WidgetsController extends C
                        return;
                }
                
-               System.out.println("ResourceID:"+resourceId);
                IPersistenceManager persistenceManager = 
PersistenceManagerFactory.getPersistenceManager();
                IWidget widget = 
persistenceManager.findWidgetByGuid(resourceId);
                // attempt to get specific widget by id
@@ -125,6 +118,34 @@ public class WidgetsController extends C
     IWidget[] widgets = persistenceManager.findAll(IWidget.class);
                returnXml(WidgetHelper.createXMLWidgetsDocument(widgets, 
getLocalPath(request), getLocales(request)),response);
        }
+       
+  /* (non-Javadoc)
+   * @see org.apache.wookie.controller.Controller#remove(java.lang.String, 
javax.servlet.http.HttpServletRequest)
+   */
+  @Override
+  protected boolean remove(String resourceId, HttpServletRequest request)
+      throws ResourceNotFoundException, UnauthorizedAccessException,
+      InvalidParametersException {
+
+    
+    //
+    // Identify the widget to delete
+    //
+    IPersistenceManager persistenceManager = 
PersistenceManagerFactory.getPersistenceManager();
+    IWidget widget = persistenceManager.findWidgetByGuid(resourceId);
+    // attempt to get specific widget by id
+    if (widget == null) {
+      persistenceManager = PersistenceManagerFactory.getPersistenceManager();
+      widget = persistenceManager.findById(IWidget.class, resourceId);
+    }
+    
+    if (widget == null) throw new ResourceNotFoundException();
+    
+    //
+    // Delete the widget
+    //
+    return WidgetFactory.destroy(widget);
+  }
 
        /**
         * Install a new Widget by uploading and installing it


Reply via email to