package org.dcache.webdav;
import io.milton.http.AuthenticationService;
import io.milton.http.HandlerHelper;
import io.milton.http.HttpManager;
import io.milton.http.Request;
import io.milton.http.ResourceHandler;
import io.milton.http.ResourceHandlerHelper;
import io.milton.http.Response;
import io.milton.http.UrlAdapter;
import io.milton.http.exceptions.BadRequestException;
import io.milton.http.exceptions.ConflictException;
import io.milton.http.exceptions.NotAuthorizedException;
import io.milton.http.http11.Http11ResponseHandler;
import io.milton.resource.Resource;
import org.dcache.webdav.transfer.CopyFilter;
/**
* This class provides extended behaviour for Milton so it can support
* some experimental/new protocol extensions, like 3rd-party transfers.
*/
public class DcacheResourceHandlerHelper extends ResourceHandlerHelper
{
public DcacheResourceHandlerHelper(HandlerHelper handlerHelper,
UrlAdapter urlAdapter, Http11ResponseHandler responseHandler,
AuthenticationService authenticationService)
{
super(handlerHelper, urlAdapter, responseHandler, authenticationService);
}
@Override
public void process(HttpManager manager, Request request, Response response,
ResourceHandler handler) throws NotAuthorizedException,
ConflictException,
BadRequestException
{
if (CopyFilter.isRequestThirdPartyCopy(request)) {
/* Bypass check to see if file exists: our CopyFilter will handle the request */
DcacheResourceFactory factory = (DcacheResourceFactory) manager.getResourceFactory();
String url = getUrlAdapter().getUrl(request);
Resource resource = factory.getResource(null, url);
handler.processResource(manager, request, response, resource);
} else {
super.process(manager, request, response, handler);
}
}
}