Clover coverage report - gsbase - 2.0.1
Coverage timestamp: Sat Jan 1 2005 12:30:02 EST
file stats: LOC: 134   Methods: 4
NCLOC: 43   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
DispatchingObjectStore.java 100% 87.5% 100% 90.9%
coverage coverage
 1    /*
 2    * Copyright (c) 1998, 2005 Gargoyle Software Inc. All rights reserved.
 3    *
 4    * Redistribution and use in source and binary forms, with or without
 5    * modification, are permitted provided that the following conditions are met:
 6    *
 7    * 1. Redistributions of source code must retain the above copyright notice,
 8    * this list of conditions and the following disclaimer.
 9    * 2. Redistributions in binary form must reproduce the above copyright notice,
 10    * this list of conditions and the following disclaimer in the documentation
 11    * and/or other materials provided with the distribution.
 12    * 3. The end-user documentation included with the redistribution, if any, must
 13    * include the following acknowledgment:
 14    *
 15    * "This product includes software developed by Gargoyle Software Inc.
 16    * (http://www.GargoyleSoftware.com/)."
 17    *
 18    * Alternately, this acknowledgment may appear in the software itself, if
 19    * and wherever such third-party acknowledgments normally appear.
 20    * 4. The name "Gargoyle Software" must not be used to endorse or promote
 21    * products derived from this software without prior written permission.
 22    * For written permission, please contact info@GargoyleSoftware.com.
 23    * 5. Products derived from this software may not be called "GSBase", nor may
 24    * "GSBase" appear in their name, without prior written permission of
 25    * Gargoyle Software Inc.
 26    *
 27    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
 28    * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 29    * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GARGOYLE
 30    * SOFTWARE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 31    * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 32    * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 33    * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 34    * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 35    * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 36    * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 37    */
 38    package com.gargoylesoftware.base.objectstore;
 39   
 40    import java.util.Collections;
 41    import java.util.Map;
 42   
 43    /**
 44    * An object store that just dispatches commands to other object stores
 45    *
 46    * @version $Revision: 1.6 $
 47    * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
 48    */
 49    public class DispatchingObjectStore extends ObjectStore {
 50   
 51    private final Map dispatchMap_;
 52    private final Map resourceFactoryMap_;
 53   
 54   
 55    /**
 56    * Create an instance. If you use this constructor then you must
 57    * override findStoreClass() since the dispatchMap has not been populated
 58    *
 59    * @param nameToResourceFactoryMap keys are names, values are the
 60    * resource factory objects that are represented by the name. This map
 61    * will be passed into any newly created ObjectStore's via the method
 62    * setResourceFactoryMap()
 63    */
 64  1 protected DispatchingObjectStore(final Map nameToResourceFactoryMap) {
 65  1 dispatchMap_ = Collections.EMPTY_MAP;
 66  1 resourceFactoryMap_ = nameToResourceFactoryMap;
 67    }
 68   
 69    /**
 70    * Create an instance
 71    * @param commandToStoreMap A map containing command to store mappings. Keys
 72    * and values must be class objects.
 73    * @param nameToResourceFactoryMap keys are names, values are the
 74    * resource factory objects that are represented by the name. This map
 75    * will be passed into any newly created ObjectStore's via the method
 76    * setResourceFactoryMap()
 77    */
 78  3 public DispatchingObjectStore( final Map commandToStoreMap,
 79    final Map nameToResourceFactoryMap ) {
 80  3 assertNotNull("commandToStoreMap", commandToStoreMap);
 81  2 assertNotNull("nameToResourceFactoryMap", nameToResourceFactoryMap);
 82   
 83  2 dispatchMap_ = commandToStoreMap;
 84  2 resourceFactoryMap_ = nameToResourceFactoryMap;
 85    }
 86   
 87   
 88    /**
 89    * Perform the dispatching.
 90    *
 91    * @param command The command to dispatch
 92    * @return The result of the command after the other store has processed it
 93    */
 94  3 protected Object executeImpl(
 95    final ObjectStoreCommand command ) {
 96   
 97  3 return findStore(command).execute(command);
 98    }
 99   
 100   
 101    /**
 102    * Find the ObjectStore for the specified command
 103    *
 104    * @param command The command for which we are finding the store
 105    * @return The object store
 106    * @throws ObjectStoreCommandNotSupportedException If we cannot find a
 107    * store for the specified command
 108    * @throws ObjectStoreException if an error occurs when finding or
 109    * creating an object store
 110    */
 111  2 protected ObjectStore findStore(
 112    final ObjectStoreCommand command )
 113    throws
 114    ObjectStoreCommandNotSupportedException,
 115    ObjectStoreException {
 116   
 117  2 final Class storeClass = (Class)dispatchMap_.get(command.getClass());
 118  2 if( storeClass == null ) {
 119  1 throw new ObjectStoreCommandNotSupportedException(command);
 120    }
 121   
 122  1 try {
 123  1 final ObjectStore store = (ObjectStore)storeClass.newInstance();
 124  1 store.setResourceFactoryMap(resourceFactoryMap_);
 125  1 return store;
 126    }
 127    catch( IllegalAccessException e ) {
 128  0 throw new ObjectStoreException(e);
 129    }
 130    catch( final InstantiationException e ) {
 131  0 throw new ObjectStoreException(e);
 132    }
 133    }
 134    }