Clover coverage report - Code Coverage for tapestry release 4.0-beta-9
Coverage timestamp: Sat Oct 1 2005 08:36:20 EDT
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  41 public void initializeService()
 69    {
 70  41 RequestContext context = new RequestContext(_servletRequest, _servletResponse);
 71   
 72  41 _environment = new RequestCycleEnvironment(_errorHandler, _infrastructure, context,
 73    _strategySource, _absoluteURLBuilder);
 74    }
 75   
 76  133 public IRequestCycle newRequestCycle(IEngine engine)
 77    {
 78  133 WebRequest request = _infrastructure.getRequest();
 79   
 80  133 IMonitor monitor = _monitorFactory.createMonitor(request);
 81   
 82  133 QueryParameterMap parameters = extractParameters(request);
 83   
 84  133 decodeParameters(request.getActivationPath(), parameters);
 85   
 86  133 String serviceName = findService(parameters);
 87   
 88  133 return new RequestCycle(engine, parameters, serviceName, monitor, _environment);
 89    }
 90   
 91  133 private String findService(QueryParameterMap parameters)
 92    {
 93  133 String serviceName = parameters.getParameterValue(ServiceConstants.SERVICE);
 94   
 95  133 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  133 private QueryParameterMap extractParameters(WebRequest request)
 105    {
 106  133 QueryParameterMap result = new QueryParameterMap();
 107   
 108  133 Iterator i = request.getParameterNames().iterator();
 109   
 110  133 while (i.hasNext())
 111    {
 112  377 String name = (String) i.next();
 113   
 114  377 String[] values = request.getParameterValues(name);
 115   
 116  377 if (values.length == 1)
 117  354 result.setParameterValue(name, values[0]);
 118    else
 119  23 result.setParameterValues(name, values);
 120    }
 121   
 122  133 return result;
 123    }
 124   
 125  133 private void decodeParameters(String servletPath, QueryParameterMap map)
 126    {
 127  133 ServiceEncodingImpl se = new ServiceEncodingImpl(servletPath, map);
 128   
 129  133 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  41 public void setEncoders(ServiceEncoder[] encoders)
 139    {
 140  41 _encoders = encoders;
 141    }
 142   
 143  41 public void setMonitorFactory(IMonitorFactory monitorFactory)
 144    {
 145  41 _monitorFactory = monitorFactory;
 146    }
 147   
 148  41 public void setStrategySource(PropertyPersistenceStrategySource strategySource)
 149    {
 150  41 _strategySource = strategySource;
 151    }
 152   
 153  41 public void setErrorHandler(ErrorHandler errorHandler)
 154    {
 155  41 _errorHandler = errorHandler;
 156    }
 157   
 158  41 public void setInfrastructure(Infrastructure infrastructure)
 159    {
 160  41 _infrastructure = infrastructure;
 161    }
 162   
 163  41 public void setAbsoluteURLBuilder(AbsoluteURLBuilder absoluteURLBuilder)
 164    {
 165  41 _absoluteURLBuilder = absoluteURLBuilder;
 166    }
 167   
 168  41 public void setServletRequest(HttpServletRequest servletRequest)
 169    {
 170  41 _servletRequest = servletRequest;
 171    }
 172   
 173  41 public void setServletResponse(HttpServletResponse servletResponse)
 174    {
 175  41 _servletResponse = servletResponse;
 176    }
 177    }