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
44
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 }