Clover coverage report - CRISPY - 1.1.1
Coverage timestamp: Mi Nov 15 2006 13:09:46 CET
file stats: LOC: 136   Methods: 12
NCLOC: 79   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
MultiServiceContainerImpl.java 100% 100% 100% 100%
coverage
 1    package net.sf.crispy.server;
 2   
 3    import java.util.Hashtable;
 4    import java.util.Map;
 5   
 6    import net.sf.crispy.InvocationException;
 7   
 8    /**
 9    *
 10    * Container for the service implementation. This is a mapping from service-interface plus
 11    * a key (e.g. user key or sessionId) to the service-implementation.
 12    * The service instance exist multiple (per key). They service implementation must not be Thread safe.
 13    *
 14    * @author Linke
 15    *
 16    * @since 1.1.0
 17    */
 18    public class MultiServiceContainerImpl {
 19   
 20    private Map services = new Hashtable();
 21    private Map registerServices = new Hashtable();
 22    private ServiceCreator serviceCreator = null;
 23   
 24   
 25  1 public void setServiceCreator(ServiceCreator pvServiceCreator) {
 26  1 serviceCreator = pvServiceCreator;
 27    }
 28  18 public ServiceCreator getServiceCreator() {
 29  18 if (serviceCreator == null) {
 30  9 serviceCreator = new ServiceCreatorDefaultImpl();
 31    }
 32  18 return serviceCreator;
 33    }
 34   
 35  19 public void registerService(String pvServiceInterfaceName, String pvServiceImplName) {
 36  19 registerServices.put(pvServiceInterfaceName, pvServiceImplName);
 37    }
 38   
 39  17 public String getRegisterServiceByServiceInterfaceName(String pvServiceInterfaceName) {
 40  17 return (String) registerServices.get(pvServiceInterfaceName);
 41    }
 42   
 43  4 public String removeRegisterServiceByServiceInterfaceName(String pvServiceInterfaceName) {
 44  4 return (String) registerServices.remove(pvServiceInterfaceName);
 45    }
 46   
 47  6 public int getRegisterServiceSize() {
 48  6 return registerServices.size();
 49    }
 50   
 51    /**
 52    * Find the service impl.
 53    *
 54    * @param pvKey Is the key in a map.
 55    * @param pvServiceInterfaceName Is the key for the service impl in a map.
 56    * @return The service impl or <code>null</code>.
 57    */
 58  18 public Object getService(Object pvKey, String pvServiceInterfaceName) throws Exception {
 59  18 Map lvServiceMap = (Map) services.get(pvKey);
 60  18 if (lvServiceMap != null) {
 61  5 Object lvObject = lvServiceMap.get(pvServiceInterfaceName);
 62  5 if (lvObject != null) {
 63  1 return lvObject;
 64    } else {
 65  4 return getServiceImplAndRegisterThisServiceImpl(pvServiceInterfaceName, lvServiceMap);
 66    }
 67    } else {
 68  13 lvServiceMap = new Hashtable();
 69  13 Object lvServiceImpl = getServiceImplAndRegisterThisServiceImpl(pvServiceInterfaceName, lvServiceMap);
 70  13 services.put(pvKey, lvServiceMap);
 71  13 return lvServiceImpl;
 72    }
 73    }
 74   
 75  17 private Object getServiceImplAndRegisterThisServiceImpl(final String pvServiceInterfaceName, final Map pvServiceMap) throws Exception {
 76  17 String lvServiceImplName = getRegisterServiceByServiceInterfaceName(pvServiceInterfaceName);
 77  17 if (lvServiceImplName == null) {
 78  1 throw new InvocationException("With the name: " + pvServiceInterfaceName + " is no service register.");
 79    } else {
 80  16 Object lvServiceImpl = getServiceCreator().createService(pvServiceInterfaceName, lvServiceImplName);
 81  16 pvServiceMap.put(pvServiceInterfaceName, lvServiceImpl);
 82  16 return lvServiceImpl;
 83    }
 84    }
 85   
 86   
 87    /**
 88    * Remove the service from the container.
 89    *
 90    * @param pvKey Is the key in a map.
 91    * @param pvServiceInterfaceName Is the key for the service impl in a map.
 92    */
 93  3 public void removeService(Object pvKey, String pvServiceInterfaceName) {
 94  3 Map lvServiceMap = (Map) services.get(pvKey);
 95  3 if (lvServiceMap != null) {
 96  2 lvServiceMap.remove(pvServiceInterfaceName);
 97  2 if (lvServiceMap.size() == 0) {
 98  1 services.remove(pvKey);
 99    }
 100    }
 101    }
 102   
 103    /**
 104    * Remove all service by a key.
 105    *
 106    * @param pvKey The key to removed services.
 107    */
 108  1 public void removeAllServices(Object pvKey) {
 109  1 services.remove(pvKey);
 110    }
 111   
 112    /**
 113    * Get the size of services for a key.
 114    * @param pvKey search key
 115    * @return size of services for a key
 116    */
 117  7 public int getServiceSize(Object pvKey) {
 118  7 Map lvServiceMap = (Map) services.get(pvKey);
 119  7 if (lvServiceMap != null) {
 120  6 return lvServiceMap.size();
 121    } else {
 122  1 return 0;
 123    }
 124    }
 125   
 126    /**
 127    * Size of services in the container.
 128    * @return Size of services.
 129    */
 130  13 public int getKeySize() {
 131  13 return services.size();
 132    }
 133   
 134   
 135   
 136    }