View Javadoc

1   package com.bradmcevoy.http.http11;
2   
3   import com.bradmcevoy.http.*;
4   import com.bradmcevoy.http.exceptions.BadRequestException;
5   
6   import org.slf4j.Logger;
7   import org.slf4j.LoggerFactory;
8   
9   import com.bradmcevoy.http.Request.Method;
10  import com.bradmcevoy.http.Response.Status;
11  import com.bradmcevoy.http.exceptions.ConflictException;
12  import com.bradmcevoy.http.exceptions.NotAuthorizedException;
13  import com.ettrema.event.DeleteEvent;
14  
15  public class DeleteHandler implements ExistingEntityHandler {
16  
17      private Logger log = LoggerFactory.getLogger(DeleteHandler.class);
18      private final Http11ResponseHandler responseHandler;
19      private final HandlerHelper handlerHelper;
20      private final ResourceHandlerHelper resourceHandlerHelper;
21      private DeleteHelper deleteHelper;
22  
23      public DeleteHandler(Http11ResponseHandler responseHandler, HandlerHelper handlerHelper) {
24          this.responseHandler = responseHandler;
25          this.handlerHelper = handlerHelper;
26          this.resourceHandlerHelper = new ResourceHandlerHelper(handlerHelper, responseHandler);
27          deleteHelper = new DeleteHelperImpl(handlerHelper);
28      }
29  
30      public String[] getMethods() {
31          return new String[]{Method.DELETE.code};
32      }
33  
34      @Override
35      public boolean isCompatible(Resource handler) {
36          return (handler instanceof DeletableResource);
37      }
38  
39      @Override
40      public void process(HttpManager manager, Request request, Response response) throws NotAuthorizedException, ConflictException, BadRequestException {
41          String url = request.getAbsoluteUrl();
42          if( url.contains("#")) {
43              // See http://www.ettrema.com:8080/browse/MIL-88
44              // Litmus test thinks this is unsafe
45              throw new BadRequestException(null, "Can't delete a resource with a # in the url");
46          }
47          resourceHandlerHelper.process(manager, request, response, this);
48      }
49  
50      public void processResource(HttpManager manager, Request request, Response response, Resource r) throws NotAuthorizedException, ConflictException, BadRequestException {
51          resourceHandlerHelper.processResource(manager, request, response, r, this);
52      }
53  
54      public void processExistingResource(HttpManager manager, Request request, Response response, Resource resource) throws NotAuthorizedException, BadRequestException, ConflictException {
55          log.debug("DELETE: " + request.getAbsoluteUrl());
56  
57          DeletableResource r = (DeletableResource) resource;
58  
59          if (deleteHelper.isLockedOut(request, r)) {
60              log.info("Could not delete. Is locked");
61              responseHandler.respondDeleteFailed(request, response, r, Status.SC_LOCKED);
62              return;
63          }
64  
65          manager.getEventManager().fireEvent( new DeleteEvent( resource ) );
66          deleteHelper.delete(r);
67          log.debug("deleted ok");
68          responseHandler.respondNoContent(resource, response, request);
69  
70      }
71  
72      public DeleteHelper getDeleteHelper() {
73          return deleteHelper;
74      }
75  
76      public void setDeleteHelper(DeleteHelper deleteHelper) {
77          this.deleteHelper = deleteHelper;
78      }   
79  }