1 16 package org.outerj.daisy.emailer.serverimpl; 17 18 import org.apache.avalon.framework.service.Serviceable; 19 import org.apache.avalon.framework.service.ServiceManager; 20 import org.apache.avalon.framework.service.ServiceException; 21 import org.apache.avalon.framework.activity.Initializable; 22 import org.apache.avalon.framework.activity.Disposable; 23 import org.apache.avalon.framework.logger.LogEnabled; 24 import org.apache.avalon.framework.logger.Logger; 25 import org.outerj.daisy.httpconnector.HttpConnector; 26 import org.outerj.daisy.httpconnector.DaisyUserPrincipal; 27 import org.outerj.daisy.httpconnector.HttpUtil; 28 import org.outerj.daisy.httpconnector.BadRequestException; 29 import org.outerj.daisy.repository.Repository; 30 import org.outerj.daisy.emailer.Emailer; 31 import org.mortbay.http.handler.AbstractHttpHandler; 32 import org.mortbay.http.HttpRequest; 33 import org.mortbay.http.HttpResponse; 34 import org.mortbay.http.HttpException; 35 36 import java.io.IOException ; 37 38 44 public class EmailerHttpConnector implements Serviceable, Initializable, Disposable, LogEnabled { 45 private HttpConnector httpConnector; 46 private EmailerHttpHandler httpHandler = new EmailerHttpHandler(); 47 private Logger requestErrorLogger; 48 49 public void enableLogging(Logger logger) { 50 this.requestErrorLogger = logger.getChildLogger("request-errors"); 51 } 52 53 56 public void service(ServiceManager serviceManager) throws ServiceException { 57 httpConnector = (HttpConnector)serviceManager.lookup("httpconnector"); 58 } 59 60 public void initialize() throws Exception { 61 httpConnector.addHandler(httpHandler); 62 } 63 64 public void dispose() { 65 httpConnector.removeHandler(httpHandler); 66 } 67 68 private class EmailerHttpHandler extends AbstractHttpHandler { 69 public void handle(String pathInContext, String pathParams, HttpRequest request, HttpResponse response) 70 throws HttpException, IOException { 71 String path = request.getPath(); 72 try { 73 Repository repository = ((DaisyUserPrincipal)request.getUserPrincipal()).getRepository(); 74 75 if (path.equals("/emailer")) { 76 if (request.getMethod().equals(HttpRequest.__POST)) { 77 String to = HttpUtil.getStringParam(request, "to"); 78 String subject = HttpUtil.getStringParam(request, "subject"); 79 String messageText = HttpUtil.getStringParam(request, "messageText"); 80 81 Emailer emailer = (Emailer)repository.getExtension("Emailer"); 82 emailer.send(to, subject, messageText); 83 response.commit(); 84 } else { 85 response.sendError(HttpResponse.__405_Method_Not_Allowed); 86 } 87 } 88 } catch (BadRequestException e) { 89 HttpUtil.sendCustomError(e.getMessage(), HttpResponse.__400_Bad_Request, response); 91 } catch (Throwable e) { 92 requestErrorLogger.error("Error processing request " + path, e); 93 HttpUtil.sendCustomError(e, HttpResponse.__202_Accepted, response); 94 } 95 } 96 } 97 } 98 | Popular Tags |