Clover coverage report - Code Coverage for tapestry release 4.0-beta-13
Coverage timestamp: Sat Nov 12 2005 13:42:12 EST
file stats: LOC: 177   Methods: 12
NCLOC: 110   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
RequestCycleFactoryImpl.java 70% 90.9% 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.RequestGlobals;
 38    import org.apache.tapestry.services.ServiceConstants;
 39    import org.apache.tapestry.util.QueryParameterMap;
 40    import org.apache.tapestry.web.WebRequest;
 41   
 42    /**
 43    * Service that creates instances of {@link org.apache.tapestry.IRequestCycle}on behalf of an
 44    * engine.
 45    *
 46    * @author Howard M. Lewis Ship
 47    * @since 4.0
 48    */
 49    public class RequestCycleFactoryImpl implements RequestCycleFactory
 50    {
 51    private ServiceEncoder[] _encoders;
 52   
 53    private IMonitorFactory _monitorFactory;
 54   
 55    private PropertyPersistenceStrategySource _strategySource;
 56   
 57    private ErrorHandler _errorHandler;
 58   
 59    private Infrastructure _infrastructure;
 60   
 61    private AbsoluteURLBuilder _absoluteURLBuilder;
 62   
 63    private RequestCycleEnvironment _environment;
 64   
 65    private RequestGlobals _requestGlobals;
 66   
 67  39 public void initializeService()
 68    {
 69  39 RequestContext context = new RequestContext(_requestGlobals.getRequest(), _requestGlobals
 70    .getResponse());
 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 IRequestCycle cycle = new RequestCycle(engine, parameters, serviceName, monitor,
 89    _environment);
 90   
 91  123 _requestGlobals.store(cycle);
 92   
 93  123 return cycle;
 94    }
 95   
 96  123 private String findService(QueryParameterMap parameters)
 97    {
 98  123 String serviceName = parameters.getParameterValue(ServiceConstants.SERVICE);
 99   
 100  123 return serviceName == null ? Tapestry.HOME_SERVICE : serviceName;
 101    }
 102   
 103    /**
 104    * Constructs a {@link org.apache.tapestry.util.QueryParameterMap}using the parameters
 105    * available from the {@link org.apache.tapestry.request.RequestContext} (but ignoring any
 106    * file upload parameters!).
 107    */
 108   
 109  123 private QueryParameterMap extractParameters(WebRequest request)
 110    {
 111  123 QueryParameterMap result = new QueryParameterMap();
 112   
 113  123 Iterator i = request.getParameterNames().iterator();
 114   
 115  123 while (i.hasNext())
 116    {
 117  355 String name = (String) i.next();
 118   
 119  355 String[] values = request.getParameterValues(name);
 120   
 121  355 if (values.length == 1)
 122  332 result.setParameterValue(name, values[0]);
 123    else
 124  23 result.setParameterValues(name, values);
 125    }
 126   
 127  123 return result;
 128    }
 129   
 130  123 private void decodeParameters(String servletPath, String pathInfo, QueryParameterMap map)
 131    {
 132  123 ServiceEncodingImpl se = new ServiceEncodingImpl(servletPath, pathInfo, map);
 133   
 134  123 for (int i = 0; i < _encoders.length; i++)
 135    {
 136  0 _encoders[i].decode(se);
 137   
 138  0 if (se.isModified())
 139  0 return;
 140    }
 141    }
 142   
 143  39 public void setEncoders(ServiceEncoder[] encoders)
 144    {
 145  39 _encoders = encoders;
 146    }
 147   
 148  39 public void setMonitorFactory(IMonitorFactory monitorFactory)
 149    {
 150  39 _monitorFactory = monitorFactory;
 151    }
 152   
 153  39 public void setStrategySource(PropertyPersistenceStrategySource strategySource)
 154    {
 155  39 _strategySource = strategySource;
 156    }
 157   
 158  39 public void setErrorHandler(ErrorHandler errorHandler)
 159    {
 160  39 _errorHandler = errorHandler;
 161    }
 162   
 163  39 public void setInfrastructure(Infrastructure infrastructure)
 164    {
 165  39 _infrastructure = infrastructure;
 166    }
 167   
 168  39 public void setAbsoluteURLBuilder(AbsoluteURLBuilder absoluteURLBuilder)
 169    {
 170  39 _absoluteURLBuilder = absoluteURLBuilder;
 171    }
 172   
 173  39 public void setRequestGlobals(RequestGlobals requestGlobals)
 174    {
 175  39 _requestGlobals = requestGlobals;
 176    }
 177    }