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