Clover coverage report - Code Coverage for tapestry release 4.0-beta-12
Coverage timestamp: Sun Oct 30 2005 16:22:01 EST
file stats: LOC: 177   Methods: 13
NCLOC: 110   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
RequestCycleFactoryImpl.java 70% 90.6% 100% 89.1%
coverage coverage
 1    // Copyright 2004, 2005 The Apache Software Foundation
 2    //
 3    // Licensed under the Apache License, Version 2.0 (the "License");
 4    // you may not use this file except in compliance with the License.
 5    // You may obtain a copy of the License at
 6    //
 7    // http://www.apache.org/licenses/LICENSE-2.0
 8    //
 9    // Unless required by applicable law or agreed to in writing, software
 10    // distributed under the License is distributed on an "AS IS" BASIS,
 11    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 12    // See the License for the specific language governing permissions and
 13    // limitations under the License.
 14   
 15    package org.apache.tapestry.services.impl;
 16   
 17    import java.util.Iterator;
 18   
 19    import javax.servlet.http.HttpServletRequest;
 20    import javax.servlet.http.HttpServletResponse;
 21   
 22    import org.apache.hivemind.ErrorHandler;
 23    import org.apache.tapestry.IEngine;
 24    import org.apache.tapestry.IRequestCycle;
 25    import org.apache.tapestry.Tapestry;
 26    import org.apache.tapestry.engine.IMonitor;
 27    import org.apache.tapestry.engine.IMonitorFactory;
 28    import org.apache.tapestry.engine.RequestCycle;
 29    import org.apache.tapestry.engine.RequestCycleEnvironment;
 30    import org.apache.tapestry.engine.ServiceEncoder;
 31    import org.apache.tapestry.engine.ServiceEncodingImpl;
 32    import org.apache.tapestry.record.PropertyPersistenceStrategySource;
 33    import org.apache.tapestry.request.RequestContext;
 34    import org.apache.tapestry.services.AbsoluteURLBuilder;
 35    import org.apache.tapestry.services.Infrastructure;
 36    import org.apache.tapestry.services.RequestCycleFactory;
 37    import org.apache.tapestry.services.ServiceConstants;
 38    import org.apache.tapestry.util.QueryParameterMap;
 39    import org.apache.tapestry.web.WebRequest;
 40   
 41    /**
 42    * Service that creates instances of {@link org.apache.tapestry.IRequestCycle}on behalf of an
 43    * engine.
 44    *
 45    * @author Howard M. Lewis Ship
 46    * @since 4.0
 47    */
 48    public class RequestCycleFactoryImpl implements RequestCycleFactory
 49    {
 50    private ServiceEncoder[] _encoders;
 51   
 52    private IMonitorFactory _monitorFactory;
 53   
 54    private PropertyPersistenceStrategySource _strategySource;
 55   
 56    private ErrorHandler _errorHandler;
 57   
 58    private Infrastructure _infrastructure;
 59   
 60    private AbsoluteURLBuilder _absoluteURLBuilder;
 61   
 62    private RequestCycleEnvironment _environment;
 63   
 64    private HttpServletRequest _servletRequest;
 65   
 66    private HttpServletResponse _servletResponse;
 67   
 68  39 public void initializeService()
 69    {
 70  39 RequestContext context = new RequestContext(_servletRequest, _servletResponse);
 71   
 72  39 _environment = new RequestCycleEnvironment(_errorHandler, _infrastructure, context,
 73    _strategySource, _absoluteURLBuilder);
 74    }
 75   
 76  123 public IRequestCycle newRequestCycle(IEngine engine)
 77    {
 78  123 WebRequest request = _infrastructure.getRequest();
 79   
 80  123 IMonitor monitor = _monitorFactory.createMonitor(request);
 81   
 82  123 QueryParameterMap parameters = extractParameters(request);
 83   
 84  123 decodeParameters(request.getActivationPath(), request.getPathInfo(), parameters);
 85   
 86  123 String serviceName = findService(parameters);
 87   
 88  123 return new RequestCycle(engine, parameters, serviceName, monitor, _environment);
 89    }
 90   
 91  123 private String findService(QueryParameterMap parameters)
 92    {
 93  123 String serviceName = parameters.getParameterValue(ServiceConstants.SERVICE);
 94   
 95  123 return serviceName == null ? Tapestry.HOME_SERVICE : serviceName;
 96    }
 97   
 98    /**
 99    * Constructs a {@link org.apache.tapestry.util.QueryParameterMap}using the parameters
 100    * available from the {@link org.apache.tapestry.request.RequestContext} (but ignoring any
 101    * file upload parameters!).
 102    */
 103   
 104  123 private QueryParameterMap extractParameters(WebRequest request)
 105    {
 106  123 QueryParameterMap result = new QueryParameterMap();
 107   
 108  123 Iterator i = request.getParameterNames().iterator();
 109   
 110  123 while (i.hasNext())
 111    {
 112  355 String name = (String) i.next();
 113   
 114  355 String[] values = request.getParameterValues(name);
 115   
 116  355 if (values.length == 1)
 117  332 result.setParameterValue(name, values[0]);
 118    else
 119  23 result.setParameterValues(name, values);
 120    }
 121   
 122  123 return result;
 123    }
 124   
 125  123 private void decodeParameters(String servletPath, String pathInfo, QueryParameterMap map)
 126    {
 127  123 ServiceEncodingImpl se = new ServiceEncodingImpl(servletPath, pathInfo, map);
 128   
 129  123 for (int i = 0; i < _encoders.length; i++)
 130    {
 131  0 _encoders[i].decode(se);
 132   
 133  0 if (se.isModified())
 134  0 return;
 135    }
 136    }
 137   
 138  39 public void setEncoders(ServiceEncoder[] encoders)
 139    {
 140  39 _encoders = encoders;
 141    }
 142   
 143  39 public void setMonitorFactory(IMonitorFactory monitorFactory)
 144    {
 145  39 _monitorFactory = monitorFactory;
 146    }
 147   
 148  39 public void setStrategySource(PropertyPersistenceStrategySource strategySource)
 149    {
 150  39 _strategySource = strategySource;
 151    }
 152   
 153  39 public void setErrorHandler(ErrorHandler errorHandler)
 154    {
 155  39 _errorHandler = errorHandler;
 156    }
 157   
 158  39 public void setInfrastructure(Infrastructure infrastructure)
 159    {
 160  39 _infrastructure = infrastructure;
 161    }
 162   
 163  39 public void setAbsoluteURLBuilder(AbsoluteURLBuilder absoluteURLBuilder)
 164    {
 165  39 _absoluteURLBuilder = absoluteURLBuilder;
 166    }
 167   
 168  39 public void setServletRequest(HttpServletRequest servletRequest)
 169    {
 170  39 _servletRequest = servletRequest;
 171    }
 172   
 173  39 public void setServletResponse(HttpServletResponse servletResponse)
 174    {
 175  39 _servletResponse = servletResponse;
 176    }
 177    }