Clover coverage report - Code Coverage for tapestry release 4.0.1
Coverage timestamp: Fri Mar 31 2006 09:12:14 EST
file stats: LOC: 168   Methods: 9
NCLOC: 93   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
ServiceMapImpl.java 100% 100% 100% 100%
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.HashMap;
 18    import java.util.Iterator;
 19    import java.util.List;
 20    import java.util.Map;
 21   
 22    import org.apache.hivemind.ApplicationRuntimeException;
 23    import org.apache.hivemind.ErrorLog;
 24    import org.apache.tapestry.engine.IEngineService;
 25    import org.apache.tapestry.services.ServiceMap;
 26   
 27    /**
 28    * Implementation of {@link org.apache.tapestry.services.ServiceMap}
 29    *
 30    * @author Howard Lewis Ship
 31    * @since 4.0
 32    */
 33    public class ServiceMapImpl implements ServiceMap, EngineServiceSource
 34    {
 35    /**
 36    * List of {@link EngineServiceContribution}.
 37    */
 38    private List _applicationServices;
 39   
 40    /**
 41    * List of {@link EngineServiceContribution}.
 42    */
 43    private List _factoryServices;
 44   
 45    private ErrorLog _errorLog;
 46   
 47    /**
 48    * Map of {@link EngineServiceContribution} keyed on String name.
 49    */
 50    private Map _services;
 51   
 52    /**
 53    * Map of {@link org.apache.tapestry.services.impl.EngineServiceOuterProxy}, keyed on String
 54    * name.
 55    */
 56   
 57    private Map _proxies = new HashMap();
 58   
 59  90 public void initializeService()
 60    {
 61  90 Map factoryMap = buildServiceMap(_factoryServices);
 62  90 Map applicationMap = buildServiceMap(_applicationServices);
 63   
 64    // Add services from the applicationMap to factoryMap, overwriting
 65    // factoryMap entries with the same name.
 66   
 67  90 factoryMap.putAll(applicationMap);
 68   
 69  90 _services = factoryMap;
 70    }
 71   
 72  180 private Map buildServiceMap(List services)
 73    {
 74  180 Map result = new HashMap();
 75   
 76  180 Iterator i = services.iterator();
 77  180 while (i.hasNext())
 78    {
 79  640 EngineServiceContribution contribution = (EngineServiceContribution) i.next();
 80  640 String name = contribution.getName();
 81   
 82  640 EngineServiceContribution existing = (EngineServiceContribution) result.get(name);
 83   
 84  640 if (existing != null)
 85    {
 86  2 _errorLog.error(
 87    ImplMessages.dupeService(name, existing),
 88    existing.getLocation(),
 89    null);
 90  2 continue;
 91    }
 92   
 93  638 result.put(name, contribution);
 94    }
 95   
 96  180 return result;
 97    }
 98   
 99  566 public synchronized IEngineService getService(String name)
 100    {
 101  566 IEngineService result = (IEngineService) _proxies.get(name);
 102   
 103  566 if (result == null)
 104    {
 105  298 result = buildProxy(name);
 106  296 _proxies.put(name, result);
 107    }
 108   
 109  564 return result;
 110    }
 111   
 112  6 public boolean isValid(String name)
 113    {
 114  6 return _services.containsKey(name);
 115    }
 116   
 117    /**
 118    * This returns the actual service, not the outer proxy.
 119    */
 120   
 121  240 public IEngineService resolveEngineService(String name)
 122    {
 123  240 EngineServiceContribution contribution = (EngineServiceContribution) _services.get(name);
 124   
 125  240 if (contribution == null)
 126  2 throw new ApplicationRuntimeException(ImplMessages.noSuchService(name));
 127   
 128  238 IEngineService service = contribution.getService();
 129  238 String serviceName = service.getName();
 130   
 131  238 if (!name.equals(serviceName))
 132  2 throw new ApplicationRuntimeException(ImplMessages.serviceNameMismatch(
 133    service,
 134    name,
 135    serviceName), contribution.getLocation(), null);
 136   
 137  236 return service;
 138    }
 139   
 140  298 private IEngineService buildProxy(String name)
 141    {
 142  298 if (!_services.containsKey(name))
 143  2 throw new ApplicationRuntimeException(ImplMessages.noSuchService(name));
 144   
 145  296 EngineServiceOuterProxy outer = new EngineServiceOuterProxy(name);
 146   
 147  296 EngineServiceInnerProxy inner = new EngineServiceInnerProxy(name, outer, this);
 148   
 149  296 outer.installDelegate(inner);
 150   
 151  296 return outer;
 152    }
 153   
 154  90 public void setApplicationServices(List applicationServices)
 155    {
 156  90 _applicationServices = applicationServices;
 157    }
 158   
 159  90 public void setFactoryServices(List factoryServices)
 160    {
 161  90 _factoryServices = factoryServices;
 162    }
 163   
 164  80 public void setErrorLog(ErrorLog errorLog)
 165    {
 166  80 _errorLog = errorLog;
 167    }
 168    }