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    }