Respect RWT locale in getMessage methods
The original implementation of Compatibility#getMessage is loading the
"org.eclipse.swt.internal.SWTMessages" message bundle with default Java
locale. Respect RWT locle instead.
Change-Id: Ib559f8544bfc548f2adb21b6ffa9f5b00ab01cf9
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/Compatibility.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/Compatibility.java
index 2e3b272..1627b81 100755
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/Compatibility.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/internal/Compatibility.java
@@ -1,24 +1,32 @@
/*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
- * IBM Corporation - initial API and implementation
+ * IBM Corporation - initial API and implementation
+ * EclipseSource - ongoing development
*******************************************************************************/
package org.eclipse.swt.internal;
-
-import java.io.*;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
import java.text.MessageFormat;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import java.util.zip.Deflater;
-import java.util.zip.InflaterInputStream;
import java.util.zip.DeflaterOutputStream;
+import java.util.zip.InflaterInputStream;
+import org.eclipse.rap.rwt.RWT;
import org.eclipse.swt.SWT;
/**
@@ -31,341 +39,341 @@
* </p>
* <p>
* IMPORTANT: some of the methods have been modified from their
- * J2SE parents. Refer to the description of each method for
+ * J2SE parents. Refer to the description of each method for
* specific changes.
* </p>
* <ul>
- * <li>Exceptions thrown may differ since J2ME's set of
+ * <li>Exceptions thrown may differ since J2ME's set of
* exceptions is a subset of J2SE's one.
* </li>
* <li>The range of the mathematic functions is subject to
* change.
- * </li>
+ * </li>
* </ul>
- *
+ *
* @since 1.1
*/
public final class Compatibility {
-/**
- * Returns the PI constant as a double.
- */
-public static double PI = Math.PI;
+ /**
+ * Returns the PI constant as a double.
+ */
+ public static double PI = Math.PI;
-static double toRadians = PI / 180;
+ static double toRadians = PI / 180;
-/**
- * Answers the length of the side adjacent to the given angle
- * of a right triangle. In other words, it returns the integer
- * conversion of length * cos (angle).
- * <p>
- * IMPORTANT: the j2me version has an additional restriction on
- * the argument. length must be between -32767 and 32767 (inclusive).
- * </p>
- *
- * @param angle the angle in degrees
- * @param length the length of the triangle's hypotenuse
- * @return the integer conversion of length * cos (angle)
- */
-public static int cos(int angle, int length) {
- return (int)(Math.cos(angle * toRadians) * length);
-}
+ /**
+ * Answers the length of the side adjacent to the given angle
+ * of a right triangle. In other words, it returns the integer
+ * conversion of length * cos (angle).
+ * <p>
+ * IMPORTANT: the j2me version has an additional restriction on
+ * the argument. length must be between -32767 and 32767 (inclusive).
+ * </p>
+ *
+ * @param angle the angle in degrees
+ * @param length the length of the triangle's hypotenuse
+ * @return the integer conversion of length * cos (angle)
+ */
+ public static int cos(int angle, int length) {
+ return (int)(Math.cos(angle * toRadians) * length);
+ }
-/**
- * Answers the length of the side opposite to the given angle
- * of a right triangle. In other words, it returns the integer
- * conversion of length * sin (angle).
- * <p>
- * IMPORTANT: the j2me version has an additional restriction on
- * the argument. length must be between -32767 and 32767 (inclusive).
- * </p>
- *
- * @param angle the angle in degrees
- * @param length the length of the triangle's hypotenuse
- * @return the integer conversion of length * sin (angle)
- */
-public static int sin(int angle, int length) {
- return (int)(Math.sin(angle * toRadians) * length);
-}
+ /**
+ * Answers the length of the side opposite to the given angle
+ * of a right triangle. In other words, it returns the integer
+ * conversion of length * sin (angle).
+ * <p>
+ * IMPORTANT: the j2me version has an additional restriction on
+ * the argument. length must be between -32767 and 32767 (inclusive).
+ * </p>
+ *
+ * @param angle the angle in degrees
+ * @param length the length of the triangle's hypotenuse
+ * @return the integer conversion of length * sin (angle)
+ */
+ public static int sin(int angle, int length) {
+ return (int)(Math.sin(angle * toRadians) * length);
+ }
-/**
- * Answers the most negative (i.e. closest to negative infinity)
- * integer value which is greater than the number obtained by dividing
- * the first argument p by the second argument q.
- *
- * @param p numerator
- * @param q denominator (must be different from zero)
- * @return the ceiling of the rational number p / q.
- */
-public static int ceil(int p, int q) {
- return (int)Math.ceil((float)p / q);
-}
+ /**
+ * Answers the most negative (i.e. closest to negative infinity)
+ * integer value which is greater than the number obtained by dividing
+ * the first argument p by the second argument q.
+ *
+ * @param p numerator
+ * @param q denominator (must be different from zero)
+ * @return the ceiling of the rational number p / q.
+ */
+ public static int ceil(int p, int q) {
+ return (int)Math.ceil((float)p / q);
+ }
-/**
- * Answers whether the indicated file exists or not.
- *
- * @param parent the file's parent directory
- * @param child the file's name
- * @return true if the file exists
- */
-public static boolean fileExists(String parent, String child) {
- return new File (parent, child).exists();
-}
+ /**
+ * Answers whether the indicated file exists or not.
+ *
+ * @param parent the file's parent directory
+ * @param child the file's name
+ * @return true if the file exists
+ */
+ public static boolean fileExists(String parent, String child) {
+ return new File (parent, child).exists();
+ }
-/**
- * Answers the most positive (i.e. closest to positive infinity)
- * integer value which is less than the number obtained by dividing
- * the first argument p by the second argument q.
- *
- * @param p numerator
- * @param q denominator (must be different from zero)
- * @return the floor of the rational number p / q.
- */
-public static int floor(int p, int q) {
- return (int)Math.floor((double)p / q);
-}
+ /**
+ * Answers the most positive (i.e. closest to positive infinity)
+ * integer value which is less than the number obtained by dividing
+ * the first argument p by the second argument q.
+ *
+ * @param p numerator
+ * @param q denominator (must be different from zero)
+ * @return the floor of the rational number p / q.
+ */
+ public static int floor(int p, int q) {
+ return (int)Math.floor((double)p / q);
+ }
-/**
- * Answers the result of rounding to the closest integer the number obtained
- * by dividing the first argument p by the second argument q.
- * <p>
- * IMPORTANT: the j2me version has an additional restriction on
- * the arguments. p must be within the range 0 - 32767 (inclusive).
- * q must be within the range 1 - 32767 (inclusive).
- * </p>
- *
- * @param p numerator
- * @param q denominator (must be different from zero)
- * @return the closest integer to the rational number p / q
- */
-public static int round(int p, int q) {
- return Math.round((float)p / q);
-}
+ /**
+ * Answers the result of rounding to the closest integer the number obtained
+ * by dividing the first argument p by the second argument q.
+ * <p>
+ * IMPORTANT: the j2me version has an additional restriction on
+ * the arguments. p must be within the range 0 - 32767 (inclusive).
+ * q must be within the range 1 - 32767 (inclusive).
+ * </p>
+ *
+ * @param p numerator
+ * @param q denominator (must be different from zero)
+ * @return the closest integer to the rational number p / q
+ */
+ public static int round(int p, int q) {
+ return Math.round((float)p / q);
+ }
-/**
- * Returns 2 raised to the power of the argument.
- *
- * @param n an int value between 0 and 30 (inclusive)
- * @return 2 raised to the power of the argument
- *
- * @exception IllegalArgumentException <ul>
- * <li>ERROR_INVALID_RANGE - if the argument is not between 0 and 30 (inclusive)</li>
- * </ul>
- */
-public static int pow2(int n) {
- if (n >= 1 && n <= 30)
- return 2 << (n - 1);
- else if (n != 0) {
- SWT.error(SWT.ERROR_INVALID_RANGE);
- }
- return 1;
-}
+ /**
+ * Returns 2 raised to the power of the argument.
+ *
+ * @param n an int value between 0 and 30 (inclusive)
+ * @return 2 raised to the power of the argument
+ *
+ * @exception IllegalArgumentException <ul>
+ * <li>ERROR_INVALID_RANGE - if the argument is not between 0 and 30 (inclusive)</li>
+ * </ul>
+ */
+ public static int pow2(int n) {
+ if (n >= 1 && n <= 30) {
+ return 2 << (n - 1);
+ } else if (n != 0) {
+ SWT.error(SWT.ERROR_INVALID_RANGE);
+ }
+ return 1;
+ }
-/**
- * Create a DeflaterOutputStream if such things are supported.
- *
- * @param stream the output stream
- * @return a deflater stream or <code>null</code>
- * @exception IOException
- *
- * @since 1.4
- */
-public static OutputStream newDeflaterOutputStream(OutputStream stream, int level) throws IOException {
- return new DeflaterOutputStream(stream, new Deflater(level));
-}
+ /**
+ * Create a DeflaterOutputStream if such things are supported.
+ *
+ * @param stream the output stream
+ * @return a deflater stream or <code>null</code>
+ * @exception IOException
+ *
+ * @since 1.4
+ */
+ public static OutputStream newDeflaterOutputStream(OutputStream stream, int level) throws IOException {
+ return new DeflaterOutputStream(stream, new Deflater(level));
+ }
-/**
- * Open a file if such things are supported.
- *
- * @param filename the name of the file to open
- * @return a stream on the file if it could be opened.
- * @exception IOException
- */
-public static InputStream newFileInputStream(String filename) throws IOException {
- return new FileInputStream(filename);
-}
+ /**
+ * Open a file if such things are supported.
+ *
+ * @param filename the name of the file to open
+ * @return a stream on the file if it could be opened.
+ * @exception IOException
+ */
+ public static InputStream newFileInputStream(String filename) throws IOException {
+ return new FileInputStream(filename);
+ }
-/**
- * Open a file if such things are supported.
- *
- * @param filename the name of the file to open
- * @return a stream on the file if it could be opened.
- * @exception IOException
- */
-public static OutputStream newFileOutputStream(String filename) throws IOException {
- return new FileOutputStream(filename);
-}
+ /**
+ * Open a file if such things are supported.
+ *
+ * @param filename the name of the file to open
+ * @return a stream on the file if it could be opened.
+ * @exception IOException
+ */
+ public static OutputStream newFileOutputStream(String filename) throws IOException {
+ return new FileOutputStream(filename);
+ }
-/**
- * Create an InflaterInputStream if such things are supported.
- *
- * @param stream the input stream
- * @return a inflater stream or <code>null</code>
- * @exception IOException
- *
- * @since 1.1
- */
-public static InputStream newInflaterInputStream(InputStream stream) throws IOException {
- return new BufferedInputStream(new InflaterInputStream(stream));
-}
+ /**
+ * Create an InflaterInputStream if such things are supported.
+ *
+ * @param stream the input stream
+ * @return a inflater stream or <code>null</code>
+ * @exception IOException
+ *
+ * @since 1.1
+ */
+ public static InputStream newInflaterInputStream(InputStream stream) throws IOException {
+ return new BufferedInputStream(new InflaterInputStream(stream));
+ }
-/**
- * Answers whether the character is a letter.
- *
- * @param c the character
- * @return true when the character is a letter
- */
-public static boolean isLetter(char c) {
- return Character.isLetter(c);
-}
+ /**
+ * Answers whether the character is a letter.
+ *
+ * @param c the character
+ * @return true when the character is a letter
+ */
+ public static boolean isLetter(char c) {
+ return Character.isLetter(c);
+ }
-/**
- * Answers whether the character is a letter or a digit.
- *
- * @param c the character
- * @return true when the character is a letter or a digit
- */
-public static boolean isLetterOrDigit(char c) {
- return Character.isLetterOrDigit(c);
-}
+ /**
+ * Answers whether the character is a letter or a digit.
+ *
+ * @param c the character
+ * @return true when the character is a letter or a digit
+ */
+ public static boolean isLetterOrDigit(char c) {
+ return Character.isLetterOrDigit(c);
+ }
-/**
- * Answers whether the character is a Unicode space character.
- *
- * @param c the character
- * @return true when the character is a Unicode space character
- */
-public static boolean isSpaceChar(char c) {
- return Character.isSpaceChar(c);
-}
+ /**
+ * Answers whether the character is a Unicode space character.
+ *
+ * @param c the character
+ * @return true when the character is a Unicode space character
+ */
+ public static boolean isSpaceChar(char c) {
+ return Character.isSpaceChar(c);
+ }
-/**
- * Answers whether the character is a whitespace character.
- *
- * @param c the character to test
- * @return true if the character is whitespace
- */
-public static boolean isWhitespace(char c) {
- return Character.isWhitespace(c);
-}
+ /**
+ * Answers whether the character is a whitespace character.
+ *
+ * @param c the character to test
+ * @return true if the character is whitespace
+ */
+ public static boolean isWhitespace(char c) {
+ return Character.isWhitespace(c);
+ }
-/**
- * Execute progArray[0] in a separate platform process if the
- * underlying platform support this.
- * <p>
- * The new process inherits the environment of the caller.
- * <p>
- *
- * @param progArray array containing the program to execute and its arguments
- *
- * @exception IOException
- * if the program cannot be executed
- * @exception SecurityException
- * if the current SecurityManager disallows program execution
- */
-public static void exec(String[] progArray) throws java.io.IOException{
- Runtime.getRuntime().exec(progArray);
-}
+ /**
+ * Execute progArray[0] in a separate platform process if the
+ * underlying platform support this.
+ * <p>
+ * The new process inherits the environment of the caller.
+ * <p>
+ *
+ * @param progArray array containing the program to execute and its arguments
+ *
+ * @exception IOException
+ * if the program cannot be executed
+ * @exception SecurityException
+ * if the current SecurityManager disallows program execution
+ */
+ public static void exec(String[] progArray) throws java.io.IOException{
+ Runtime.getRuntime().exec(progArray);
+ }
-/**
- * Execute prog[0] in a separate platform process if the
- * underlying platform supports this.
- * <p>
- * The new process inherits the environment of the caller.
- * <p>
- *
- * @param prog array containing the program to execute and its arguments
- * @param envp
- * array of strings, each element of which has environment
- * variable settings in the format name=value
- * @param workingDir
- * the working directory of the new process, or null if the new
- * process should inherit the working directory of the caller
- *
- * @exception IOException
- * if the program cannot be executed
- * @exception SecurityException
- * if the current SecurityManager disallows program execution
- */
-public static void exec(String[] prog, String[] envp, String workingDir) throws java.io.IOException{
- Runtime.getRuntime().exec(prog, null, workingDir != null ? new File(workingDir) : null);
-}
+ /**
+ * Execute prog[0] in a separate platform process if the
+ * underlying platform supports this.
+ * <p>
+ * The new process inherits the environment of the caller.
+ * <p>
+ *
+ * @param prog array containing the program to execute and its arguments
+ * @param envp
+ * array of strings, each element of which has environment
+ * variable settings in the format name=value
+ * @param workingDir
+ * the working directory of the new process, or null if the new
+ * process should inherit the working directory of the caller
+ *
+ * @exception IOException
+ * if the program cannot be executed
+ * @exception SecurityException
+ * if the current SecurityManager disallows program execution
+ */
+ public static void exec(String[] prog, String[] envp, String workingDir) throws java.io.IOException{
+ Runtime.getRuntime().exec(prog, null, workingDir != null ? new File(workingDir) : null);
+ }
-private static ResourceBundle msgs = null;
+ private static ResourceBundle msgs = null;
-/**
- * Returns the NLS'ed message for the given argument. This is only being
- * called from SWT.
- *
- * @param key the key to look up
- * @return the message for the given key
- *
- * @see SWT#getMessage(String)
- */
-public static String getMessage(String key) {
- String answer = key;
-
- if (key == null) {
- SWT.error (SWT.ERROR_NULL_ARGUMENT);
- }
- if (msgs == null) {
- try {
- msgs = ResourceBundle.getBundle("org.eclipse.swt.internal.SWTMessages"); //$NON-NLS-1$
- } catch (MissingResourceException ex) {
- answer = key + " (no resource bundle)"; //$NON-NLS-1$
- }
- }
- if (msgs != null) {
- try {
- answer = msgs.getString(key);
- } catch (MissingResourceException ex2) {}
- }
- return answer;
-}
+ /**
+ * Returns the NLS'ed message for the given argument. This is only being
+ * called from SWT.
+ *
+ * @param key the key to look up
+ * @return the message for the given key
+ *
+ * @see SWT#getMessage(String)
+ */
+ public static String getMessage(String key) {
+ String answer = key;
-public static String getMessage(String key, Object[] args) {
- String answer = key;
-
- if (key == null || args == null) {
- SWT.error (SWT.ERROR_NULL_ARGUMENT);
- }
- if (msgs == null) {
- try {
- msgs = ResourceBundle.getBundle("org.eclipse.swt.internal.SWTMessages"); //$NON-NLS-1$
- } catch (MissingResourceException ex) {
- answer = key + " (no resource bundle)"; //$NON-NLS-1$
- }
- }
- if (msgs != null) {
- try {
- MessageFormat formatter = new MessageFormat("");
- formatter.applyPattern(msgs.getString(key));
- answer = formatter.format(args);
- } catch (MissingResourceException ex2) {}
- }
- return answer;
-}
+ if (key == null) {
+ SWT.error (SWT.ERROR_NULL_ARGUMENT);
+ }
+ if (msgs == null) {
+ try {
+ msgs = ResourceBundle.getBundle("org.eclipse.swt.internal.SWTMessages", RWT.getLocale()); //$NON-NLS-1$
+ } catch (MissingResourceException ex) {
+ answer = key + " (no resource bundle)"; //$NON-NLS-1$
+ }
+ }
+ if (msgs != null) {
+ try {
+ answer = msgs.getString(key);
+ } catch (MissingResourceException ex2) {}
+ }
+ return answer;
+ }
-/**
- * Interrupt the current thread.
- * <p>
- * Note that this is not available on CLDC.
- * </p>
- */
-public static void interrupt() {
- Thread.currentThread().interrupt();
-}
+ public static String getMessage(String key, Object[] args) {
+ String answer = key;
-/**
- * Compares two instances of class String ignoring the case of the
- * characters and answers if they are equal.
- *
- * @param s1 string
- * @param s2 string
- * @return true if the two instances of class String are equal
- */
-public static boolean equalsIgnoreCase(String s1, String s2) {
- return s1.equalsIgnoreCase(s2);
-}
+ if (key == null || args == null) {
+ SWT.error (SWT.ERROR_NULL_ARGUMENT);
+ }
+ if (msgs == null) {
+ try {
+ msgs = ResourceBundle.getBundle("org.eclipse.swt.internal.SWTMessages", RWT.getLocale()); //$NON-NLS-1$
+ } catch (MissingResourceException ex) {
+ answer = key + " (no resource bundle)"; //$NON-NLS-1$
+ }
+ }
+ if (msgs != null) {
+ try {
+ MessageFormat formatter = new MessageFormat("");
+ formatter.applyPattern(msgs.getString(key));
+ answer = formatter.format(args);
+ } catch (MissingResourceException ex2) {}
+ }
+ return answer;
+ }
+
+ /**
+ * Interrupt the current thread.
+ * <p>
+ * Note that this is not available on CLDC.
+ * </p>
+ */
+ public static void interrupt() {
+ Thread.currentThread().interrupt();
+ }
+
+ /**
+ * Compares two instances of class String ignoring the case of the
+ * characters and answers if they are equal.
+ *
+ * @param s1 string
+ * @param s2 string
+ * @return true if the two instances of class String are equal
+ */
+ public static boolean equalsIgnoreCase(String s1, String s2) {
+ return s1.equalsIgnoreCase(s2);
+ }
}