com.ibm.commerce.common.beans
Class ResourceBundleDataBean

java.lang.Object
  |
  +--com.ibm.commerce.common.beans.ResourceBundleDataBean

public class ResourceBundleDataBean
extends java.lang.Object

The ResourceBundleDataBean is used by JSPs to get information from property files. To find a property file, three parameters are needed:

  1. Property File Name The base name of the property file you want to look up. For example, "UserRegistrion" is the property file name for "UserRegistratoin_en_US.properties" or "UserRegistration_fr_FR.properties". This parameter is set by setPropertyFileName(String) method. This parameter is mandatory. If in the same lcation, there is a proeprty file with the same name plus "Text" suffix. For example, "UserRegistratoinText_en_US.properties". This file will also be read by the data bean and the result will be merged into one.
  2. Store Directory Name Different stores have their own property files but these property files might have the same property file name. To avoid conflict, each store should have a directory to store their property files. To find a property file belong to a specific store, you need to use setStoreDirectory(String) method to set the name of the directory of that store. If the store directory is set, the databean will only read property file from that directory. If the store directory is not set, the databean will first look up the property file from the store relations of the current store (STOREREL table) using store relation type ("com.ibm.commerce.propertyFiles", defined in STRELTYP table). If the property file still can not be found, the databean will look up directly from class path.
  3. Locale Locale is required to find property files of different languages. It can be set by setLocale(String) method. If Locale is not set, the databean will get the Locale from command context.

After these parameters are set and data bean is actived the informaiton in property file can be get using the follwong methods:

  1. public PropertyResourceBundle getPropertyResourceBundle()
    This method can be used for any format of property file. It returns PropertyResourceBundle object.
  2. public SortedMap getPropertySortedMap() This method is used to read from the property file with the following format and return results as a SortedMap. For example:

    If you have a property file named UserRegistration_en_US.properties, which contains the following content (The number can be anything as long as they following the ascendent order): . . . 100.Name=children 100.Label=Number Of Children 100.Displayed=yes 100.Required=no 100.Size=5 105.Name=age 105.Label=Age 105.Displayed=yes 105.Required=no 105.Options=0;Not Provided|1;10-19 years|2;20-29 years|3;30-39 years|4;40-49 years|5;50-59 years|6;60 years or older 110.Name=gender 110.Label=Gender 110.Displayed=yes 110.Required=no 110.Options=N;Not Provided|M;Male|F;Female

    Note: | -- Default Delimiter (You can use setDelimiter(String) method to set a different Delimiter) ; -- Default Separator (You can use setSeparator(String) method to set a different Separator)

  3. public Hashtable getPropertyHashtable() This method is used to read from the property file with the following format and return results as a Hashtable. The Hashtable contains many field Hastables (each field corresponding to one small hashtable).

    For example:

    If you have a property file named UserRegistration_en_US.properties, which contains the following content: . . . children.Label=Number Of Children children.Displayed=yes children.Required=no age.Label=Age age.Displayed=yes age.Required=no age.Options=0;Not Available|1;10-19 years|2;20-29 years|3;30-39 years|4;40-49 years|5;50-59 years|6;60 years or older age.Operators=>;Older than|<;Yonger than|!=;Not equal to gender.Label=Gender gender.Displayed=yes gender.Required=no gender.Options=Male|Female . . .

