001    package org.apache.tapestry.services.impl;
002    
003    import org.apache.tapestry.IRequestCycle;
004    import org.apache.tapestry.asset.AssetFactory;
005    import org.apache.tapestry.markup.MarkupWriterSource;
006    import org.apache.tapestry.services.RequestLocaleManager;
007    import org.apache.tapestry.services.ResponseBuilder;
008    import org.apache.tapestry.services.ResponseContributor;
009    import org.apache.tapestry.web.WebRequest;
010    import org.apache.tapestry.web.WebResponse;
011    
012    import java.io.IOException;
013    
014    /**
015     * Implementation of prototype javascript library XHR request sniffer.
016     */
017    public class PrototypeResponseContributorImpl implements ResponseContributor {
018    
019        public static final String PROTOTYPE_HEADER = "X-Prototype-Version";
020    
021        private RequestLocaleManager _localeManager;
022        private MarkupWriterSource _markupWriterSource;
023        private WebResponse _webResponse;
024        private WebRequest _webRequest;
025        private AssetFactory _assetFactory;
026    
027        /**
028         * {@inheritDoc}
029         */
030        public ResponseBuilder createBuilder(IRequestCycle cycle)
031                throws IOException
032        {
033            return new PrototypeResponseBuilder(cycle, _localeManager, _markupWriterSource,
034                                                _webResponse, _assetFactory, _webResponse.getNamespace());
035        }
036    
037        /**
038         * {@inheritDoc}
039         */
040        public boolean handlesResponse(IRequestCycle cycle)
041        {
042            return _webRequest.getHeader(PROTOTYPE_HEADER) != null;
043        }
044    
045        public void setLocaleManager(RequestLocaleManager localeManager)
046        {
047            _localeManager = localeManager;
048        }
049    
050        public void setMarkupWriterSource(MarkupWriterSource markupWriterSource)
051        {
052            _markupWriterSource = markupWriterSource;
053        }
054    
055        public void setWebResponse(WebResponse webResponse)
056        {
057            _webResponse = webResponse;
058        }
059    
060        public void setWebRequest(WebRequest webRequest)
061        {
062            _webRequest  = webRequest;
063        }
064    
065        public void setAssetFactory(AssetFactory factory)
066        {
067            _assetFactory = factory;
068        }
069    }