package org.limewire.rest; import java.io.IOException; import java.util.Date; import org.apache.http.HttpEntity; import org.apache.http.HttpException; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.nio.protocol.NHttpRequestHandler; import org.apache.http.protocol.HttpContext; import com.google.inject.Inject; import com.google.inject.Provider; /** * Default implementation for RestRequestHandlerFactory. */ class RestRequestHandlerFactoryImpl implements RestRequestHandlerFactory { private final Provider<LibraryRequestHandler> libraryHandlerFactory; private final Provider<SearchRequestHandler> searchHandlerFactory; private final Provider<DownloadRequestHandler> downloadHandlerFactory; private final Provider<StreamRequestHandler> streamHandlerFactory; /** * Constructs a request handler factory using the specified services. */ @Inject public RestRequestHandlerFactoryImpl( Provider<LibraryRequestHandler> libraryHandlerFactory, Provider<SearchRequestHandler> searchHandlerFactory, Provider<DownloadRequestHandler> downloadHandlerFactory, Provider<StreamRequestHandler> streamHandlerFactory) { this.libraryHandlerFactory = libraryHandlerFactory; this.searchHandlerFactory = searchHandlerFactory; this.downloadHandlerFactory = downloadHandlerFactory; this.streamHandlerFactory = streamHandlerFactory; } @Override public NHttpRequestHandler createRequestHandler(RestPrefix restTarget) { switch (restTarget) { case HELLO: return new HelloRequestHandler(); case LIBRARY: return libraryHandlerFactory.get(); case SEARCH: return searchHandlerFactory.get(); case DOWNLOAD: return downloadHandlerFactory.get(); case STREAM: return streamHandlerFactory.get(); default: return new UnknownRequestHandler(); } } /** * Request handler for "hello world" service. */ private static class HelloRequestHandler extends AbstractRestRequestHandler { @Override public void handle(HttpRequest request, HttpResponse response, HttpContext context) throws HttpException, IOException { if (RestUtils.GET.equals(request.getRequestLine().getMethod())) { // Set entity and status in response. Date dateTime = new Date(System.currentTimeMillis()); HttpEntity entity = RestUtils.createStringEntity(dateTime.toString() + ": Hello world!"); response.setEntity(entity); response.setStatusCode(HttpStatus.SC_OK); } else { response.setStatusCode(HttpStatus.SC_NOT_IMPLEMENTED); } } } /** * Request handler for an unknown service. */ private static class UnknownRequestHandler extends AbstractRestRequestHandler { @Override public void handle(HttpRequest request, HttpResponse response, HttpContext context) throws HttpException, IOException { response.setStatusCode(HttpStatus.SC_NOT_IMPLEMENTED); } } }