On 4 December 2011 17:56,  <[email protected]> wrote:
> Author: pmouawad
> Date: Sun Dec  4 17:56:17 2011
> New Revision: 1210159
>
> URL: http://svn.apache.org/viewvc?rev=1210159&view=rev
> Log:
> Bug 52280 - The menu item Options / Choose Language does not change all the 
> displayed text to the new language
>
> Better fix after discussion on mailing list
>
> Modified:
>    jmeter/trunk/src/core/org/apache/jmeter/testbeans/gui/TestBeanGUI.java
>
> Modified: 
> jmeter/trunk/src/core/org/apache/jmeter/testbeans/gui/TestBeanGUI.java
> URL: 
> http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/testbeans/gui/TestBeanGUI.java?rev=1210159&r1=1210158&r2=1210159&view=diff
> ==============================================================================
> --- jmeter/trunk/src/core/org/apache/jmeter/testbeans/gui/TestBeanGUI.java 
> (original)
> +++ jmeter/trunk/src/core/org/apache/jmeter/testbeans/gui/TestBeanGUI.java 
> Sun Dec  4 17:56:17 2011
> @@ -59,6 +59,8 @@ import org.apache.jmeter.testelement.pro
>  import org.apache.jmeter.timers.Timer;
>  import org.apache.jmeter.timers.gui.AbstractTimerGui;
>  import org.apache.jmeter.util.JMeterUtils;
> +import org.apache.jmeter.util.LocaleChangeEvent;
> +import org.apache.jmeter.util.LocaleChangeListener;
>  import org.apache.jmeter.visualizers.Visualizer;
>  import org.apache.jmeter.visualizers.gui.AbstractVisualizer;
>  import org.apache.jorphan.logging.LoggingManager;
> @@ -84,14 +86,14 @@ import org.apache.log.Logger;
>  * customizers should implement SharedCustomizer.
>  *
>  */
> -public class TestBeanGUI extends AbstractJMeterGuiComponent implements 
> JMeterGUIComponent {
> +public class TestBeanGUI extends AbstractJMeterGuiComponent implements 
> JMeterGUIComponent, LocaleChangeListener{
>     private static final long serialVersionUID = 240L;
>
>     private static final Logger log = LoggingManager.getLoggerForClass();
>
>     private final Class<?> testBeanClass;
>
> -    private transient final BeanInfo beanInfo;
> +    private transient BeanInfo beanInfo;
>
>     private final Class<?> customizerClass;
>
> @@ -177,6 +179,7 @@ public class TestBeanGUI extends Abstrac
>         // label, menu
>         // categories, etc!
>         initialized = false;
> +        JMeterUtils.addLocaleChangeListener(this);
>     }
>
>     private Customizer createCustomizer() {
> @@ -199,13 +202,7 @@ public class TestBeanGUI extends Abstrac
>         if (beanInfo == null){
>             return "null";// $NON-NLS-1$
>         }
> -        try {
> -               // We get new BeanInfo instead of cached one
> -               // TODO Find a better way to reinitialize the beanInfo 
> instance
> -                       return 
> Introspector.getBeanInfo(testBeanClass).getBeanDescriptor().getDisplayName();
> -               } catch (IntrospectionException e) {
> -                       return beanInfo.getBeanDescriptor().getDisplayName();
> -               }
> +        return beanInfo.getBeanDescriptor().getDisplayName();
>     }
>
>     /**
> @@ -470,4 +467,18 @@ public class TestBeanGUI extends Abstrac
>     public boolean isExpert() {
>         return beanInfo.getBeanDescriptor().isExpert();
>     }
> +
> +       /**
> +        * Handle Locale Change by reloading BeanInfo
> +        * @param event {@link LocaleChangeEvent}
> +        */
> +       public void localeChanged(LocaleChangeEvent event) {
> +               try {
> +            beanInfo = Introspector.getBeanInfo(testBeanClass);
> +        } catch (IntrospectionException e) {
> +            log.error("Can't get beanInfo for " + testBeanClass.getName(), 
> e);
> +            throw new Error(e.toString()); // Programming error. Don't
> +                                            // continue.

Is that the best solution? Won't that mess up the GUI thread?

I think the LocaleChanged even only comes from the GUI, in which case,
might be better to use JMeterUtils.reportErrorToUser ?

> +        }
> +       }
>  }
>
>

Reply via email to