## mx4j.tools.i18n
Class I18NStandardMBean

    java.lang.Object
      javax.management.StandardMBean
          mx4j.tools.i18n.I18NStandardMBean

All Implemented Interfaces:
  javax.management.DynamicMBean

public class I18NStandardMBean
extends javax.management.StandardMBean

An extension of StandardMBean to support internationalization.

The I18N information is taken from a property bundle named MyImplMBeanResources where "MyImpl" is the fully qualified class implementing the MBean.

These bundles are nested following the class hierachy of the implementation class. This means that a superclass of the real implementing class can define the resource bundle for the common attributes and operations.

The resource bundle naming rules defined by `ResourceBundle` are used; in particular :

- If a class called MyPackage.MyImplMBeanResources_localInfo exists it is used (programmatic methd)
- Otherwise the file called MyPackage.MyImplMBeanResources_localInfo.properties is used.

localInfo consists of one or more sections of "language_country_variant" (eg en_GB or fr_FR).

The locale to be used is determined by one of the following mechanisms (in this order)

- The locale object explicitly passed to the constructor (if not null)
- The static method `setDefaultLocale(java.util.Locale)`
- The system property "mx4j.descriptionLocale"
- The current system default locale

The bundle should contain keys as described below :

## Global bean description

The global bean description is given by the single key "descr":

     descr=The MBean Description

## Attributes

Attribute desciptions are given by keys of form "attr.Name" where Name is the attribute name (the method name minus the get/set prefix) :

     attr.Counter=The counter

## Constructors

### Non ambiguous case

All constructors having a different number of arguments may be described in this way:

     cons.N=desciption of constructor N
     cons.N.param.1=Description of first parameter of constructor N
     cons.N.paramName.1=paramName1
     cons.N.param.2=Description of first parameter of constructor N
     cons.N.paramName.2=paramName2

Where N is a sequential number starting at one.

### Ambiguous case