For example, there are two stores named store201 and store202. There are two properties files with the same name "UserRegistraion" wcstores.war/WEB-INF/classes/UserRegistration_en_US.properties wcstores.war/WEB-INF/classes/store201/UserRegistration_en_US.properties wcstores.war/WEB-INF/classes/store202/ First, creates a new ResourceBundleDataBean and sets the property file name: ResourceBundleDataBean bnResourceBundle= new ResourceBundleDataBean(); bnResourceBundle.setPropertyFileName("UserRegistration"); If current store is store201, to read property file under the store201 directory, if store directory is not set, the data bean still can find the correct property file though the store relations (if not store relations is defined for this store, the store itself will become the first store relation). if the property file is not found in this directory, the data bean will continue search "wcstores.war/WEB-INF/classes/" directory. com.ibm.commerce.beans.DataBeanManager.activate(bnResourceBundle, request); PropertyResourceBundle properties = bnResourceBundle.getPropertyResourceBundle(); Another choice is explictly specify the directory. In this way, if the property file is not found in this directory, the data bean will return null instead of continue search "wcstores.war/WEB-INF/classes/" directory. bnResourceBundle.setStoreDirectory("201"); com.ibm.commerce.beans.DataBeanManager.activate(bnResourceBundle, request); PropertyResourceBundle properties = bnResourceBundle.getPropertyResourceBundle(); If current store is store202 but it does not have its own UserRegistration property file, but it want to use the one under store201, a store relation need to be created first in STOREREL table: The STRELTYP_ID '-16' is
STRELTYP_ID RELATEDSTORE_ID STORE_ID SEQUENCE STATE ----------- --------------- ----------- ------------------------ ----------- -16 201 202 +1.00000000000000E+000 1 The STRELTYP_ID '-16' is defined in STRELTYP NAME STRELTYP_ID ------------------------------------------------------------ ----------- com.ibm.commerce.propertyFiles -16 After the store relation is created, the following code will find the property file under store201 for current store202. com.ibm.commerce.beans.DataBeanManager.activate(bnResourceBundle, request); PropertyResourceBundle properties = bnResourceBundle.getPropertyResourceBundle();

Following are sample codes showing how to use SortedMap: ResourceBundleDataBean bnResourceBundle= new ResourceBundleDataBean(); if (strProfileType != null && strProfileType.equals(ECUserConstants.EC_USER_PROFILE_BUSINESS)) bnResourceBundle.setPropertyFileName("UserRegistrationB2B"); else bnResourceBundle.setPropertyFileName("UserRegistration"); com.ibm.commerce.beans.DataBeanManager.activate(bnResourceBundle, request); SortedMap smpFields = bnResourceBundle.getPropertySortedMap(); Iterator entryIterator = smpFields.entrySet().iterator(); Map.Entry textentry = (Map.Entry) entryIterator.next(); Hashtable hshText = (Hashtable) textentry .getValue();


Field Summary
static java.lang.String CLASSNAME
          The full qualified class name.
static java.lang.String COPYRIGHT
          IBM copyright.
 
Constructor Summary
ResourceBundleDataBean()
          ResourceBundleDataBean constructor.
 
Method Summary
  CommandContext getCommandContext()
          Gets the command context of this data bean.
 java.lang.String getDelimiter()
          Gets the delimiter for the property file.
 java.util.Locale getLocale()
          Gets the Locale.
 java.lang.String getPathSeparator()
          Gets the path separator.
 java.lang.String getPropertyFileName()
          Gets the name of property file
 java.util.Hashtable getPropertyHashtable()
          Return a the content of the property file as one large Hashtable.
 java.util.Hashtable getPropertyHashtable(java.util.SortedMap atmpProperty)
          Gets the property Hashtable format form property StoredMap format.
 java.util.PropertyResourceBundle getPropertyResourceBundle()
          Returns a PropertyResourceBundle object.
 java.util.SortedMap getPropertySortedMap()
          Return a the content of the property file as one large Hashtable.
  TypedProperty getRequestProperties()
          Gets the request properties;
 java.lang.String getSeparator()
          Gets the separator for the property file.
 java.lang.String getStoreDirectory()
          Gets the name of the store directory, which is used for finding property files belong to this store.
 boolean getStoreDirectoryEnabled()
          Gets a boolean which indicates if enable getting the Store Directory from the CommandContext.
 java.util.PropertyResourceBundle getTextPropertyResourceBundle()
          Returns a PropertyResourceBundle object of the text property file.
static java.lang.String invokeGetMethod(java.lang.String astrClassName, java.lang.Object aobjAccessBean, java.lang.String astrParameterName)
          Gets a parameter from a specified accessbean.
 void populate()
          Populate the databean.
 void setCommandContext( CommandContext acommandContext)
          Sets the command context.
 void setDelimiter(java.lang.String astrDelimiter)
          Sets the delimiter for the property file.
 void setLocale(java.util.Locale alcLocale)
          Set the Locale.
 void setPathSeparator(java.lang.String astrPathSeparator)
          Sets the path separator.
 void setPropertyFileName(java.lang.String astrPropertyFileName)
          Sets the name of property file.
 void setRequestProperties( TypedProperty areqParms)
          Sets the request properties.
 void setSeparator(java.lang.String astrSeparator)
          Sets the separator for the property file.
 void setStoreDirectory(java.lang.String astrStoreDirectory)
          Sets the name of store directory, which is used as the path to the find the property file.
 void setStoreDirectoryEnabled(boolean abStoreDirectoryEnabled)
          Sets if enable getting the Store Directory from the CommandContext.
