001    // Copyright May 8, 2006 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    //     http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    package org.apache.tapestry.services.impl;
015    
016    import org.apache.tapestry.IRequestCycle;
017    import org.apache.tapestry.asset.AssetFactory;
018    import org.apache.tapestry.engine.IEngineService;
019    import org.apache.tapestry.markup.MarkupWriterSource;
020    import org.apache.tapestry.services.RequestLocaleManager;
021    import org.apache.tapestry.services.ResponseBuilder;
022    import org.apache.tapestry.services.ResponseContributor;
023    import org.apache.tapestry.web.WebRequest;
024    import org.apache.tapestry.web.WebResponse;
025    
026    import java.io.IOException;
027    import java.util.ArrayList;
028    import java.util.List;
029    
030    
031    /**
032     * Handles determining dojo ajax requests.
033     * 
034     * @author jkuhnert
035     */
036    public class DojoAjaxResponseContributorImpl implements ResponseContributor
037    {
038        public static final String DOJO_AJAX_HEADER = "dojo-ajax-request";
039        
040        private RequestLocaleManager _localeManager;
041        
042        private MarkupWriterSource _markupWriterSource;
043        
044        private WebResponse _webResponse;
045        
046        private WebRequest _webRequest;
047        
048        private String _exceptionPageName;
049        
050        private String _staleSessionPageName;
051        
052        private String _staleLinkPageName;
053        
054        private AssetFactory _assetFactory;
055        
056        private IEngineService _pageService;
057        
058        /** 
059         * {@inheritDoc}
060         */
061        public ResponseBuilder createBuilder(IRequestCycle cycle)
062            throws IOException
063        {
064            List errorPages = new ArrayList();
065            errorPages.add(_exceptionPageName);
066            errorPages.add(_staleSessionPageName);
067            errorPages.add(_staleLinkPageName);
068            
069            return new DojoAjaxResponseBuilder(cycle, _localeManager, 
070                    _markupWriterSource,
071                    _webResponse, errorPages, _assetFactory, 
072                    _webResponse.getNamespace(), _pageService);
073        }
074        
075        /** 
076         * {@inheritDoc}
077         */
078        public boolean handlesResponse(IRequestCycle cycle)
079        {
080            String parm = cycle.getParameter(DOJO_AJAX_HEADER);
081            
082            if (parm != null && Boolean.valueOf(parm).booleanValue())
083                return true;
084            return _webRequest.getHeader(DOJO_AJAX_HEADER) != null;
085        }
086        
087        public void setLocaleManager(RequestLocaleManager localeManager)
088        {
089            _localeManager = localeManager;
090        }
091        
092        public void setMarkupWriterSource(MarkupWriterSource markupWriterSource)
093        {
094            _markupWriterSource = markupWriterSource;
095        }
096        
097        public void setWebResponse(WebResponse webResponse)
098        {
099            _webResponse = webResponse;
100        }
101        
102        public void setWebRequest(WebRequest webRequest)
103        {
104            _webRequest  = webRequest;
105        }
106        
107        public void setExceptionPageName(String name)
108        {
109            _exceptionPageName = name;
110        }
111        
112        public void setStaleSessionPageName(String name)
113        {
114            _staleSessionPageName = name;
115        }
116        
117        public void setStaleLinkPageName(String name)
118        {
119            _staleLinkPageName = name;
120        }
121        
122        public void setAssetFactory(AssetFactory factory)
123        {
124            _assetFactory = factory;
125        }
126        
127        public void setPageService(IEngineService service)
128        {
129            _pageService = service;
130        }
131    }