Coverage Report - com.sourceforge.jpatterns.core.configuration.model.JPatternsConfigBaseBean
 
Classes in this File Line Coverage Branch Coverage Complexity
JPatternsConfigBaseBean
100% 
100% 
0
 
 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  5
     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  1277
     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  1277
     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  
     public JPatternsConfigBaseBean()
 71  
     {
 72  1277
         super();
 73  1277
     }
 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  
     public void setBusinessItems(Map<String, Map<String, Map<String, Map<String, CastorNameScopePriorityType>>>> businessItems)
 84  
     {
 85  10
         InputArgumentUtils.checkObjects(businessItems);
 86  5
         m_businessItems = businessItems;
 87  5
     }
 88  
 
 89  
     /**
 90  
      * Tested here <code>com.sourceforge.jpatterns.core.configuration.model.JPatternsConfigBaseBeanTest#testSetGetBusinessItems()</code>
 91  
      *
 92  
      * @return the business items storage
 93  
      */
 94  
     public Map<String, Map<String, Map<String, Map<String, CastorNameScopePriorityType>>>> getBusinessItems()
 95  
     {
 96  50
         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  
     public void setSectionItems(Map<String, Map<String, CastorSectionType>> sectionItems)
 108  
     {
 109  10
         InputArgumentUtils.checkObjects(sectionItems);
 110  5
         m_sectionItems = sectionItems;
 111  5
     }
 112  
 
 113  
     /**
 114  
      * Tested here: com.sourceforge.jpatterns.core.configuration.model.JPatternsConfigBaseBeanTest#testSetGetSectionItems()
 115  
      *
 116  
      * @return the section items storage
 117  
      */
 118  
     public Map<String, Map<String, CastorSectionType>> getSectionItems()
 119  
     {
 120  1217
         return m_sectionItems;
 121  
     }
 122  
 
 123  
     /**
 124  
      * @return another representation of the section items - the List of the <code>CastorSectionType</code> objects.
 125  
      */
 126  
     public List<CastorSectionType> getListOfSectionItems()
 127  
     {
 128  2037
         final List<CastorSectionType> result = new ArrayList<CastorSectionType>();
 129  2037
         for (String scope : m_sectionItems.keySet())
 130  
         {
 131  1105
             for (String sectionName : m_sectionItems.get(scope).keySet())
 132  
             {
 133  1900
                 result.add(m_sectionItems.get(scope).get(sectionName));
 134  1900
             }
 135  1105
         }
 136  
 
 137  2037
         return result;
 138  
     }
 139  
 
 140  
     /**
 141  
      * @see com.zmicer.utils.model.ICheckable#check()
 142  
      */
 143  
     public boolean check()
 144  
     {
 145  21015
         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  
     public CastorNameScopePriorityType getBusinessItem(final String sectionScope, final String sectionName, final String itemScope,
 162  
         final String itemName)
 163  
     {
 164  7216
         InputArgumentUtils.checkStrings(true, sectionScope, sectionName, itemScope, itemName);
 165  7216
         ObjectStateUtils.strongCheck(this);
 166  
         try
 167  
         {
 168  7216
             return m_businessItems.get(sectionScope).get(sectionName).get(itemScope).get(itemName);
 169  
         }
 170  3770
         catch (NullPointerException npe)
 171  
         {
 172  
             // just catch
 173  
         }
 174  3770
         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  
     public void setBusinessItem(final String sectionScope, final String sectionName, final CastorNameScopePriorityType item)
 191  
     {
 192  6540
         InputArgumentUtils.checkObjects(item);
 193  6530
         InputArgumentUtils.checkStrings(true, sectionScope, sectionName, item.getName(), item.getScope());
 194  6505
         ObjectStateUtils.strongCheck(this);
 195  6505
         if (null == m_businessItems.get(sectionScope))
 196  
         {
 197  1170
             m_businessItems.put(sectionScope, new HashMap<String, Map<String, Map<String, CastorNameScopePriorityType>>>());
 198  
         }
 199  6505
         if (null == m_businessItems.get(sectionScope).get(sectionName))
 200  
         {
 201  2410
             m_businessItems.get(sectionScope).put(sectionName, new HashMap<String, Map<String, CastorNameScopePriorityType>>());
 202  
         }
 203  6505
         if (null == m_businessItems.get(sectionScope).get(sectionName).get(item.getScope()))
 204  
         {
 205  3750
             m_businessItems.get(sectionScope).get(sectionName).put(item.getScope(), new HashMap<String, CastorNameScopePriorityType>());
 206  
         }
 207  6505
         m_businessItems.get(sectionScope).get(sectionName).get(item.getScope()).put(item.getName(), item);
 208  6505
     }
 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  
     public CastorSectionType getSection(final String scope, final String sectionName)
 219  
     {
 220  2739
         InputArgumentUtils.checkStrings(true, scope, sectionName);
 221  2739
         ObjectStateUtils.strongCheck(this);
 222  2739
         if (null != m_sectionItems.get(scope))
 223  
         {
 224  1564
             return m_sectionItems.get(scope).get(sectionName);
 225  
         }
 226  
 
 227  1175
         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  
     public void setSection(final String scope, final CastorSectionType section)
 238  
     {
 239  2570
         InputArgumentUtils.checkObjects(section);
 240  2560
         InputArgumentUtils.checkStrings(true, scope, section.getName());
 241  2550
         ObjectStateUtils.strongCheck(this);
 242  2550
         if (null == m_sectionItems.get(scope))
 243  
         {
 244  1180
             m_sectionItems.put(scope, new HashMap<String, CastorSectionType>());
 245  
         }
 246  2550
         m_sectionItems.get(scope).put(section.getName(), section);
 247  2550
     }
 248  
 }