static java.lang.String toUpOneChar(java.lang.String strAttributeName)
          Input parameter: attribute name return: method name (with uppercase first character) uppercase the first character of the attribute name in order to match with the naming convention of the underlying get/set method
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail
public static final java.lang.String COPYRIGHT
IBM copyright.
See Also:
Constant Field Values

CLASSNAME

public static final java.lang.String CLASSNAME
The full qualified class name.
See Also:
Constant Field Values
Constructor Detail

ResourceBundleDataBean

public ResourceBundleDataBean()
ResourceBundleDataBean constructor.
Method Detail

getCommandContext

public CommandContext getCommandContext()
Gets the command context of this data bean.
Returns:
The command context.

getDelimiter

public java.lang.String getDelimiter()
Gets the delimiter for the property file.
Delimiter is used to separate different options. For example, in the following property definiation, age.Options=0;Not Available|1;10-19 years|2;20-29 years "|" is the delimitor.
Returns:
The delimiter for the property file

getLocale

public java.util.Locale getLocale()
Gets the Locale. The Locale will be used to find property file.
Returns:
The Locale.

getPathSeparator

public java.lang.String getPathSeparator()
Gets the path separator. path separator is used to separate the store directory and the property file name. For example: "store1/UserRegistration" "/" is the path separator.
Returns:
The path separator

getPropertyFileName

public java.lang.String getPropertyFileName()
Gets the name of property file
Returns:
The name of the property file

getPropertyHashtable

public java.util.Hashtable getPropertyHashtable()

Return a the content of the property file as one large Hashtable. This Hashtable contains many field Hastables (each field corresponding to one small hashtable).

For example:

If you have a property file named UserRegistration_en_US.properties, which contains the following content:

 . . .
 children.Label=Number Of Children
 children.Displayed=yes
 children.Required=no

 age.Label=Age
 age.Displayed=yes
 age.Required=no
 age.Options=0;Not Available|1;10-19 years|2;20-29 years|3;30-39 years|4;40-49 years|5;50-59 years|6;60 years or older
 age.Operators=>Older than|<;Yonger than|!=;Not equal to

 gender.Label=Gender
 gender.Displayed=yes
 gender.Required=no
 gender.Options=Male|Female

 text1 = User Registration

. . .

Note: | -- Default Delimiter (You can use setDelimiter(String) method to set a different Delimiter) ; -- Default Separator (You can use setSeparator(String) method to set a different Separator)

