Clover coverage report - Maven Clover report
Coverage timestamp: Mon Sep 3 2007 08:24:07 EEST
file stats: LOC: 248   Methods: 11
NCLOC: 111   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
JPatternsConfigBaseBean.java 100% 100% 100% 100%
coverage
 1    package com.sourceforge.jpatterns.core.configuration.model;
 2   
 3    import com.sourceforge.jpatterns.schema.CastorNameScopePriorityType;
 4    import com.sourceforge.jpatterns.schema.CastorSectionType;
 5    import com.zmicer.utils.InputArgumentUtils;
 6    import com.zmicer.utils.ObjectStateUtils;
 7    import com.zmicer.utils.model.ICheckable;
 8    import org.apache.log4j.Logger;
 9   
 10    import java.util.ArrayList;
 11    import java.util.HashMap;
 12    import java.util.List;
 13    import java.util.Map;
 14   
 15    /**
 16    * This base class defines the fields are necessary for the defining the context of one/any combination of <code>JPatternsConfig</code>
 17    * castor objects. Also it contains the utility methods could be used for the forming this fields (all of them are collections) with the
 18    * appropriate information.
 19    * <br/>
 20    * Currently there are two types of the storages: sections and business items. Both of them are necessary for us as they could be use for
 21    * the differenty purposes. E.g. A. the logically separate global configuration item (we would use the business items storage) and
 22    * B. factory configuration is represented as storage - in this case for the retrieving the "factory" pattern we would find the appropriate
 23    * section based castor object, and then the concrete implementation of the factory would retrieve the business items.
 24    * <br/>
 25    * The fields are introduced here could be extended (or modified) in the case the structure of the <code>JPatternsConfig</code> castor
 26    * object would be changed (and we would need another storages for the configuration).
 27    * <p/>
 28    * note [zmicer]: be noticed some additional infrustructure methods may be required here.
 29    * note [zmicer]: class is not done as abstract to allow the convenient testing. Also there is possibility it could be used as is somewhere.
 30    *
 31    * $Author:: zmicer $<br/>
 32    * $Rev:: 67 $<br/>
 33    * $Date:: 2007-08-28 21:37:07 #$<br/>
 34    */
 35    public class JPatternsConfigBaseBean implements ICheckable
 36    {
 37    /**
 38    * Logger instance.
 39    */
 40    final public static Logger LOG = Logger.getLogger(JPatternsConfigBaseBean.class);
 41   
 42    /**
 43    * The structure is necessary for the fast access to the necessary business items using the path. This path is as follows:
 44    * Section Scope ID/ Section ID/ Item Scope ID/ Item Name
 45    * <br/>
 46    * 1st key is the scope of the section<br/>
 47    * 2nd key is the name of the section castor object <br/>
 48    * 3rd key is the scope of the appropriate CastorNameScopePriorityType object
 49    * 4rd key is the name of the appropriate CastorNameScopePriorityType object
 50    */
 51    private Map<String, Map<String, Map<String, Map<String, CastorNameScopePriorityType>>>> m_businessItems =
 52    new HashMap<String, Map<String, Map<String, Map<String, CastorNameScopePriorityType>>>>();
 53   
 54    /**
 55    * This structure stores the configuration related to the "section based" castor objects used at the JPatterns framework (these types
 56    * base on the <code>CastorSectionType</code> base castor type).
 57    * <br/>
 58    * This structure allows us to access the appropriate <code>CastorSectionType</code> object using two keys:<br/>
 59    * 1st key is the scope name,<br/>
 60    * 2nd kays is the name of the appropriate section
 61    */
 62    private Map<String, Map<String, CastorSectionType>> m_sectionItems =
 63    new HashMap<String, Map<String, CastorSectionType>>();
 64   
 65    /**
 66    * Default public constructor.
 67    * <br/>
 68    * Is tested at the setup method
 69    */
 70  265 public JPatternsConfigBaseBean()
 71    {
 72  265 super();
 73    }
 74   
 75    /**
 76    * Set the new value for the business items.
 77    * <br/>
 78    * Tested here <code>com.sourceforge.jpatterns.core.configuration.model.JPatternsConfigBaseBeanTest#testSetGetBusinessItems()</code>
 79    *
 80    * @param businessItems the new value for the business items storage.
 81    * Can not be null (otherwise <code>IllegalArgumentException</code> would appear).
 82    */
 83  2 public void setBusinessItems(Map<String, Map<String, Map<String, Map<String, CastorNameScopePriorityType>>>> businessItems)
 84    {
 85  2 InputArgumentUtils.checkObjects(businessItems);
 86  1 m_businessItems = businessItems;
 87    }
 88   
 89    /**
 90    * Tested here <code>com.sourceforge.jpatterns.core.configuration.model.JPatternsConfigBaseBeanTest#testSetGetBusinessItems()</code>
 91    *
 92    * @return the business items storage
 93    */
 94  10 public Map<String, Map<String, Map<String, Map<String, CastorNameScopePriorityType>>>> getBusinessItems()
 95    {
 96  10 return m_businessItems;
 97    }
 98   
 99    /**
 100    * Set the new value for the section items
 101    * <br/>
 102    * Tested here: com.sourceforge.jpatterns.core.configuration.model.JPatternsConfigBaseBeanTest#testSetGetSectionItems()
 103    *
 104    * @param sectionItems the section items storage
 105    * Can not be null (otherwise <code>IllegalArgumentException</code> would appear).
 106    */
 107  2 public void setSectionItems(Map<String, Map<String, CastorSectionType>> sectionItems)
 108    {
 109  2 InputArgumentUtils.checkObjects(sectionItems);
 110  1 m_sectionItems = sectionItems;
 111    }
 112   
 113    /**
 114    * Tested here: com.sourceforge.jpatterns.core.configuration.model.JPatternsConfigBaseBeanTest#testSetGetSectionItems()
 115    *
 116    * @return the section items storage
 117    */
 118  253 public Map<String, Map<String, CastorSectionType>> getSectionItems()
 119    {
 120  253 return m_sectionItems;
 121    }
 122   
 123    /**
 124    * @return another representation of the section items - the List of the <code>CastorSectionType</code> objects.
 125    */
 126  425 public List<CastorSectionType> getListOfSectionItems()
 127    {
 128  425 final List<CastorSectionType> result = new ArrayList<CastorSectionType>();
 129  425 for (String scope : m_sectionItems.keySet())
 130    {
 131  229 for (String sectionName : m_sectionItems.get(scope).keySet())
 132    {
 133  388 result.add(m_sectionItems.get(scope).get(sectionName));
 134    }
 135    }
 136   
 137  425 return result;
 138    }
 139   
 140    /**
 141    * @see com.zmicer.utils.model.ICheckable#check()
 142    */
 143  4253 public boolean check()
 144    {
 145  4253 return (null != m_businessItems && null != m_sectionItems);
 146    }
 147   
 148    /**
 149    * Get the business item - the instance of the CastorNameScopePriorityType class.
 150    * <br/>
 151    * Tested here: com.sourceforge.jpatterns.core.configuration.model.JPatternsConfigBaseBeanTest#testSetGetBusinessItem()
 152    *
 153    * @param sectionScope section scope id. Can not be null (otherwise <code>IllegalArgumentException</code> would appear).
 154    * @param sectionName section name. Can not be null (otherwise <code>IllegalArgumentException</code> would appear).
 155    * @param itemScope item scope. Can not be null (otherwise <code>IllegalArgumentException</code> would appear).
 156    * @param itemName business item name. Can not be null (otherwise <code>IllegalArgumentException</code> would appear).
 157    *
 158    * @return the appropriate <code>CastorNameScopePriorityType</code> castor object or the <code>null</code> in the case
 159    * the provided path (these three keys) do not point to the real castor object.
 160    */
 161  1452 public CastorNameScopePriorityType getBusinessItem(final String sectionScope, final String sectionName, final String itemScope,
 162    final String itemName)
 163    {
 164  1452 InputArgumentUtils.checkStrings(true, sectionScope, sectionName, itemScope, itemName);
 165  1452 ObjectStateUtils.strongCheck(this);
 166  1452 try
 167    {
 168  1452 return m_businessItems.get(sectionScope).get(sectionName).get(itemScope).get(itemName);
 169    }
 170    catch (NullPointerException npe)
 171    {
 172    // just catch
 173    }
 174  762 return null;
 175    }
 176   
 177    /**
 178    * Set the provided business item using the provided path. In the case some parts of the path are not constructed yet - they would be
 179    * constructed (new maps would be created). In the case another business items has been already stored under the same path -
 180    * it would be replaced by this one.
 181    * <br/>
 182    * tested here:com.sourceforge.jpatterns.core.configuration.model.JPatternsConfigBaseBeanTest#testSetGetBusinessItem()
 183    *
 184    * @param sectionScope sectionScope name. Can not be null (otherwise <code>IllegalArgumentException</code> would appear).
 185    * @param sectionName section name. Can not be null (otherwise <code>IllegalArgumentException</code> would appear).
 186    * @param item the castor object to be stored. Can not be null (otherwise <code>IllegalArgumentException</code> would appear).
 187    * The item name would be get from this bean too, so <code>item.getName()</code> should not return null or empty
 188    * String (<code>IllegalArgumentException</code> would appear in this wrong case)
 189    */
 190  1316 public void setBusinessItem(final String sectionScope, final String sectionName, final CastorNameScopePriorityType item)
 191    {
 192  1316 InputArgumentUtils.checkObjects(item);
 193  1314 InputArgumentUtils.checkStrings(true, sectionScope, sectionName, item.getName(), item.getScope());
 194  1309 ObjectStateUtils.strongCheck(this);
 195  1309 if (null == m_businessItems.get(sectionScope))
 196    {
 197  242 m_businessItems.put(sectionScope, new HashMap<String, Map<String, Map<String, CastorNameScopePriorityType>>>());
 198    }
 199  1309 if (null == m_businessItems.get(sectionScope).get(sectionName))
 200    {
 201  490 m_businessItems.get(sectionScope).put(sectionName, new HashMap<String, Map<String, CastorNameScopePriorityType>>());
 202    }
 203  1309 if (null == m_businessItems.get(sectionScope).get(sectionName).get(item.getScope()))
 204    {
 205  758 m_businessItems.get(sectionScope).get(sectionName).put(item.getScope(), new HashMap<String, CastorNameScopePriorityType>());
 206    }
 207  1309 m_businessItems.get(sectionScope).get(sectionName).get(item.getScope()).put(item.getName(), item);
 208    }
 209   
 210    /**
 211    * Get the section type castor object by the pointed path (basing on the scope/section name string)
 212    *
 213    * @param scope the scope name. Can not be null (otherwise <code>IllegalArgumentException</code> would appear).
 214    * @param sectionName the section name. Can not be null (otherwise <code>IllegalArgumentException</code> would appear).
 215    *
 216    * @return the <code>CastorSectionType</code> castor object in the case of success or <code>null</code> otherwise..
 217    */
 218  557 public CastorSectionType getSection(final String scope, final String sectionName)
 219    {
 220  557 InputArgumentUtils.checkStrings(true, scope, sectionName);
 221  557 ObjectStateUtils.strongCheck(this);
 222  557 if (null != m_sectionItems.get(scope))
 223    {
 224  314 return m_sectionItems.get(scope).get(sectionName);
 225    }
 226   
 227  243 return null;
 228    }
 229   
 230    /**
 231    * Set the pointed section <code>CastorSectionType</code> castor object to the map is used for this purposes.
 232    *
 233    * @param scope the name of the scope the provided CastorSectionType castor object should belong.
 234    * Can not be null (otherwise <code>IllegalArgumentException</code> would appear).
 235    * @param section <code>CastorSectionType</code> castor object which is based for all the "section based" JPatterns configurations items
 236    */
 237  522 public void setSection(final String scope, final CastorSectionType section)
 238    {
 239  522 InputArgumentUtils.checkObjects(section);
 240  520 InputArgumentUtils.checkStrings(true, scope, section.getName());
 241  518 ObjectStateUtils.strongCheck(this);
 242  518 if (null == m_sectionItems.get(scope))
 243    {
 244  244 m_sectionItems.put(scope, new HashMap<String, CastorSectionType>());
 245    }
 246  518 m_sectionItems.get(scope).put(section.getName(), section);
 247    }
 248    }