001 package railo.runtime.rest; 002 003 import java.util.List; 004 005 import javax.servlet.http.HttpServletRequest; 006 007 import railo.commons.lang.mimetype.MimeType; 008 import railo.runtime.PageContext; 009 import railo.runtime.PageSource; 010 import railo.runtime.exp.PageException; 011 import railo.runtime.listener.RequestListener; 012 import railo.runtime.type.Struct; 013 014 public class RestRequestListener implements RequestListener { 015 016 private final Mapping mapping; 017 private final String path; 018 private final int format; 019 private final Struct matrix; 020 private final Result defaultValue; 021 private Result result; 022 private final List<MimeType> accept; 023 private final MimeType contentType; 024 private final boolean hasFormatExtension; 025 026 public RestRequestListener(Mapping mapping,String path,Struct matrix,int format,boolean hasFormatExtension,List<MimeType> accept,MimeType contentType, Result defaultValue) { 027 this.mapping=mapping; 028 this.path=path; 029 this.format=format; 030 this.hasFormatExtension=hasFormatExtension; 031 this.matrix=matrix; 032 this.defaultValue=defaultValue; 033 this.accept=accept; 034 this.contentType=contentType; 035 } 036 037 @Override 038 public PageSource execute(PageContext pc, PageSource requestedPage) throws PageException { 039 result = mapping.getResult(pc, path, matrix,format,hasFormatExtension,accept,contentType, defaultValue); 040 HttpServletRequest req = pc.getHttpServletRequest(); 041 req.setAttribute("client", "railo-rest-1-0"); 042 req.setAttribute("rest-path", path); 043 req.setAttribute("rest-result", result); 044 045 if(result==null) { 046 RestUtil.setStatus(pc,404,"no rest service for ["+path+"] found in mapping ["+mapping.getVirtual()+"]"); 047 return null; 048 } 049 050 return result.getSource().getPageSource(); 051 } 052 053 /** 054 * @return the result 055 */ 056 public Result getResult() { 057 return result; 058 } 059 }