To read this file, following the following steps:

  1. Get the large hashtable:
     ResourceBundleDataBean bnResourceBundle= new ResourceBundleDataBean();
     bnResourceBundle.setPropertyFileName("UserRegistration");
     com.ibm.commerce.beans.DataBeanManager.activate(bnResourceBundle, request);
     Hashtable hshRegister = bnResourceBundle.getPropertyHashtable();
    
  2. Once you get the Hashtable, you can get small hashtable for each fields:
     Hashtable hshChildren = (Hashtable) hshRegister.get("children");
     Hashtable hshAge = (Hashtable) hshRegister.get("age");
     Hashtable hshGender = (Hashtable) hshRegister.get("gender");
    
    for the entry which only have attribute name, you can use the following code to get the value:
     String strTitle = (String) hshRegister.get("text1");
    
  3. Get attributes for each fields:
    • Text value is saved as String in field hashtable For example, the following code gets the Label for children field:
       String strChildrenLabel = (String)hshChildren.get("Label")
      
    • yes / no is saved as Boolean in field hashtable
      For example, the following code decides if childeren field should be displayed or not
       if (((Boolean)hshChildren.get("Displayed").booleanValue())
       {
        ...
       }
      
    • multiple value pairs will be store in a two dimensional String Array
      value pairs means internal value and display value, for example 0;Not Available ("0" is internal value, "Not" Available is display value) For example, the following code gets a array of all age optioins:
       String[ ][ ] ageOptions = (String[ ][ ])hshAge.get("Options");
       ageOptions[0][0] should be "0" ageOptions[0][1] should be "Not Available"
       ageOptions[1][0] should be "1" ageOptions[1][1] should be "10-19 years"
      
       If there is no separator, the internal value and display value will be same, for example
       String[ ][ ] genderOptions = (String[ ][ ])hshGender.get("Options");
       genderOptions[0][0] should be "Male" genderOptions[0][1] should be "Male"
       genderOptions[1][0] should be "Famal"  genderOptions[1][1] should be "Female"
      
Returns:
A Hasthtable which contains informaiton from the property file

getPropertyResourceBundle

public java.util.PropertyResourceBundle getPropertyResourceBundle()
Returns a PropertyResourceBundle object.
Returns:
A PropertyResourceBundle object

getTextPropertyResourceBundle

public java.util.PropertyResourceBundle getTextPropertyResourceBundle()
Returns a PropertyResourceBundle object of the text property file. The name of the text property file is the name of the property file plus "Text" suffix.
Returns:
A PropertyResourceBundle object of the text property file.

getPropertySortedMap

public java.util.SortedMap getPropertySortedMap()

Return a the content of the property file as one large Hashtable. This Hashtable contains many field Hastables (each field corresponding to one small hashtable).

For example:

If you have a property file named UserRegistration_en_US.properties, which contains the following content:

 . . .
 children.Label=Number Of Children
 children.Displayed=yes
 children.Required=no

 age.Label=Age
 age.Displayed=yes
 age.Required=no
 age.Options=0;Not Available|1;10-19 years|2;20-29 years|3;30-39 years|4;40-49 years|5;50-59 years|6;60 years or older
 age.Operators=>Older than|<;Yonger than|!=;Not equal to

 gender.Label=Gender
 gender.Displayed=yes
 gender.Required=no
 gender.Options=Male|Female

 text1 = User Registration

. . .

Note: | -- Default Delimiter (You can use setDelimiter(String) method to set a different Delimiter) ; -- Default Separator (You can use setSeparator(String) method to set a different Separator)

To read this file, following the following steps:

  1. Get the large hashtable:
     ResourceBundleDataBean bnResourceBundle= new ResourceBundleDataBean();
     bnResourceBundle.setPropertyFileName("UserRegistration");
     com.ibm.commerce.beans.DataBeanManager.activate(bnResourceBundle, request);
     Hashtable hshRegister = bnResourceBundle.getPropertyHashtable();
    
  2. Once you get the Hashtable, you can get small hashtable for each fields:
     Hashtable hshChildren = (Hashtable) hshRegister.get("children");
     Hashtable hshAge = (Hashtable) hshRegister.get("age");
     Hashtable hshGender = (Hashtable) hshRegister.get("gender");
    
    for the entry which only have attribute name, you can use the following code to get the value:
     String strTitle = (String) hshRegister.get("text1");
    
  3. Get attributes for each fields:
    • Text value is saved as String in field hashtable For example, the following code gets the Label for children field:
       String strChildrenLabel = (String)hshChildren.get("Label")
      
    • yes / no is saved as Boolean in field hashtable
      For example, the following code decides if childeren field should be displayed or not
       if (((Boolean)hshChildren.get("Displayed").booleanValue())
       {
        ...
       }
      
    • multiple value pairs will be store in a two dimensional String Array
      value pairs means internal value and display value, for example 0;Not Available ("0" is internal value, "Not" Available is display value) For example, the following code gets a array of all age optioins:
       String[ ][ ] ageOptions = (String[ ][ ])hshAge.get("Options");
       ageOptions[0][0] should be "0" ageOptions[0][1] should be "Not Available"
       ageOptions[1][0] should be "1" ageOptions[1][1] should be "10-19 years"
      
       If there is no separator, the internal value and display value will be same, for example
       String[ ][ ] genderOptions = (String[ ][ ])hshGender.get("Options");
       genderOptions[0][0] should be "Male" genderOptions[0][1] should be "Male"
       genderOptions[1][0] should be "Famal"  genderOptions[1][1] should be "Female"
      
Returns:
A Hasthtable which contains informaiton from the property file

getRequestProperties

public TypedProperty getRequestProperties()
Gets the request properties;
Returns:
The request properties;

getSeparator

public java.lang.String getSeparator()
Gets the separator for the property file.
separator is used to separate internal value and display value in a option. For example, in the following property definiation,
 age.Options=0;Not Available|1;10-19 years|2;20-29 years
"1;10-19 years" is a option, ";" is the separator. If no separator is set, the databean will use the default one: ";".
Returns:
The separator for the property file

getStoreDirectory

public java.lang.String getStoreDirectory()
Gets the name of the store directory, which is used for finding property files belong to this store.
Returns:
The name of the store directory

getStoreDirectoryEnabled

public boolean getStoreDirectoryEnabled()
Gets a boolean which indicates if enable getting the Store Directory from the CommandContext. true - If Store Directory is not set, the databean will get from CommandContext false - The databean will never get the Store Directory from CommandContext
Returns:
A boolean value indicating if getting the Store Directory from the CommandContext

invokeGetMethod

public static java.lang.String invokeGetMethod(java.lang.String astrClassName,
                                               java.lang.Object aobjAccessBean,
                                               java.lang.String astrParameterName)
Gets a parameter from a specified accessbean.
Parameters:
astrClassName - The full qualified class name of the access bean.
aobjAccessBean - The access bean instance.
astrParameterName - The name of the parameter to get.
Returns:
The value of the parameter.

populate

public void populate()
Populate the databean.

setCommandContext

public void setCommandContext(CommandContext acommandContext)
Sets the command context.
Parameters:
acommandContext - The command context.

setDelimiter

public void setDelimiter(java.lang.String astrDelimiter)
Sets the delimiter for the property file.
Delimiter is used to separate different options. For example, in the following property definiation,
 age.Options=0;Not Available|1;10-19 years|2;20-29 years
"|" is the delimitor. If no Delimiter is set, the databean will use the default one: "|".
Parameters:
astrDelimiter - The delimiter for the property file

setLocale

public void setLocale(java.util.Locale alcLocale)
Set the Locale. This locale is used to find property file.
Parameters:
alcLocale - The Locale

setPathSeparator

public void setPathSeparator(java.lang.String astrPathSeparator)
Sets the path separator. path separator is used to separate the store directory and the property file name. For example:
 "store1/UserRegistration"
"/" is the path separator. If path separator is not set, the databean will use the default one: "/" (working under Windows platform).
Parameters:
astrPathSeparator - The path separator

setPropertyFileName

public void setPropertyFileName(java.lang.String astrPropertyFileName)
Sets the name of property file. This is mandatory parameter for this DataBean.
Parameters:
astrPropertyFileName - The name of property file

setRequestProperties

public void setRequestProperties(TypedProperty areqParms)
                          throws java.lang.Exception
Sets the request properties.
Parameters:
areqParms - The request properties.
Throws:
java.lang.Exception - Any exception happens.

setSeparator

public void setSeparator(java.lang.String astrSeparator)
Sets the separator for the property file.
separator is used to separate internal value and display value in a option. For example, in the following property definiation,
 age.Options=0;Not Available|1;10-19 years|2;20-29 years
"1;10-19 years" is a option, ";" is the separator. If no separator is set, the databean will use the default one: ";".
Parameters:
astrSeparator - The separator for the property file

setStoreDirectory

public void setStoreDirectory(java.lang.String astrStoreDirectory)
Sets the name of store directory, which is used as the path to the find the property file. For example, if property files of a store is under the directory "store31" and the parent directory of "store31" directory is included in the class path, then this method should be called to set StoreDirectory to "store31". If the store directory is not set, ResourceBundleDataBean will try to get it from commandContext.
Parameters:
astrStoreDirectory - The name of store directory

setStoreDirectoryEnabled

public void setStoreDirectoryEnabled(boolean abStoreDirectoryEnabled)
Sets if enable getting the Store Directory from the CommandContext. true - If Store Directory is not set, the databean will get from CommandContext false - The databean will never get the Store Directory from CommandContext
Parameters:
abStoreDirectoryEnabled - A boolean value indicating if getting the Store Directory from the CommandContext

toUpOneChar

public static java.lang.String toUpOneChar(java.lang.String strAttributeName)
Input parameter: attribute name return: method name (with uppercase first character) uppercase the first character of the attribute name in order to match with the naming convention of the underlying get/set method
Parameters:
strAttributeName - The attribute name.
Returns:
The attribute name with first character uppercase.

getPropertyHashtable

public java.util.Hashtable getPropertyHashtable(java.util.SortedMap atmpProperty)
Gets the property Hashtable format form property StoredMap format.
Parameters:
atmpProperty - The property StoredMap format.
Returns:
The property Hashtable format