Where several constructors exist with the same number of arguments an explicit signature must be given. The signature is a comma separated list of class descriptions (as returned by `Class.getName()` and has the key cons.N.sig :

     cons.N.sig=int,java.lang.Object
     cons.N.param.1=The int parameter
     cons.N.param.2=The Object parameter

## Operations

### No overloading

When no overloaded versions of an operation exist (same method name but different parameters) the simplest case shown below can be used :

     op.operationName=The description
     op.operationName.param.1=The first parameter
     op.operationName.paramName.1=param1

### Non ambiguous overloading case

When operation overloading is used but the overloaded versions differ in the number of parameters the format below can be used :

     op.operationName.1=The first version of operationName
     op.operationName.1.param.1=parameter for first version
     op.operationName.1.paramName.1=param1
     op.operationName.2=The second version of operationName
     op.operationName.2.paramName.1=param1
     op.operationName.2.param.1=first parameter for second version
     op.operationName.2.param.2=second parameter for second version
     op.operationName.2.paramName.2=param2

### Ambiguous overloading case

When operations with the same name have the same number of arguments an explicit signature must be used :

     op.operationName.1.sig=int
     op.operationName.1=The first version of operationName (takes int)
     op.operationName.1.param.1=parameter for first version
     op.operationName.1.paramName.1=param1
     op.operationName.2.sig=java.lang.Object
     op.operationName.2=The second version of operationName (take Object)
     op.operationName.2.paramName.1=param1
     op.operationName.2.param.1=first parameter for second version

## Restrictions

Parameter names must only contain characters allowed in a Java identifier (in particular spaces are not allowed). This is required by the JMX specifications. No such restrictions exist for the other descriptions.

## Behaviour with missing data

If no resource bunde exists for the MBean a java.util.MissingResourceException will be thrown by the constructor.

If the resouce bundle is found but the bean description, constructor description or parameter name is missing the String "??(key)" will be returned instead (eg "??(op.myOperation)".

If a paramName key is missing (for constructor or operation) the version normally given by StandardMBean is used (generally "pN").

If a non ambiguous description cannot be determined the fixed (non translatable) descriptions "ambiguous constructor", "parameter for ambiguous constructor", "ambiguous operation", "parameter for ambiguous operation" are returned.

Constructor Summary
`protected` `I18NStandardMBean(java.lang.Class mbeanInterface)` Makes a I18NStandardMBean for the default locale implemented by a subclass.
`protected` `I18NStandardMBean(java.lang.Class mbeanInterface, java.util.Locale locale)` Makes a I18NStandardMBean for the given locale implemented by a subclass.
`` `I18NStandardMBean(java.lang.Object implementation, java.lang.Class mbeanInterface)` Makes an I18NStandardMBean for the default locale with a separate implementation class.
`` `I18NStandardMBean(java.lang.Object implementation, java.lang.Class mbeanInterface, java.util.Locale locale)` Makes an I18NStandardMBean for the given locale with a separate implementation class.

Method Summary
`protected void` `cacheMBeanInfo(javax.management.MBeanInfo info)` Once the MBeanInfo has been obtained discard our caches.
`protected javax.management.MBeanInfo` `getCachedMBeanInfo()` Initialise internal data structures.
`protected javax.management.MBeanConstructorInfo[]` `getConstructors(javax.management.MBeanConstructorInfo[] cstrs, java.lang.Object impl)`
`protected java.lang.String` `getDescription(javax.management.MBeanAttributeInfo attr)` Obtain the attribute description.
`protected java.lang.String` `getDescription(javax.management.MBeanConstructorInfo cstr)` Obtain the constructor description.
`protected java.lang.String` `getDescription(javax.management.MBeanConstructorInfo cstr, javax.management.MBeanParameterInfo param, int seq)` Obtain the constructor parameter description.
`protected java.lang.String` `getDescription(javax.management.MBeanInfo info)` Obtain global description for MBean.
`protected java.lang.String` `getDescription(javax.management.MBeanOperationInfo op)` Obtain the operation description.
`protected java.lang.String` `getDescription(javax.management.MBeanOperationInfo op, javax.management.MBeanParameterInfo param, int seq)` Obtain the operation parameter description.
`protected java.lang.String` `getParameterName(javax.management.MBeanConstructorInfo cstr, javax.management.MBeanParameterInfo param, int seq)` Obtain constructor parameter name.
`protected java.lang.String` `getParameterName(javax.management.MBeanOperationInfo op, javax.management.MBeanParameterInfo param, int seq)` Obtain operation parameter name.
`static void` `setDefaultLocale(java.util.Locale locale)` Set the locale which will be used for future I18NStandardMBeans.

Methods inherited from class javax.management.StandardMBean
`getAttribute, getAttributes, getClassName, getDescription, getImpact, getImplementation, getImplementationClass, getMBeanInfo, getMBeanInterface, invoke, setAttribute, setAttributes, setImplementation`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### I18NStandardMBean

    public I18NStandardMBean(java.lang.Object implementation,
                             java.lang.Class mbeanInterface)
                      throws javax.management.NotCompliantMBeanException

  Makes an I18NStandardMBean for the default locale with a separate implementation class.

See Also:
  `StandardMBean.StandardMBean(java.lang.Object, java.lang.Class)`

### I18NStandardMBean

    public I18NStandardMBean(java.lang.Object implementation,
                             java.lang.Class mbeanInterface,
                             java.util.Locale locale)
                      throws javax.management.NotCompliantMBeanException

  Makes an I18NStandardMBean for the given locale with a separate implementation class.

See Also:
  `StandardMBean.StandardMBean(java.lang.Object, java.lang.Class)`

### I18NStandardMBean

    protected I18NStandardMBean(java.lang.Class mbeanInterface)
                         throws javax.management.NotCompliantMBeanException

  Makes a I18NStandardMBean for the default locale implemented by a subclass.

See Also:
  `StandardMBean.StandardMBean(java.lang.Class)`

### I18NStandardMBean

    protected I18NStandardMBean(java.lang.Class mbeanInterface,
                                java.util.Locale locale)
                         throws javax.management.NotCompliantMBeanException

  Makes a I18NStandardMBean for the given locale implemented by a subclass.

See Also:
  `StandardMBean.StandardMBean(java.lang.Class)`

Method Detail

### setDefaultLocale

    public static void setDefaultLocale(java.util.Locale locale)

  Set the locale which will be used for future I18NStandardMBeans.

  The locale specified can be overridden on a per class basis via the constructors but overrides other means of setting the Locale (system properties).

  Changing the locale has no effect on already constructed MBeans.

  Parameters:
    `locale` - the Locale for future MBeans

### getCachedMBeanInfo

    protected javax.management.MBeanInfo getCachedMBeanInfo()

  Initialise internal data structures.

  This method is always called first during getMBeanInfo processing. We use this to avoid keeping all our internal Maps in memory too long.

  See Also:
    `StandardMBean.getCachedMBeanInfo()`

### cacheMBeanInfo

    protected void cacheMBeanInfo(javax.management.MBeanInfo info)

  Once the MBeanInfo has been obtained discard our caches.

  See Also:
    `StandardMBean.cacheMBeanInfo(javax.management.MBeanInfo)`

### getConstructors

    protected javax.management.MBeanConstructorInfo[] getConstructors(javax.management.MBeanConstructorInfo[] cstrs,
                                                                      java.lang.Object impl)

### getDescription

    protected java.lang.String getDescription(javax.management.MBeanInfo info)

  Obtain global description for MBean.

  Taken from "descr" key in resource bundle.

  Also performs internal initialisations requiring the MBeanInfo obtained by introspection. Therefore the superclass must call this method BEFORE the other hooks.

  See Also:
    `StandardMBean.getDescription(javax.management.MBeanInfo)`

### getDescription

    protected java.lang.String getDescription(javax.management.MBeanConstructorInfo cstr)

  Obtain the constructor description.

  Taken from "cons.N" key in resource bundle.

  Maybe "ambiguous constructor" if correct index cannot be determined by an explicit signature or parameter counts.

  See Also:
    `StandardMBean.getDescription(javax.management.MBeanConstructorInfo)`

### getDescription

    protected java.lang.String getDescription(javax.management.MBeanConstructorInfo cstr,
                                              javax.management.MBeanParameterInfo param,
                                              int seq)

  Obtain the constructor parameter description.

  Taken from "cons.N.param.seq" key in resource bundle.

  Maybe "parameter for ambiguous constructor" if correct index cannot be determined by an explicit signature or parameter counts.

  See Also:
    `StandardMBean.getDescription(javax.management.MBeanConstructorInfo, javax.management.MBeanParameterInfo, int)`

### getParameterName

    protected java.lang.String getParameterName(javax.management.MBeanConstructorInfo cstr,
                                                javax.management.MBeanParameterInfo param,
                                                int seq)

  Obtain constructor parameter name.

  Taken from "cons.N.paramName.seq" key in resource bundle.

  If this key does not exist or if the correct index N cannot be determined by an explicit signature or parameter counts the superclass method is called.

  See Also:
    `StandardMBean.getParameterName(javax.management.MBeanConstructorInfo, javax.management.MBeanParameterInfo, int)`

### getDescription

    protected java.lang.String getDescription(javax.management.MBeanAttributeInfo attr)

  Obtain the attribute description.

  Taken from the "attr.attributeName" key in resource bundle.

  See Also:
    `StandardMBean.getDescription(javax.management.MBeanAttributeInfo)`

### getDescription

    protected java.lang.String getDescription(javax.management.MBeanOperationInfo op)

  Obtain the operation description.

  Taken from the "op.operationName.N" or the "op.operationName" key in the resource bundle.

  May be "ambiguous operation" if the correct key cannot be determined by signature or parameter counts.

  See Also:
    `StandardMBean.getDescription(javax.management.MBeanOperationInfo)`

### getDescription

    protected java.lang.String getDescription(javax.management.MBeanOperationInfo op,
                                              javax.management.MBeanParameterInfo param,
                                              int seq)

  Obtain the operation parameter description.

  Taken from the "op.operationName.N.param.M" or the "op.operationName.param" key in the resource bundle.

  May be "parameter for ambiguous operation" if the correct key cannot be determined by signature or parameter counts.

  See Also:
    `StandardMBean.getDescription(javax.management.MBeanOperationInfo, javax.management.MBeanParameterInfo, int)`

### getParameterName

    protected java.lang.String getParameterName(javax.management.MBeanOperationInfo op,
                                                javax.management.MBeanParameterInfo param,
                                                int seq)

  Obtain operation parameter name.

  Taken from the "op.operationName.N.paramName.M" or the "op.operationName.paramName.M" key in the resource bundle.

  If this key does not exist or if the correct index N cannot be determined by an explicit signature or parameter counts the superclass method is called.

  See Also:
    `StandardMBean.getParameterName(javax.management.MBeanOperationInfo, javax.management.MBeanParameterInfo, int)`

Copyright © 2001-2005 The MX4J Contributors. All Rights Reserved.