changeset 2389:18ee3c1b9143

Merge
author lana
date Tue, 01 Jun 2010 21:25:26 -0700
parents be6f14f83ea7 be03f9a285f0
children 31a7a323a604
files make/com/sun/inputmethods/Makefile make/com/sun/inputmethods/indicim/Makefile make/com/sun/inputmethods/thaiim/Makefile src/share/classes/com/sun/inputmethods/internal/indicim/DevanagariInputMethodDescriptor.java src/share/classes/com/sun/inputmethods/internal/indicim/DevanagariTables.java src/share/classes/com/sun/inputmethods/internal/indicim/IndicInputMethod.java src/share/classes/com/sun/inputmethods/internal/indicim/IndicInputMethodImpl.java src/share/classes/com/sun/inputmethods/internal/indicim/java.awt.im.spi.InputMethodDescriptor src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames.properties src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_de.properties src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_es.properties src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_fr.properties src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_it.properties src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_ja.properties src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_ko.properties src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_sv.properties src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_zh_CN.properties src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_zh_TW.properties src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiInputMethod.java src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiInputMethodDescriptor.java src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiInputMethodImpl.java src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiRules.java src/share/classes/com/sun/inputmethods/internal/thaiim/java.awt.im.spi.InputMethodDescriptor src/share/classes/com/sun/inputmethods/internal/thaiim/resources/DisplayNames.properties src/share/classes/javax/swing/text/html/parser/html32.bdtd
diffstat 60 files changed, 1048 insertions(+), 2966 deletions(-) [+]
line wrap: on
line diff
--- a/make/com/sun/Makefile	Sat May 29 23:26:16 2010 -0700
+++ b/make/com/sun/Makefile	Tue Jun 01 21:25:26 2010 -0700
@@ -42,7 +42,7 @@
 SUBDIRS = java security net/ssl jarsigner
 
 SUBDIRS_management = jmx
-SUBDIRS_desktop    = image inputmethods
+SUBDIRS_desktop    = image
 SUBDIRS_enterprise = crypto/provider jndi \
                      org xml rowset net/httpserver
 SUBDIRS_misc       = $(SCRIPT_SUBDIR) tracing servicetag nio demo
--- a/make/com/sun/inputmethods/Makefile	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-#
-# Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.  Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-#
-# Makefile for building Java input methods
-#
-
-BUILDDIR = ../../..
-PRODUCT = sun
-include $(BUILDDIR)/common/Defs.gmk
-
-SUBDIRS = indicim thaiim
-include $(BUILDDIR)/common/Subdirs.gmk
-
-all build clean clobber::
-	$(SUBDIRS-loop)
-
--- a/make/com/sun/inputmethods/indicim/Makefile	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-#
-# Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.  Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-#
-# Makefile for indic input method.
-#
-
-BUILDDIR = ../../../..
-
-PACKAGE = com.sun.inputmethods.internal.indicim
-PRODUCT = sun
-
-CLASSDESTDIR = $(TEMPDIR)/classes
-SERVICESDIR=META-INF/services
-IMJAR = $(IMJARDIR)/indicim.jar
-IMJARDIR=$(LIBDIR)/im
-include $(BUILDDIR)/common/Defs.gmk
-
-#
-# Files
-#
-AUTO_FILES_JAVA_DIRS = com/sun/inputmethods/internal/indicim
-
-FILES_copy = \
-	$(CLASSDESTDIR)/com/sun/inputmethods/internal/indicim/resources/DisplayNames.properties
-
-PROVIDER_CONF_FILE = \
-	$(CLASSDESTDIR)/$(SERVICESDIR)/java.awt.im.spi.InputMethodDescriptor
-
-#
-# Rules
-#
-include $(BUILDDIR)/common/Classes.gmk
-
-build: $(IMJAR)
-
-#
-# Extra rules to build im.
-#
-
-$(CLASSDESTDIR)/com/sun/inputmethods/internal/indicim/resources/% : $(SHARE_SRC)/classes/com/sun/inputmethods/internal/indicim/resources/%
-	$(install-file)
-
-$(CLASSDESTDIR)/$(SERVICESDIR)/java.awt.im.spi.InputMethodDescriptor : $(SHARE_SRC)/classes/com/sun/inputmethods/internal/indicim/java.awt.im.spi.InputMethodDescriptor
-	$(install-file)
-
-$(IMJAR): $(FILES_class) $(FILES_copy) $(PROVIDER_CONF_FILE)
-	$(prep-target)
-	$(BOOT_JAR_CMD) -cf $@ \
-	     -C $(CLASSDESTDIR) com \
-	     -C $(CLASSDESTDIR) $(SERVICESDIR) \
-	     $(BOOT_JAR_JFLAGS)
-	@$(java-vm-cleanup)
-
-clean::
-	$(RM) -r $(CLASSDESTDIR)
-	$(RM) $(IMJAR)
--- a/make/com/sun/inputmethods/thaiim/Makefile	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-#
-# Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.  Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-#
-# Makefile for thai input method.
-#
-
-BUILDDIR = ../../../..
-
-PACKAGE = com.sun.inputmethods.internal.thaiim
-PRODUCT = sun
-
-CLASSDESTDIR = $(TEMPDIR)/classes
-SERVICESDIR=META-INF/services
-IMJAR = $(IMJARDIR)/thaiim.jar
-IMJARDIR=$(LIBDIR)/im
-include $(BUILDDIR)/common/Defs.gmk
-
-#
-# Files
-#
-AUTO_FILES_JAVA_DIRS = com/sun/inputmethods/internal/thaiim
-
-FILES_copy = \
-	$(CLASSDESTDIR)/com/sun/inputmethods/internal/thaiim/resources/DisplayNames.properties
-
-PROVIDER_CONF_FILE = \
-	$(CLASSDESTDIR)/$(SERVICESDIR)/java.awt.im.spi.InputMethodDescriptor
-
-#
-# Rules
-#
-include $(BUILDDIR)/common/Classes.gmk
-
-build: $(IMJAR)
-
-#
-# Extra rules to build im.
-#
-
-$(CLASSDESTDIR)/com/sun/inputmethods/internal/thaiim/resources/% : $(SHARE_SRC)/classes/com/sun/inputmethods/internal/thaiim/resources/%
-	$(install-file)
-
-$(CLASSDESTDIR)/$(SERVICESDIR)/java.awt.im.spi.InputMethodDescriptor : $(SHARE_SRC)/classes/com/sun/inputmethods/internal/thaiim/java.awt.im.spi.InputMethodDescriptor
-	$(install-file)
-
-$(IMJAR): $(FILES_class) $(FILES_copy) $(PROVIDER_CONF_FILE)
-	$(prep-target)
-	$(BOOT_JAR_CMD) -cf $@ \
-	     -C $(CLASSDESTDIR) com \
-	     -C $(CLASSDESTDIR) $(SERVICESDIR) \
-	     $(BOOT_JAR_JFLAGS)
-	@$(java-vm-cleanup)
-
-clean::
-	$(RM) -r $(CLASSDESTDIR)
-	$(RM) $(IMJAR)
--- a/make/common/Release.gmk	Sat May 29 23:26:16 2010 -0700
+++ b/make/common/Release.gmk	Tue Jun 01 21:25:26 2010 -0700
@@ -47,8 +47,7 @@
 # Swing has taken this approach only as a temporary measure to avoid
 # the compiler warnings until we can properly document these packages.
 # This is covered under 6491853.
-EXCLUDE_PROPWARN_PKGS = com.sun.java.swing.plaf          \
-                        com.sun.java.swing.plaf.windows  \
+EXCLUDE_PROPWARN_PKGS = com.sun.java.swing.plaf.windows  \
                         com.sun.java.swing.plaf.motif    \
                         com.sun.java.swing.plaf.gtk
 
--- a/make/javax/swing/FILES.gmk	Sat May 29 23:26:16 2010 -0700
+++ b/make/javax/swing/FILES.gmk	Tue Jun 01 21:25:26 2010 -0700
@@ -25,7 +25,6 @@
 
 MISC_FILES = \
         $(CLASSBINDIR)/javax/swing/text/html/default.css 			\
-        $(CLASSBINDIR)/javax/swing/text/html/parser/html32.bdtd 		\
         $(CLASSBINDIR)/javax/swing/text/rtf/charsets/NeXT.txt 			\
         $(CLASSBINDIR)/javax/swing/text/rtf/charsets/ansi.txt 			\
         $(CLASSBINDIR)/javax/swing/text/rtf/charsets/cpg437.txt 		\
--- a/make/javax/swing/Makefile	Sat May 29 23:26:16 2010 -0700
+++ b/make/javax/swing/Makefile	Tue Jun 01 21:25:26 2010 -0700
@@ -59,9 +59,6 @@
 $(CLASSBINDIR)/%.css: $(SHARE_SRC)/classes/%.css
 	$(install-file)
 
-$(CLASSBINDIR)/%.bdtd: $(SHARE_SRC)/classes/%.bdtd
-	$(install-file)
-
 $(CLASSBINDIR)/%.txt: $(SHARE_SRC)/classes/%.txt
 	$(install-file)
 
--- a/make/tools/sharing/classlist.linux	Sat May 29 23:26:16 2010 -0700
+++ b/make/tools/sharing/classlist.linux	Tue Jun 01 21:25:26 2010 -0700
@@ -2259,7 +2259,6 @@
 com/sun/java/swing/plaf/gtk/GTKLookAndFeel$2
 com/sun/java/swing/plaf/gtk/GTKLookAndFeel$3
 javax/swing/plaf/synth/SynthPanelUI
-sun/swing/plaf/synth/SynthUI
 javax/swing/plaf/synth/SynthConstants
 javax/swing/plaf/synth/SynthContext
 javax/swing/plaf/synth/SynthBorder
@@ -2271,6 +2270,7 @@
 javax/swing/plaf/synth/SynthMenuBarUI
 javax/swing/plaf/synth/DefaultMenuLayout
 javax/swing/plaf/synth/SynthMenuUI
+javax/swing/plaf/synth/SynthUI
 com/sun/java/swing/plaf/gtk/GTKIconFactory
 com/sun/java/swing/plaf/gtk/GTKIconFactory$MenuArrowIcon
 com/sun/java/swing/plaf/gtk/GTKIconFactory$DelegatingIcon
--- a/make/tools/sharing/classlist.solaris	Sat May 29 23:26:16 2010 -0700
+++ b/make/tools/sharing/classlist.solaris	Tue Jun 01 21:25:26 2010 -0700
@@ -2360,7 +2360,6 @@
 com/sun/java/swing/plaf/gtk/GTKLookAndFeel$2
 com/sun/java/swing/plaf/gtk/GTKLookAndFeel$3
 javax/swing/plaf/synth/SynthPanelUI
-sun/swing/plaf/synth/SynthUI
 javax/swing/plaf/synth/SynthConstants
 javax/swing/plaf/synth/SynthContext
 javax/swing/plaf/synth/SynthBorder
@@ -2373,6 +2372,7 @@
 javax/swing/plaf/synth/SynthMenuBarUI
 javax/swing/plaf/synth/DefaultMenuLayout
 javax/swing/plaf/synth/SynthMenuUI
+javax/swing/plaf/synth/SynthUI
 com/sun/java/swing/plaf/gtk/GTKIconFactory
 com/sun/java/swing/plaf/gtk/GTKIconFactory$MenuArrowIcon
 com/sun/java/swing/plaf/gtk/GTKIconFactory$DelegatingIcon
--- a/src/share/classes/com/sun/inputmethods/internal/indicim/DevanagariInputMethodDescriptor.java	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * (C) Copyright IBM Corp. 2000 - All Rights Reserved
- *
- * The original version of this source code and documentation is
- * copyrighted and owned by IBM. These materials are provided
- * under terms of a License Agreement between IBM and Sun.
- * This technology is protected by multiple US and International
- * patents. This notice and attribution to IBM may not be removed.
- *
- */
-
-package com.sun.inputmethods.internal.indicim;
-
-import java.awt.Image;
-import java.awt.im.spi.InputMethod;
-import java.awt.im.spi.InputMethodDescriptor;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-public class DevanagariInputMethodDescriptor implements InputMethodDescriptor {
-
-    static final Locale HINDI = new Locale("hi", "IN");
-
-    public DevanagariInputMethodDescriptor() {
-    }
-
-    /**
-     * @see java.awt.im.spi.InputMethodDescriptor#getAvailableLocales
-     */
-    public Locale[] getAvailableLocales() {
-        return new Locale[] { HINDI };
-    }
-
-    /**
-     * @see java.awt.im.spi.InputMethodDescriptor#hasDynamicLocaleList
-     */
-    public boolean hasDynamicLocaleList() {
-        return false;
-    }
-
-    /**
-     * @see java.awt.im.spi.InputMethodDescriptor#getInputMethodDisplayName
-     */
-    public synchronized String getInputMethodDisplayName(Locale inputLocale, Locale displayLanguage) {
-        try {
-            ResourceBundle resources = ResourceBundle.getBundle("com.sun.inputmethods.internal.indicim.resources.DisplayNames", displayLanguage);
-            return resources.getString("DisplayName.Devanagari");
-        } catch (MissingResourceException mre) {
-            return "Devanagari Input Method";
-        }
-    }
-
-    /**
-     * @see java.awt.im.spi.InputMethodDescriptor#getInputMethodIcon
-     */
-    public Image getInputMethodIcon(Locale inputLocale) {
-        return null;
-    }
-
-    /**
-     * @see java.awt.im.spi.InputMethodDescriptor#createInputMethod
-     */
-    public InputMethod createInputMethod() throws Exception {
-        IndicInputMethodImpl impl = new IndicInputMethodImpl(
-            DevanagariTables.keyboardMap,
-            DevanagariTables.joinWithNukta,
-            DevanagariTables.nuktaForm,
-            DevanagariTables.substitutionTable);
-
-        return new IndicInputMethod(HINDI, impl);
-    }
-
-    public String toString() {
-        return getClass().getName();
-    }
-}
--- a/src/share/classes/com/sun/inputmethods/internal/indicim/DevanagariTables.java	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,255 +0,0 @@
-/*
- * Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * (C) Copyright IBM Corp. 2000 - All Rights Reserved
- *
- * The original version of this source code and documentation is
- * copyrighted and owned by IBM. These materials are provided
- * under terms of a License Agreement between IBM and Sun.
- * This technology is protected by multiple US and International
- * patents. This notice and attribution to IBM may not be removed.
- *
- */
-
-package com.sun.inputmethods.internal.indicim;
-
-class DevanagariTables {
-
-    static final char[] keyboardMap = {
-    /* 00 */ '\u0000',
-    /* 01 */ '\u0001',
-    /* 02 */ '\u0002',
-    /* 03 */ '\u0003',
-    /* 04 */ '\u0004',
-    /* 05 */ '\u0005',
-    /* 06 */ '\u0006',
-    /* 07 */ '\u0007',
-    /* 08 */ '\u0008',
-    /* 09 */ '\u0009',
-    /* 0A */ '\012',
-    /* 0B */ '\u000B',
-    /* 0C */ '\u000C',
-    /* 0D */ '\015',
-    /* 0E */ '\u000E',
-    /* 0F */ '\u000F',
-    /* 10 */ '\u0010',
-    /* 11 */ '\u0011',
-    /* 12 */ '\u0012',
-    /* 13 */ '\u0013',
-    /* 14 */ '\u0014',
-    /* 15 */ '\u0015',
-    /* 16 */ '\u0016',
-    /* 17 */ '\u0017',
-    /* 18 */ '\u0018',
-    /* 19 */ '\u0019',
-    /* 1A */ '\u001A',
-    /* 1B */ '\u001B',
-    /* 1C */ '\u001C',
-    /* 1D */ '\u001D',
-    /* 1E */ '\u001E',
-    /* 1F */ '\u001F',
-    /* 20 */ '\u0020',
-    /* 21 */ '\u090D',   // '!'
-    /* 22 */ '\u0920',   // '"'
-    /* 23 */ '\uFF00',   // '#'
-    /* 24 */ '\uFF01',   // '$'
-    /* 25 */ '\uFF02',   // '%'
-    /* 26 */ '\uFF04',   // '&'
-    /* 27 */ '\u091F',   // '''
-    /* 28 */ '\u0028',   // '('
-    /* 29 */ '\u0029',   // ')'
-    /* 2A */ '\uFF05',   // '*'
-    /* 2B */ '\u090B',   // '+'
-    /* 2C */ '\u002C',   // ','
-    /* 2D */ '\u002D',   // '-'
-    /* 2E */ '\u002E',   // '.'
-    /* 2F */ '\u092F',   // '/'
-    /* 30 */ '\u0966',   // '0'
-    /* 31 */ '\u0967',   // '1'
-    /* 32 */ '\u0968',   // '2'
-    /* 33 */ '\u0969',   // '3'
-    /* 34 */ '\u096A',   // '4'
-    /* 35 */ '\u096B',   // '5'
-    /* 36 */ '\u096C',   // '6'
-    /* 37 */ '\u096D',   // '7'
-    /* 38 */ '\u096E',   // '8'
-    /* 39 */ '\u096F',   // '9'
-    /* 3A */ '\u091B',   // ':'
-    /* 3B */ '\u091A',   // ';'
-    /* 3C */ '\u0937',   // '<'
-    /* 3D */ '\u0943',   // '='
-    /* 3E */ '\u0964',   // '>'
-    /* 3F */ '\u095F',   // '?'
-    /* 40 */ '\u0945',   // '@'
-    /* 41 */ '\u0913',   // 'A'
-    /* 42 */ '\u0934',   // 'B'
-    /* 43 */ '\u0923',   // 'C'
-    /* 44 */ '\u0905',   // 'D'
-    /* 45 */ '\u0906',   // 'E'
-    /* 46 */ '\u0907',   // 'F'
-    /* 47 */ '\u0909',   // 'G'
-    /* 48 */ '\u092B',   // 'H'
-    /* 49 */ '\u0918',   // 'I'
-    /* 4A */ '\u0931',   // 'J'
-    /* 4B */ '\u0916',   // 'K'
-    /* 4C */ '\u0925',   // 'L'
-    /* 4D */ '\u0936',   // 'M'
-    /* 4E */ '\u0933',   // 'N'
-    /* 4F */ '\u0927',   // 'O'
-    /* 50 */ '\u091D',   // 'P'
-    /* 51 */ '\u0914',   // 'Q'
-    /* 52 */ '\u0908',   // 'R'
-    /* 53 */ '\u090F',   // 'S'
-    /* 54 */ '\u090A',   // 'T'
-    /* 55 */ '\u0919',   // 'U'
-    /* 56 */ '\u0929',   // 'V'
-    /* 57 */ '\u0910',   // 'W'
-    /* 58 */ '\u0901',   // 'X'
-    /* 59 */ '\u092D',   // 'Y'
-    /* 5A */ '\u090E',   // 'Z'
-    /* 5B */ '\u0921',   // '['
-    /* 5C */ '\u0949',   // '\'
-    /* 5D */ '\u093C',   // ']'
-    /* 5E */ '\uFF03',   // '^'
-    /* 5F */ '\u0903',   // '_'
-    /* 60 */ '\u094A',   // '`'
-    /* 61 */ '\u094B',   // 'a'
-    /* 62 */ '\u0935',   // 'b'
-    /* 63 */ '\u092E',   // 'c'
-    /* 64 */ '\u094D',   // 'd'
-    /* 65 */ '\u093E',   // 'e'
-    /* 66 */ '\u093F',   // 'f'
-    /* 67 */ '\u0941',   // 'g'
-    /* 68 */ '\u092A',   // 'h'
-    /* 69 */ '\u0917',   // 'i'
-    /* 6A */ '\u0930',   // 'j'
-    /* 6B */ '\u0915',   // 'k'
-    /* 6C */ '\u0924',   // 'l'
-    /* 6D */ '\u0938',   // 'm'
-    /* 6E */ '\u0932',   // 'n'
-    /* 6F */ '\u0926',   // 'o'
-    /* 70 */ '\u091C',   // 'p'
-    /* 71 */ '\u094C',   // 'q'
-    /* 72 */ '\u0940',   // 'r'
-    /* 73 */ '\u0947',   // 's'
-    /* 74 */ '\u0942',   // 't'
-    /* 75 */ '\u0939',   // 'u'
-    /* 76 */ '\u0928',   // 'v'
-    /* 77 */ '\u0948',   // 'w'
-    /* 78 */ '\u0902',   // 'x'
-    /* 79 */ '\u092C',   // 'y'
-    /* 7A */ '\u0946',   // 'z'
-    /* 7B */ '\u0922',   // '{'
-    /* 7C */ '\u0911',   // '|'
-    /* 7D */ '\u091E',   // '}'
-    /* 7E */ '\u0912',   // '~'
-    /* 7F */ '\u007F'    //
-};
-
-    // the character substitutions for the meta characters.
-    static final char[] RA_SUB = {'\u094D', '\u0930'};
-    static final char[] RA_SUP = {'\u0930', '\u094D'};
-    static final char[] CONJ_JA_NYA = {'\u091C', '\u094D', '\u091E'};
-    static final char[] CONJ_TA_RA = {'\u0924', '\u094D', '\u0930'};
-    static final char[] CONJ_KA_SSA = {'\u0915', '\u094D', '\u0937'};
-    static final char[] CONJ_SHA_RA = {'\u0936', '\u094D', '\u0930'};
-
-    static final char[][] substitutionTable = {
-        RA_SUB, RA_SUP, CONJ_JA_NYA, CONJ_TA_RA, CONJ_KA_SSA, CONJ_SHA_RA
-    };
-
-    // The following characters followed by Nukta should be replaced
-    // by the corresponding character as defined in ISCII91
-    static final char SIGN_CANDRABINDU      = '\u0901';
-    static final char LETTER_I              = '\u0907';
-    static final char LETTER_II             = '\u0908';
-    static final char LETTER_VOCALIC_R      = '\u090B';
-    static final char LETTER_KA             = '\u0915';
-    static final char LETTER_KHA            = '\u0916';
-    static final char LETTER_GA             = '\u0917';
-    static final char LETTER_JA             = '\u091C';
-    static final char LETTER_DDA            = '\u0921';
-    static final char LETTER_DDHA           = '\u0922';
-    static final char LETTER_PHA            = '\u092B';
-    static final char VOWEL_SIGN_I          = '\u093F';
-    static final char VOWEL_SIGN_II         = '\u0940';
-    static final char VOWEL_SIGN_VOCALIC_R  = '\u0943';
-    static final char DANDA                 = '\u0964';
-
-   // The follwing characters replace the above characters followed by Nukta. These
-   // are defined in one to one correspondence order.
-    static final char SIGN_OM               = '\u0950';
-    static final char LETTER_VOCALIC_L      = '\u090C';
-    static final char LETTER_VOCALIC_LL     = '\u0961';
-    static final char LETTER_VOCALIC_RR     = '\u0960';
-    static final char LETTER_QA             = '\u0958';
-    static final char LETTER_KHHA           = '\u0959';
-    static final char LETTER_GHHA           = '\u095A';
-    static final char LETTER_ZA             = '\u095B';
-    static final char LETTER_DDDHA          = '\u095C';
-    static final char LETTER_RHA            = '\u095D';
-    static final char LETTER_FA             = '\u095E';
-    static final char VOWEL_SIGN_VOCALIC_L  = '\u0962';
-    static final char VOWEL_SIGN_VOCALIC_LL = '\u0963';
-    static final char VOWEL_SIGN_VOCALIC_RR = '\u0944';
-    static final char SIGN_AVAGRAHA         = '\u093D';
-
-    static final char[] joinWithNukta = {
-        SIGN_CANDRABINDU,
-        LETTER_I,
-        LETTER_II,
-        LETTER_VOCALIC_R ,
-        LETTER_KA,
-        LETTER_KHA,
-        LETTER_GA,
-        LETTER_JA,
-        LETTER_DDA,
-        LETTER_DDHA,
-        LETTER_PHA,
-        VOWEL_SIGN_I,
-        VOWEL_SIGN_II,
-        VOWEL_SIGN_VOCALIC_R,
-        DANDA
-    };
-
-    static final char[] nuktaForm = {
-        SIGN_OM,
-        LETTER_VOCALIC_L,
-        LETTER_VOCALIC_LL,
-        LETTER_VOCALIC_RR,
-        LETTER_QA,
-        LETTER_KHHA,
-        LETTER_GHHA,
-        LETTER_ZA,
-        LETTER_DDDHA,
-        LETTER_RHA,
-        LETTER_FA,
-        VOWEL_SIGN_VOCALIC_L,
-        VOWEL_SIGN_VOCALIC_LL,
-        VOWEL_SIGN_VOCALIC_RR,
-        SIGN_AVAGRAHA
-    };
-}
--- a/src/share/classes/com/sun/inputmethods/internal/indicim/IndicInputMethod.java	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,436 +0,0 @@
-/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * (C) Copyright IBM Corp. 2000 - All Rights Reserved
- *
- * The original version of this source code and documentation is
- * copyrighted and owned by IBM. These materials are provided
- * under terms of a License Agreement between IBM and Sun.
- * This technology is protected by multiple US and International
- * patents. This notice and attribution to IBM may not be removed.
- *
- */
-
-package com.sun.inputmethods.internal.indicim;
-
-import java.awt.im.spi.InputMethod;
-import java.awt.im.spi.InputMethodContext;
-
-import java.awt.AWTEvent;
-import java.awt.Rectangle;
-
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseEvent;
-
-import java.lang.Character.Subset;
-
-import java.util.Locale;
-
-class IndicInputMethod implements InputMethod {
-
-    private IndicInputMethodImpl impl;
-    private Locale locale;
-
-    IndicInputMethod(Locale theLocale, IndicInputMethodImpl theImplementation) {
-        locale = theLocale;
-        impl = theImplementation;
-    }
-
-    /**
-     * Sets the input method context, which is used to dispatch input method
-     * events to the client component and to request information from
-     * the client component.
-     * <p>
-     * This method is called once immediately after instantiating this input
-     * method.
-     *
-     * @param context the input method context for this input method
-     * @exception NullPointerException if <code>context</code> is null
-     */
-    public void setInputMethodContext(InputMethodContext context) {
-
-        impl.setInputMethodContext(context);
-    }
-
-    /**
-     * Attempts to set the input locale. If the input method supports the
-     * desired locale, it changes its behavior to support input for the locale
-     * and returns true.
-     * Otherwise, it returns false and does not change its behavior.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>by {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
-     * <li>when switching to this input method through the user interface if the user
-     *     specified a locale or if the previously selected input method's
-     *     {@link java.awt.im.spi.InputMethod#getLocale getLocale} method
-     *     returns a non-null value.
-     * </ul>
-     *
-     * @param locale locale to input
-     * @return whether the specified locale is supported
-     * @exception NullPointerException if <code>locale</code> is null
-     */
-    public boolean setLocale(Locale locale) {
-
-        if (locale.getLanguage().equals(this.locale.getLanguage())) {
-            //System.out.println("returning true for locale " + locale);
-            return true;
-        }
-        else {
-            //System.out.println("returning false for locale " + locale);
-            return false;
-        }
-    }
-
-    /**
-     * Returns the current input locale. Might return null in exceptional cases.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>by {@link java.awt.im.InputContext#getLocale InputContext.getLocale} and
-     * <li>when switching from this input method to a different one through the
-     *     user interface.
-     * </ul>
-     *
-     * @return the current input locale, or null
-     */
-    public Locale getLocale() {
-
-        return locale;
-    }
-
-    /**
-     * Sets the subsets of the Unicode character set that this input method
-     * is allowed to input. Null may be passed in to indicate that all
-     * characters are allowed.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>immediately after instantiating this input method,
-     * <li>when switching to this input method from a different one, and
-     * <li>by {@link java.awt.im.InputContext#setCharacterSubsets InputContext.setCharacterSubsets}.
-     * </ul>
-     *
-     * @param subsets the subsets of the Unicode character set from which
-     * characters may be input
-     */
-    public void setCharacterSubsets(Subset[] subsets) {
-    }
-
-    /**
-     * Enables or disables this input method for composition,
-     * depending on the value of the parameter <code>enable</code>.
-     * <p>
-     * An input method that is enabled for composition interprets incoming
-     * events for both composition and control purposes, while a
-     * disabled input method does not interpret events for composition.
-     * Note however that events are passed on to the input method regardless
-     * whether it is enabled or not, and that an input method that is disabled
-     * for composition may still interpret events for control purposes,
-     * including to enable or disable itself for composition.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>by {@link java.awt.im.InputContext#setCompositionEnabled InputContext.setCompositionEnabled},
-     * <li>when switching to this input method from a different one using the
-     *     user interface or
-     *     {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
-     *     if the previously selected input method's
-     *     {@link java.awt.im.spi.InputMethod#isCompositionEnabled isCompositionEnabled}
-     *     method returns without throwing an exception.
-     * </ul>
-     *
-     * @param enable whether to enable the input method for composition
-     * @throws UnsupportedOperationException if this input method does not
-     * support the enabling/disabling operation
-     * @see #isCompositionEnabled
-     */
-    public void setCompositionEnabled(boolean enable) {
-
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Determines whether this input method is enabled.
-     * An input method that is enabled for composition interprets incoming
-     * events for both composition and control purposes, while a
-     * disabled input method does not interpret events for composition.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>by {@link java.awt.im.InputContext#isCompositionEnabled InputContext.isCompositionEnabled} and
-     * <li>when switching from this input method to a different one using the
-     *     user interface or
-     *     {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
-     * </ul>
-     *
-     * @return <code>true</code> if this input method is enabled for
-     * composition; <code>false</code> otherwise.
-     * @throws UnsupportedOperationException if this input method does not
-     * support checking whether it is enabled for composition
-     * @see #setCompositionEnabled
-     */
-    public boolean isCompositionEnabled() {
-
-        return true;
-    }
-
-    /**
-     * Starts the reconversion operation. The input method obtains the
-     * text to be reconverted from the current client component using the
-     * {@link java.awt.im.InputMethodRequests#getSelectedText InputMethodRequests.getSelectedText}
-     * method. It can use other <code>InputMethodRequests</code>
-     * methods to request additional information required for the
-     * reconversion operation. The composed and committed text
-     * produced by the operation is sent to the client component as a
-     * sequence of <code>InputMethodEvent</code>s. If the given text
-     * cannot be reconverted, the same text should be sent to the
-     * client component as committed text.
-     * <p>
-     * This method is called by
-     * {@link java.awt.im.InputContext#reconvert() InputContext.reconvert}.
-     *
-     * @throws UnsupportedOperationException if the input method does not
-     * support the reconversion operation.
-     */
-    public void reconvert() {
-
-        throw new UnsupportedOperationException("This input method does not reconvert.");
-    }
-
-    /**
-     * Dispatches the event to the input method. If input method support is
-     * enabled for the focussed component, incoming events of certain types
-     * are dispatched to the current input method for this component before
-     * they are dispatched to the component's methods or event listeners.
-     * The input method decides whether it needs to handle the event. If it
-     * does, it also calls the event's <code>consume</code> method; this
-     * causes the event to not get dispatched to the component's event
-     * processing methods or event listeners.
-     * <p>
-     * Events are dispatched if they are instances of InputEvent or its
-     * subclasses.
-     * This includes instances of the AWT classes KeyEvent and MouseEvent.
-     * <p>
-     * This method is called by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}.
-     *
-     * @param event the event being dispatched to the input method
-     * @exception NullPointerException if <code>event</code> is null
-     */
-    public void dispatchEvent(AWTEvent event) {
-
-        if (event instanceof KeyEvent) {
-
-            KeyEvent keyEvent = (KeyEvent) event;
-            if (event.getID() == KeyEvent.KEY_TYPED) {
-                impl.handleKeyTyped(keyEvent);
-            }
-            //System.out.println("handled event " + event);
-        }
-        else {
-            //System.out.println("did not handle event " + event);
-        }
-    }
-
-    /**
-     * Notifies this input method of changes in the client window
-     * location or state. This method is called while this input
-     * method is the current input method of its input context and
-     * notifications for it are enabled (see {@link
-     * InputMethodContext#enableClientWindowNotification
-     * InputMethodContext.enableClientWindowNotification}). Calls
-     * to this method are temporarily suspended if the input context's
-     * {@link java.awt.im.InputContext#removeNotify removeNotify}
-     * method is called, and resume when the input method is activated
-     * for a new client component. It is called in the following
-     * situations:
-     * <ul>
-     * <li>
-     * when the window containing the current client component changes
-     * in location, size, visibility, iconification state, or when the
-     * window is closed.</li>
-     * <li>
-     * from <code> enableClientWindowNotification(inputMethod,
-     * true)</code> if the current client component exists,</li>
-     * <li>
-     * when activating the input method for the first time after it
-     * called
-     * <code>enableClientWindowNotification(inputMethod,
-     * true)</code> if during the call no current client component was
-     * available,</li>
-     * <li>
-     * when activating the input method for a new client component
-     * after the input context's removeNotify method has been
-     * called.</li>
-     * </ul>
-     * @param bounds client window's {@link
-     * java.awt.Component#getBounds bounds} on the screen; or null if
-     * the client window is iconified or invisible
-     */
-    public void notifyClientWindowChange(Rectangle bounds) {
-    }
-
-    /**
-     * Activates the input method for immediate input processing.
-     * <p>
-     * If an input method provides its own windows, it should make sure
-     * at this point that all necessary windows are open and visible.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
-     *     when a client component receives a FOCUS_GAINED event,
-     * <li>when switching to this input method from a different one using the
-     *     user interface or
-     *     {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
-     * </ul>
-     * The method is only called when the input method is inactive.
-     * A newly instantiated input method is assumed to be inactive.
-     */
-    public void activate() {
-        //System.out.println("activated");
-    }
-
-    /**
-     * Deactivates the input method.
-     * The isTemporary argument has the same meaning as in
-     * {@link java.awt.event.FocusEvent#isTemporary FocusEvent.isTemporary}.
-     * <p>
-     * If an input method provides its own windows, only windows that relate
-     * to the current composition (such as a lookup choice window) should be
-     * closed at this point.
-     * It is possible that the input method will be immediately activated again
-     * for a different client component, and closing and reopening more
-     * persistent windows (such as a control panel) would create unnecessary
-     * screen flicker.
-     * Before an instance of a different input method class is activated,
-     * {@link #hideWindows} is called on the current input method.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
-     *     when a client component receives a FOCUS_LOST event,
-     * <li>when switching from this input method to a different one using the
-     *     user interface or
-     *     {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
-     * <li>before {@link #removeNotify removeNotify} if the current client component is
-     *     removed.
-     * </ul>
-     * The method is only called when the input method is active.
-     *
-     * @param isTemporary whether the focus change is temporary
-     */
-    public void deactivate(boolean isTemporary) {
-        //System.out.println("deactivated");
-    }
-
-    /**
-     * Closes or hides all windows opened by this input method instance or
-     * its class.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>before calling {@link #activate activate} on an instance of a different input
-     *     method class,
-     * <li>before calling {@link #dispose dispose} on this input method.
-     * </ul>
-     * The method is only called when the input method is inactive.
-     */
-    public void hideWindows() {
-    }
-
-    /**
-     * Notifies the input method that a client component has been
-     * removed from its containment hierarchy, or that input method
-     * support has been disabled for the component.
-     * <p>
-     * This method is called by {@link java.awt.im.InputContext#removeNotify InputContext.removeNotify}.
-     * <p>
-     * The method is only called when the input method is inactive.
-     */
-    public void removeNotify() {
-    }
-
-    /**
-     * Ends any input composition that may currently be going on in this
-     * context. Depending on the platform and possibly user preferences,
-     * this may commit or delete uncommitted text. Any changes to the text
-     * are communicated to the active component using an input method event.
-     *
-     * <p>
-     * A text editing component may call this in a variety of situations,
-     * for example, when the user moves the insertion point within the text
-     * (but outside the composed text), or when the component's text is
-     * saved to a file or copied to the clipboard.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>by {@link java.awt.im.InputContext#endComposition InputContext.endComposition},
-     * <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
-     *     when switching to a different client component
-     * <li>when switching from this input method to a different one using the
-     *     user interface or
-     *     {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
-     * </ul>
-     */
-    public void endComposition() {
-
-        impl.endComposition();
-    }
-
-    /**
-     * Disposes of the input method and releases the resources used by it.
-     * In particular, the input method should dispose windows and close files that are no
-     * longer needed.
-     * <p>
-     * This method is called by {@link java.awt.im.InputContext#dispose InputContext.dispose}.
-     * <p>
-     * The method is only called when the input method is inactive.
-     * No method of this interface is called on this instance after dispose.
-     */
-    public void dispose() {
-    }
-
-    /**
-     * Returns a control object from this input method, or null. A
-     * control object provides methods that control the behavior of the
-     * input method or obtain information from the input method. The type
-     * of the object is an input method specific class. Clients have to
-     * compare the result against known input method control object
-     * classes and cast to the appropriate class to invoke the methods
-     * provided.
-     * <p>
-     * This method is called by
-     * {@link java.awt.im.InputContext#getInputMethodControlObject InputContext.getInputMethodControlObject}.
-     *
-     * @return a control object from this input method, or null
-     */
-    public Object getControlObject() {
-
-        return null;
-    }
-}
--- a/src/share/classes/com/sun/inputmethods/internal/indicim/IndicInputMethodImpl.java	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,475 +0,0 @@
-/*
- * Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * (C) Copyright IBM Corp. 2000 - All Rights Reserved
- *
- * The original version of this source code and documentation is
- * copyrighted and owned by IBM. These materials are provided
- * under terms of a License Agreement between IBM and Sun.
- * This technology is protected by multiple US and International
- * patents. This notice and attribution to IBM may not be removed.
- *
- */
-
-package com.sun.inputmethods.internal.indicim;
-
-import java.awt.im.spi.InputMethodContext;
-
-import java.awt.event.KeyEvent;
-import java.awt.event.InputMethodEvent;
-import java.awt.font.TextAttribute;
-import java.awt.font.TextHitInfo;
-
-import java.text.AttributedCharacterIterator;
-
-import java.util.Hashtable;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-class IndicInputMethodImpl {
-
-    protected char[] KBD_MAP;
-
-    private static final char SUBSTITUTION_BASE = '\uff00';
-
-    // Indexed by map value - SUBSTITUTION_BASE
-    protected char[][] SUBSTITUTION_TABLE;
-
-    // Invalid character.
-    private static final char INVALID_CHAR              = '\uffff';
-
-    // Unmapped versions of some interesting characters.
-    private static final char KEY_SIGN_VIRAMA           = '\u0064'; // or just 'd'??
-    private static final char KEY_SIGN_NUKTA            = '\u005d';  // or just ']'??
-
-    // Two succeeding viramas are replaced by one virama and one ZWNJ.
-    // Viram followed by Nukta is replaced by one VIRAMA and one ZWJ
-    private static final char ZWJ                       = '\u200d';
-    private static final char ZWNJ                      = '\u200c';
-
-    // Backspace
-    private static final char BACKSPACE                 = '\u0008';
-
-    // Sorted list of characters which can be followed by Nukta
-    protected char[] JOIN_WITH_NUKTA;
-
-    // Nukta form of the above characters
-    protected char[] NUKTA_FORM;
-
-    private int log2;
-    private int power;
-    private int extra;
-
-    // cached TextHitInfo. Only one type of TextHitInfo is required.
-    private static final TextHitInfo ZERO_TRAILING_HIT_INFO = TextHitInfo.trailing(0);
-
-    /**
-     * Returns the index of the given character in the JOIN_WITH_NUKTA array.
-     * If character is not found, -1 is returned.
-     */
-    private int nuktaIndex(char ch) {
-
-        if (JOIN_WITH_NUKTA == null) {
-            return -1;
-        }
-
-        int probe = power;
-        int index = 0;
-
-        if (JOIN_WITH_NUKTA[extra] <= ch) {
-            index = extra;
-        }
-
-        while (probe > (1 << 0)) {
-            probe >>= 1;
-
-            if (JOIN_WITH_NUKTA[index + probe] <= ch) {
-                index += probe;
-            }
-        }
-
-        if (JOIN_WITH_NUKTA[index] != ch) {
-            index = -1;
-        }
-
-        return index;
-    }
-
-    /**
-     * Returns the equivalent character for hindi locale.
-     * @param originalChar The original character.
-     */
-    private char getMappedChar( char originalChar )
-    {
-        if (originalChar <= KBD_MAP.length) {
-            return KBD_MAP[originalChar];
-        }
-
-        return originalChar;
-    }//getMappedChar()
-
-    // Array used to hold the text to be sent.
-    // If the last character was not committed it is stored in text[0].
-    // The variable totalChars give an indication of whether the last
-    // character was committed or not. If at any time ( but not within a
-    // a call to dispatchEvent ) totalChars is not equal to 0 ( it can
-    // only be 1 otherwise ) the last character was not committed.
-    private char [] text = new char[4];
-
-    // this is always 0 before and after call to dispatchEvent. This character assumes
-    // significance only within a call to dispatchEvent.
-    private int committedChars = 0;// number of committed characters
-
-    // the total valid characters in variable text currently.
-    private int totalChars = 0;//number of total characters ( committed + composed )
-
-    private boolean lastCharWasVirama = false;
-
-    private InputMethodContext context;
-
-    //
-    // Finds the high bit by binary searching
-    // through the bits in n.
-    //
-    private static byte highBit(int n)
-    {
-        if (n <= 0) {
-            return -32;
-        }
-
-        byte bit = 0;
-
-        if (n >= 1 << 16) {
-            n >>= 16;
-            bit += 16;
-        }
-
-        if (n >= 1 << 8) {
-            n >>= 8;
-            bit += 8;
-        }
-
-        if (n >= 1 << 4) {
-            n >>= 4;
-            bit += 4;
-        }
-
-        if (n >= 1 << 2) {
-            n >>= 2;
-            bit += 2;
-        }
-
-        if (n >= 1 << 1) {
-            n >>= 1;
-            bit += 1;
-        }
-
-        return bit;
-    }
-
-    IndicInputMethodImpl(char[] keyboardMap, char[] joinWithNukta, char[] nuktaForm,
-                         char[][] substitutionTable) {
-        KBD_MAP = keyboardMap;
-        JOIN_WITH_NUKTA = joinWithNukta;
-        NUKTA_FORM = nuktaForm;
-        SUBSTITUTION_TABLE = substitutionTable;
-
-        if (JOIN_WITH_NUKTA != null) {
-            int log2 = highBit(JOIN_WITH_NUKTA.length);
-
-            power = 1 << log2;
-            extra = JOIN_WITH_NUKTA.length - power;
-        } else {
-            power = extra = 0;
-        }
-
-    }
-
-    void setInputMethodContext(InputMethodContext context) {
-
-        this.context = context;
-    }
-
-    void handleKeyTyped(KeyEvent kevent) {
-
-        char keyChar = kevent.getKeyChar();
-        char currentChar = getMappedChar(keyChar);
-
-        // The Explicit and Soft Halanta case.
-        if ( lastCharWasVirama ) {
-            switch (keyChar) {
-            case KEY_SIGN_NUKTA:
-                currentChar = ZWJ;
-                break;
-            case KEY_SIGN_VIRAMA:
-                currentChar = ZWNJ;
-                break;
-            default:
-            }//endSwitch
-        }//endif
-
-        if (currentChar == INVALID_CHAR) {
-            kevent.consume();
-            return;
-        }
-
-        if (currentChar == BACKSPACE) {
-            lastCharWasVirama = false;
-
-            if (totalChars > 0) {
-                totalChars = committedChars = 0;
-            } else {
-                return;
-            }
-        }
-        else if (keyChar == KEY_SIGN_NUKTA) {
-            int nuktaIndex = nuktaIndex(text[0]);
-
-            if (nuktaIndex != -1) {
-                text[0] = NUKTA_FORM[nuktaIndex];
-            } else {
-                // the last character was committed, commit just Nukta.
-                // Note : the lastChar must have been committed if it is not one of
-                // the characters which combine with nukta.
-                // the state must be totalChars = committedChars = 0;
-                text[totalChars++] = currentChar;
-            }
-
-            committedChars += 1;
-        }
-        else {
-            int nuktaIndex = nuktaIndex(currentChar);
-
-            if (nuktaIndex != -1) {
-                // Commit everything but currentChar
-                text[totalChars++] = currentChar;
-                committedChars = totalChars-1;
-            } else {
-                if (currentChar >= SUBSTITUTION_BASE) {
-                    char[] sub = SUBSTITUTION_TABLE[currentChar - SUBSTITUTION_BASE];
-
-                    System.arraycopy(sub, 0, text, totalChars, sub.length);
-                    totalChars += sub.length;
-                } else {
-                    text[totalChars++] = currentChar;
-                }
-
-                committedChars = totalChars;
-            }
-        }
-
-        ACIText aText = new ACIText( text, 0, totalChars, committedChars );
-        int composedCharLength = totalChars - committedChars;
-        TextHitInfo caret=null,visiblePosition=null;
-        switch( composedCharLength ) {
-            case 0:
-                break;
-            case 1:
-                visiblePosition = caret = ZERO_TRAILING_HIT_INFO;
-                break;
-            default:
-                assert false : "The code should not reach here. There is no case where there can be more than one character pending.";
-        }
-
-        context.dispatchInputMethodEvent(InputMethodEvent.INPUT_METHOD_TEXT_CHANGED,
-                                         aText,
-                                         committedChars,
-                                         caret,
-                                         visiblePosition);
-
-        if (totalChars == 0) {
-            text[0] = INVALID_CHAR;
-        } else {
-            text[0] = text[totalChars - 1];// make text[0] hold the last character
-        }
-
-        lastCharWasVirama =  keyChar == KEY_SIGN_VIRAMA && !lastCharWasVirama;
-
-        totalChars -= committedChars;
-        committedChars = 0;
-        // state now text[0] = last character
-        // totalChars = ( last character committed )? 0 : 1;
-        // committedChars = 0;
-
-        kevent.consume();// prevent client from getting this event.
-    }//dispatchEvent()
-
-    void endComposition() {
-        if( totalChars != 0 ) {// if some character is not committed.
-            ACIText aText = new ACIText( text, 0, totalChars, totalChars );
-            context.dispatchInputMethodEvent( InputMethodEvent.INPUT_METHOD_TEXT_CHANGED,
-                                aText, totalChars, null, null );
-            totalChars = committedChars = 0;
-            text[0] = INVALID_CHAR;
-            lastCharWasVirama = false;
-        }//end if
-    }//endComposition()
-
-    // custom AttributedCharacterIterator -- much lightweight since currently there is no
-    // attribute defined on the text being generated by the input method.
-    private class ACIText implements AttributedCharacterIterator {
-        private char [] text = null;
-        private int committed = 0;
-        private int index = 0;
-
-        ACIText( char [] chArray, int offset, int length, int committed ) {
-            this.text = new char[length];
-            this.committed = committed;
-            System.arraycopy( chArray, offset, text, 0, length );
-        }//c'tor
-
-        // CharacterIterator methods.
-        public char first() {
-            return _setIndex( 0 );
-        }
-
-        public char last() {
-            if( text.length == 0 ) {
-                return _setIndex( text.length );
-            }
-            return _setIndex( text.length - 1 );
-        }
-
-        public char current() {
-            if( index == text.length )
-                return DONE;
-            return text[index];
-        }
-
-        public char next() {
-            if( index == text.length ) {
-                return DONE;
-            }
-            return _setIndex( index + 1 );
-        }
-
-        public char previous() {
-            if( index == 0 )
-                return DONE;
-            return _setIndex( index - 1 );
-        }
-
-        public char setIndex(int position) {
-            if( position < 0 || position > text.length ) {
-                throw new IllegalArgumentException();
-            }
-            return _setIndex( position );
-        }
-
-        public int getBeginIndex() {
-            return 0;
-        }
-
-        public int getEndIndex() {
-            return text.length;
-        }
-
-        public int getIndex() {
-            return index;
-        }
-
-        public Object clone() {
-            try {
-                ACIText clone = (ACIText) super.clone();
-                return clone;
-            } catch (CloneNotSupportedException e) {
-                throw new InternalError();
-            }
-        }
-
-
-        // AttributedCharacterIterator methods.
-        public int getRunStart() {
-            return index >= committed ? committed : 0;
-        }
-
-        public int getRunStart(AttributedCharacterIterator.Attribute attribute) {
-            return (index >= committed &&
-                attribute == TextAttribute.INPUT_METHOD_UNDERLINE) ? committed : 0;
-        }
-
-        public int getRunStart(Set<? extends Attribute> attributes) {
-            return (index >= committed &&
-                    attributes.contains(TextAttribute.INPUT_METHOD_UNDERLINE)) ? committed : 0;
-        }
-
-        public int getRunLimit() {
-            return index < committed ? committed : text.length;
-        }
-
-        public int getRunLimit(AttributedCharacterIterator.Attribute attribute) {
-            return (index < committed &&
-                    attribute == TextAttribute.INPUT_METHOD_UNDERLINE) ? committed : text.length;
-        }
-
-        public int getRunLimit(Set<? extends Attribute> attributes) {
-            return (index < committed &&
-                    attributes.contains(TextAttribute.INPUT_METHOD_UNDERLINE)) ? committed : text.length;
-        }
-
-        public Map getAttributes() {
-            Hashtable result = new Hashtable();
-            if (index >= committed && committed < text.length) {
-                result.put(TextAttribute.INPUT_METHOD_UNDERLINE,
-                           TextAttribute.UNDERLINE_LOW_ONE_PIXEL);
-            }
-            return result;
-        }
-
-        public Object getAttribute(AttributedCharacterIterator.Attribute attribute) {
-            if (index >= committed &&
-                committed < text.length &&
-                attribute == TextAttribute.INPUT_METHOD_UNDERLINE) {
-
-                return TextAttribute.UNDERLINE_LOW_ONE_PIXEL;
-            }
-            return null;
-        }
-
-        public Set getAllAttributeKeys() {
-            HashSet result = new HashSet();
-            if (committed < text.length) {
-                result.add(TextAttribute.INPUT_METHOD_UNDERLINE);
-            }
-            return result;
-        }
-
-        // private methods
-
-        /**
-         * This is always called with valid i ( 0 < i <= text.length )
-         */
-        private char _setIndex( int i ) {
-            index = i;
-            if( i == text.length ) {
-                return DONE;
-            }
-            return text[i];
-        }//_setIndex()
-
-    }//end of inner class
-}
--- a/src/share/classes/com/sun/inputmethods/internal/indicim/java.awt.im.spi.InputMethodDescriptor	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-com.sun.inputmethods.internal.indicim.DevanagariInputMethodDescriptor
--- a/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames.properties	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari  = Devanagari Input Method
-
--- a/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_de.properties	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari  = Devanagari Input Method
--- a/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_es.properties	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari  = Devanagari Input Method
--- a/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_fr.properties	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari  = Devanagari Input Method
--- a/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_it.properties	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari  = Devanagari Input Method
--- a/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_ja.properties	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari  = \u30c7\u30fc\u30f4\u30a1\u30ca\u30fc\u30ac\u30ea\u30fc\u30a4\u30f3\u30d7\u30c3\u30c8\u30e1\u30bd\u30c3\u30c9
--- a/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_ko.properties	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari  = Devanagari \uc785\ub825 \uba54\uc18c\ub4dc
--- a/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_sv.properties	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari  = Devanagari Input Method
--- a/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_zh_CN.properties	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari  = Devanagari \u8f93\u5165\u6cd5
--- a/src/share/classes/com/sun/inputmethods/internal/indicim/resources/DisplayNames_zh_TW.properties	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-#
-# Default Input method display names for Indic input methods
-#
-
-DisplayName.Devanagari  = Devanagari \u8f38\u5165\u6cd5
--- a/src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiInputMethod.java	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,437 +0,0 @@
-/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 2000 - All Rights Reserved
- *
- * The original version of this source code and documentation is
- * copyrighted and owned by IBM. These materials are provided
- * under terms of a License Agreement between IBM and Sun.
- * This technology is protected by multiple US and International
- * patents. This notice and attribution to IBM may not be removed.
- *
- */
-
-package com.sun.inputmethods.internal.thaiim;
-
-import java.awt.im.spi.InputMethod;
-import java.awt.im.spi.InputMethodContext;
-
-import java.awt.AWTEvent;
-import java.awt.Rectangle;
-
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseEvent;
-
-import java.lang.Character.Subset;
-
-import java.util.Locale;
-
-class ThaiInputMethod implements InputMethod {
-
-    private ThaiInputMethodImpl impl;
-    private Locale locale;
-
-    ThaiInputMethod(Locale theLocale, ThaiInputMethodImpl theImplementation) {
-        locale = theLocale;
-        impl = theImplementation;
-    }
-
-    /**
-     * Sets the input method context, which is used to dispatch input method
-     * events to the client component and to request information from
-     * the client component.
-     * <p>
-     * This method is called once immediately after instantiating this input
-     * method.
-     *
-     * @param context the input method context for this input method
-     * @exception NullPointerException if <code>context</code> is null
-     */
-    public void setInputMethodContext(InputMethodContext context) {
-
-        impl.setInputMethodContext(context);
-    }
-
-    /**
-     * Attempts to set the input locale. If the input method supports the
-     * desired locale, it changes its behavior to support input for the locale
-     * and returns true.
-     * Otherwise, it returns false and does not change its behavior.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>by {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
-     * <li>when switching to this input method through the user interface if the user
-     *     specified a locale or if the previously selected input method's
-     *     {@link java.awt.im.spi.InputMethod#getLocale getLocale} method
-     *     returns a non-null value.
-     * </ul>
-     *
-     * @param locale locale to input
-     * @return whether the specified locale is supported
-     * @exception NullPointerException if <code>locale</code> is null
-     */
-    public boolean setLocale(Locale locale) {
-
-        if (locale.getLanguage().equals(this.locale.getLanguage())) {
-            //System.out.println("returning true for locale " + locale);
-            return true;
-        }
-        else {
-            //System.out.println("returning false for locale " + locale);
-            return false;
-        }
-    }
-
-    /**
-     * Returns the current input locale. Might return null in exceptional cases.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>by {@link java.awt.im.InputContext#getLocale InputContext.getLocale} and
-     * <li>when switching from this input method to a different one through the
-     *     user interface.
-     * </ul>
-     *
-     * @return the current input locale, or null
-     */
-    public Locale getLocale() {
-
-        return locale;
-    }
-
-    /**
-     * Sets the subsets of the Unicode character set that this input method
-     * is allowed to input. Null may be passed in to indicate that all
-     * characters are allowed.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>immediately after instantiating this input method,
-     * <li>when switching to this input method from a different one, and
-     * <li>by {@link java.awt.im.InputContext#setCharacterSubsets InputContext.setCharacterSubsets}.
-     * </ul>
-     *
-     * @param subsets the subsets of the Unicode character set from which
-     * characters may be input
-     */
-    public void setCharacterSubsets(Subset[] subsets) {
-    }
-
-    /**
-     * Enables or disables this input method for composition,
-     * depending on the value of the parameter <code>enable</code>.
-     * <p>
-     * An input method that is enabled for composition interprets incoming
-     * events for both composition and control purposes, while a
-     * disabled input method does not interpret events for composition.
-     * Note however that events are passed on to the input method regardless
-     * whether it is enabled or not, and that an input method that is disabled
-     * for composition may still interpret events for control purposes,
-     * including to enable or disable itself for composition.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>by {@link java.awt.im.InputContext#setCompositionEnabled InputContext.setCompositionEnabled},
-     * <li>when switching to this input method from a different one using the
-     *     user interface or
-     *     {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
-     *     if the previously selected input method's
-     *     {@link java.awt.im.spi.InputMethod#isCompositionEnabled isCompositionEnabled}
-     *     method returns without throwing an exception.
-     * </ul>
-     *
-     * @param enable whether to enable the input method for composition
-     * @throws UnsupportedOperationException if this input method does not
-     * support the enabling/disabling operation
-     * @see #isCompositionEnabled
-     */
-    public void setCompositionEnabled(boolean enable) {
-
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Determines whether this input method is enabled.
-     * An input method that is enabled for composition interprets incoming
-     * events for both composition and control purposes, while a
-     * disabled input method does not interpret events for composition.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>by {@link java.awt.im.InputContext#isCompositionEnabled InputContext.isCompositionEnabled} and
-     * <li>when switching from this input method to a different one using the
-     *     user interface or
-     *     {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
-     * </ul>
-     *
-     * @return <code>true</code> if this input method is enabled for
-     * composition; <code>false</code> otherwise.
-     * @throws UnsupportedOperationException if this input method does not
-     * support checking whether it is enabled for composition
-     * @see #setCompositionEnabled
-     */
-    public boolean isCompositionEnabled() {
-
-        return true;
-    }
-
-    /**
-     * Starts the reconversion operation. The input method obtains the
-     * text to be reconverted from the current client component using the
-     * {@link java.awt.im.InputMethodRequests#getSelectedText InputMethodRequests.getSelectedText}
-     * method. It can use other <code>InputMethodRequests</code>
-     * methods to request additional information required for the
-     * reconversion operation. The composed and committed text
-     * produced by the operation is sent to the client component as a
-     * sequence of <code>InputMethodEvent</code>s. If the given text
-     * cannot be reconverted, the same text should be sent to the
-     * client component as committed text.
-     * <p>
-     * This method is called by
-     * {@link java.awt.im.InputContext#reconvert() InputContext.reconvert}.
-     *
-     * @throws UnsupportedOperationException if the input method does not
-     * support the reconversion operation.
-     */
-    public void reconvert() {
-
-        throw new UnsupportedOperationException("This input method does not reconvert.");
-    }
-
-    /**
-     * Dispatches the event to the input method. If input method support is
-     * enabled for the focussed component, incoming events of certain types
-     * are dispatched to the current input method for this component before
-     * they are dispatched to the component's methods or event listeners.
-     * The input method decides whether it needs to handle the event. If it
-     * does, it also calls the event's <code>consume</code> method; this
-     * causes the event to not get dispatched to the component's event
-     * processing methods or event listeners.
-     * <p>
-     * Events are dispatched if they are instances of InputEvent or its
-     * subclasses.
-     * This includes instances of the AWT classes KeyEvent and MouseEvent.
-     * <p>
-     * This method is called by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}.
-     *
-     * @param event the event being dispatched to the input method
-     * @exception NullPointerException if <code>event</code> is null
-     */
-    public void dispatchEvent(AWTEvent event) {
-
-        if (event instanceof KeyEvent) {
-
-            KeyEvent keyEvent = (KeyEvent) event;
-            if (event.getID() == KeyEvent.KEY_TYPED) {
-                //System.out.println("handled event " + event);
-                impl.handleKeyTyped(keyEvent);
-            }
-        }
-        else {
-            //System.out.println("did not handle event " + event);
-        }
-    }
-
-    /**
-     * Notifies this input method of changes in the client window
-     * location or state. This method is called while this input
-     * method is the current input method of its input context and
-     * notifications for it are enabled (see {@link
-     * InputMethodContext#enableClientWindowNotification
-     * InputMethodContext.enableClientWindowNotification}). Calls
-     * to this method are temporarily suspended if the input context's
-     * {@link java.awt.im.InputContext#removeNotify removeNotify}
-     * method is called, and resume when the input method is activated
-     * for a new client component. It is called in the following
-     * situations:
-     * <ul>
-     * <li>
-     * when the window containing the current client component changes
-     * in location, size, visibility, iconification state, or when the
-     * window is closed.</li>
-     * <li>
-     * from <code> enableClientWindowNotification(inputMethod,
-     * true)</code> if the current client component exists,</li>
-     * <li>
-     * when activating the input method for the first time after it
-     * called
-     * <code>enableClientWindowNotification(inputMethod,
-     * true)</code> if during the call no current client component was
-     * available,</li>
-     * <li>
-     * when activating the input method for a new client component
-     * after the input context's removeNotify method has been
-     * called.</li>
-     * </ul>
-     * @param bounds client window's {@link
-     * java.awt.Component#getBounds bounds} on the screen; or null if
-     * the client window is iconified or invisible
-     */
-    public void notifyClientWindowChange(Rectangle bounds) {
-    }
-
-    /**
-     * Activates the input method for immediate input processing.
-     * <p>
-     * If an input method provides its own windows, it should make sure
-     * at this point that all necessary windows are open and visible.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
-     *     when a client component receives a FOCUS_GAINED event,
-     * <li>when switching to this input method from a different one using the
-     *     user interface or
-     *     {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
-     * </ul>
-     * The method is only called when the input method is inactive.
-     * A newly instantiated input method is assumed to be inactive.
-     */
-    public void activate() {
-        //System.out.println("activated");
-    }
-
-    /**
-     * Deactivates the input method.
-     * The isTemporary argument has the same meaning as in
-     * {@link java.awt.event.FocusEvent#isTemporary FocusEvent.isTemporary}.
-     * <p>
-     * If an input method provides its own windows, only windows that relate
-     * to the current composition (such as a lookup choice window) should be
-     * closed at this point.
-     * It is possible that the input method will be immediately activated again
-     * for a different client component, and closing and reopening more
-     * persistent windows (such as a control panel) would create unnecessary
-     * screen flicker.
-     * Before an instance of a different input method class is activated,
-     * {@link #hideWindows} is called on the current input method.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
-     *     when a client component receives a FOCUS_LOST event,
-     * <li>when switching from this input method to a different one using the
-     *     user interface or
-     *     {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod},
-     * <li>before {@link #removeNotify removeNotify} if the current client component is
-     *     removed.
-     * </ul>
-     * The method is only called when the input method is active.
-     *
-     * @param isTemporary whether the focus change is temporary
-     */
-    public void deactivate(boolean isTemporary) {
-        //System.out.println("deactivated");
-    }
-
-    /**
-     * Closes or hides all windows opened by this input method instance or
-     * its class.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>before calling {@link #activate activate} on an instance of a different input
-     *     method class,
-     * <li>before calling {@link #dispose dispose} on this input method.
-     * </ul>
-     * The method is only called when the input method is inactive.
-     */
-    public void hideWindows() {
-    }
-
-    /**
-     * Notifies the input method that a client component has been
-     * removed from its containment hierarchy, or that input method
-     * support has been disabled for the component.
-     * <p>
-     * This method is called by {@link java.awt.im.InputContext#removeNotify InputContext.removeNotify}.
-     * <p>
-     * The method is only called when the input method is inactive.
-     */
-    public void removeNotify() {
-    }
-
-    /**
-     * Ends any input composition that may currently be going on in this
-     * context. Depending on the platform and possibly user preferences,
-     * this may commit or delete uncommitted text. Any changes to the text
-     * are communicated to the active component using an input method event.
-     *
-     * <p>
-     * A text editing component may call this in a variety of situations,
-     * for example, when the user moves the insertion point within the text
-     * (but outside the composed text), or when the component's text is
-     * saved to a file or copied to the clipboard.
-     * <p>
-     * This method is called
-     * <ul>
-     * <li>by {@link java.awt.im.InputContext#endComposition InputContext.endComposition},
-     * <li>by {@link java.awt.im.InputContext#dispatchEvent InputContext.dispatchEvent}
-     *     when switching to a different client component
-     * <li>when switching from this input method to a different one using the
-     *     user interface or
-     *     {@link java.awt.im.InputContext#selectInputMethod InputContext.selectInputMethod}.
-     * </ul>
-     */
-    public void endComposition() {
-
-        impl.endComposition();
-    }
-
-    /**
-     * Disposes of the input method and releases the resources used by it.
-     * In particular, the input method should dispose windows and close files that are no
-     * longer needed.
-     * <p>
-     * This method is called by {@link java.awt.im.InputContext#dispose InputContext.dispose}.
-     * <p>
-     * The method is only called when the input method is inactive.
-     * No method of this interface is called on this instance after dispose.
-     */
-    public void dispose() {
-    }
-
-    /**
-     * Returns a control object from this input method, or null. A
-     * control object provides methods that control the behavior of the
-     * input method or obtain information from the input method. The type
-     * of the object is an input method specific class. Clients have to
-     * compare the result against known input method control object
-     * classes and cast to the appropriate class to invoke the methods
-     * provided.
-     * <p>
-     * This method is called by
-     * {@link java.awt.im.InputContext#getInputMethodControlObject InputContext.getInputMethodControlObject}.
-     *
-     * @return a control object from this input method, or null
-     */
-    public Object getControlObject() {
-
-        return null;
-    }
-}
--- a/src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiInputMethodDescriptor.java	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 2000 - All Rights Reserved
- *
- * The original version of this source code and documentation is
- * copyrighted and owned by IBM. These materials are provided
- * under terms of a License Agreement between IBM and Sun.
- * This technology is protected by multiple US and International
- * patents. This notice and attribution to IBM may not be removed.
- *
- */
-
-package com.sun.inputmethods.internal.thaiim;
-
-import java.awt.Image;
-import java.awt.im.spi.InputMethod;
-import java.awt.im.spi.InputMethodDescriptor;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-public class ThaiInputMethodDescriptor implements InputMethodDescriptor {
-
-    static final Locale THAI = new Locale("th");
-
-    public ThaiInputMethodDescriptor() {
-    }
-
-    /**
-     * @see java.awt.im.spi.InputMethodDescriptor#getAvailableLocales
-     */
-    public Locale[] getAvailableLocales() {
-        return new Locale[] { THAI };
-    }
-
-    /**
-     * @see java.awt.im.spi.InputMethodDescriptor#hasDynamicLocaleList
-     */
-    public boolean hasDynamicLocaleList() {
-        return false;
-    }
-
-    /**
-     * @see java.awt.im.spi.InputMethodDescriptor#getInputMethodDisplayName
-     */
-    public synchronized String getInputMethodDisplayName(Locale inputLocale, Locale displayLanguage) {
-        try {
-            ResourceBundle resources = ResourceBundle.getBundle(
-                "com.sun.inputmethods.internal.thaiim.resources.DisplayNames", displayLanguage);
-            return resources.getString("DisplayName.Thai");
-        } catch (MissingResourceException mre) {
-            return "Thai Input Method";
-        }
-    }
-
-    /**
-     * @see java.awt.im.spi.InputMethodDescriptor#getInputMethodIcon
-     */
-    public Image getInputMethodIcon(Locale inputLocale) {
-        return null;
-    }
-
-    /**
-     * @see java.awt.im.spi.InputMethodDescriptor#createInputMethod
-     */
-    public InputMethod createInputMethod() throws Exception {
-        ThaiInputMethodImpl impl = new ThaiInputMethodImpl();
-        return new ThaiInputMethod(THAI, impl);
-    }
-
-    public String toString() {
-        return getClass().getName();
-    }
-}
--- a/src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiInputMethodImpl.java	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,235 +0,0 @@
-/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- *
- * (C) Copyright IBM Corp. 2000 - All Rights Reserved
- *
- * The original version of this source code and documentation is
- * copyrighted and owned by IBM. These materials are provided
- * under terms of a License Agreement between IBM and Sun.
- * This technology is protected by multiple US and International
- * patents. This notice and attribution to IBM may not be removed.
- *
- */
-
-package com.sun.inputmethods.internal.thaiim;
-
-import java.awt.im.InputMethodRequests;
-import java.awt.im.spi.InputMethodContext;
-
-import java.awt.Toolkit;
-import java.awt.event.KeyEvent;
-import java.awt.event.InputMethodEvent;
-import java.awt.font.TextAttribute;
-import java.awt.font.TextHitInfo;
-
-import java.text.AttributedCharacterIterator;
-import java.text.AttributedString;
-
-class ThaiInputMethodImpl {
-
-    private static final char[] keyboardMap = {
-        /* 00 */ '\u0000',
-        /* 01 */ '\u0001',
-        /* 02 */ '\u0002',
-        /* 03 */ '\u0003',
-        /* 04 */ '\u0004',
-        /* 05 */ '\u0005',
-        /* 06 */ '\u0006',
-        /* 07 */ '\u0007',
-        /* 08 */ '\u0008',
-        /* 09 */ '\u0009',
-        /* 0A */ '\012',
-        /* 0B */ '\u000B',
-        /* 0C */ '\u000C',
-        /* 0D */ '\015',
-        /* 0E */ '\u000E',
-        /* 0F */ '\u000F',
-        /* 10 */ '\u0010',
-        /* 11 */ '\u0011',
-        /* 12 */ '\u0012',
-        /* 13 */ '\u0013',
-        /* 14 */ '\u0014',
-        /* 15 */ '\u0015',
-        /* 16 */ '\u0016',
-        /* 17 */ '\u0017',
-        /* 18 */ '\u0018',
-        /* 19 */ '\u0019',
-        /* 1A */ '\u001A',
-        /* 1B */ '\u001B',
-        /* 1C */ '\u001C',
-        /* 1D */ '\u001D',
-        /* 1E */ '\u001E',
-        /* 1F */ '\u001F',
-        /* 20 */ '\u0020',
-        /* 21 */ '\u0e45',   // '!'
-        /* 22 */ '\u002e',   // '"'
-        /* 23 */ '\u0e52',   // '#'
-        /* 24 */ '\u0e53',   // '$'
-        /* 25 */ '\u0e54',   // '%'
-        /* 26 */ '\u0e4e',   // '&'
-        /* 27 */ '\u0e07',   // '''
-        /* 28 */ '\u0e56',   // '('
-        /* 29 */ '\u0e57',   // ')'
-        /* 2A */ '\u0e55',   // '*'
-        /* 2B */ '\u0e59',   // '+'
-        /* 2C */ '\u0e21',   // ','
-        /* 2D */ '\u0e02',   // '-'
-        /* 2E */ '\u0e43',   // '.'
-        /* 2F */ '\u0e1d',   // '/'
-        /* 30 */ '\u0e08',   // '0'
-        /* 31 */ '\u0e3f',   // '1'
-        /* 32 */ '\u002f',   // '2'
-        /* 33 */ '\u002d',   // '3'
-        /* 34 */ '\u0e20',   // '4'
-        /* 35 */ '\u0e16',   // '5'
-        /* 36 */ '\u0e38',   // '6'
-        /* 37 */ '\u0e36',   // '7'
-        /* 38 */ '\u0e04',   // '8'
-        /* 39 */ '\u0e15',   // '9'
-        /* 3A */ '\u0e0b',   // ':'
-        /* 3B */ '\u0e27',   // ';'
-        /* 3C */ '\u0e12',   // '<'
-        /* 3D */ '\u0e0a',   // '='
-        /* 3E */ '\u0e2c',   // '>'
-        /* 3F */ '\u0e26',   // '?'
-        /* 40 */ '\u0e51',   // '@'
-        /* 41 */ '\u0e24',   // 'A'
-        /* 42 */ '\u0e3a',   // 'B'
-        /* 43 */ '\u0e09',   // 'C'
-        /* 44 */ '\u0e0f',   // 'D'
-        /* 45 */ '\u0e0e',   // 'E'
-        /* 46 */ '\u0e42',   // 'F'
-        /* 47 */ '\u0e0c',   // 'G'
-        /* 48 */ '\u0e47',   // 'H'
-        /* 49 */ '\u0e13',   // 'I'
-        /* 4A */ '\u0e4b',   // 'J'
-        /* 4B */ '\u0e29',   // 'K'
-        /* 4C */ '\u0e28',   // 'L'
-        /* 4D */ '\u003f',   // 'M'
-        /* 4E */ '\u0e4c',   // 'N'
-        /* 4F */ '\u0e2f',   // 'O'
-        /* 50 */ '\u0e0d',   // 'P'
-        /* 51 */ '\u0e50',   // 'Q'
-        /* 52 */ '\u0e11',   // 'R'
-        /* 53 */ '\u0e06',   // 'S'
-        /* 54 */ '\u0e18',   // 'T'
-        /* 55 */ '\u0e4a',   // 'U'
-        /* 56 */ '\u0e2e',   // 'V'
-        /* 57 */ '\u0022',   // 'W'
-        /* 58 */ '\u0029',   // 'X'
-        /* 59 */ '\u0e4d',   // 'Y'
-        /* 5A */ '\u0028',   // 'Z'
-        /* 5B */ '\u0e1a',   // '['
-        /* 5C */ '\u0e05',   // '\'
-        /* 5D */ '\u0e25',   // ']'
-        /* 5E */ '\u0e39',   // '^'
-        /* 5F */ '\u0e58',   // '_'
-        /* 60 */ '\u0e4f',   // '`'
-        /* 61 */ '\u0e1f',   // 'a'
-        /* 62 */ '\u0e34',   // 'b'
-        /* 63 */ '\u0e41',   // 'c'
-        /* 64 */ '\u0e01',   // 'd'
-        /* 65 */ '\u0e33',   // 'e'
-        /* 66 */ '\u0e14',   // 'f'
-        /* 67 */ '\u0e40',   // 'g'
-        /* 68 */ '\u0e49',   // 'h'
-        /* 69 */ '\u0e23',   // 'i'
-        /* 6A */ '\u0e48',   // 'j'
-        /* 6B */ '\u0e32',   // 'k'
-        /* 6C */ '\u0e2a',   // 'l'
-        /* 6D */ '\u0e17',   // 'm'
-        /* 6E */ '\u0e37',   // 'n'
-        /* 6F */ '\u0e19',   // 'o'
-        /* 70 */ '\u0e22',   // 'p'
-        /* 71 */ '\u0e46',   // 'q'
-        /* 72 */ '\u0e1e',   // 'r'
-        /* 73 */ '\u0e2b',   // 's'
-        /* 74 */ '\u0e30',   // 't'
-        /* 75 */ '\u0e35',   // 'u'
-        /* 76 */ '\u0e2d',   // 'v'
-        /* 77 */ '\u0e44',   // 'w'
-        /* 78 */ '\u0e1b',   // 'x'
-        /* 79 */ '\u0e31',   // 'y'
-        /* 7A */ '\u0e1c',   // 'z'
-        /* 7B */ '\u0e10',   // '{'
-        /* 7C */ '\u0e03',   // '|'
-        /* 7D */ '\u002c',   // '}'
-        /* 7E */ '\u0e5b',   // '~'
-        /* 7F */ '\u007F'    //
-    };
-
-    // cached TextHitInfo. Only one type of TextHitInfo is required.
-    private static final TextHitInfo ZERO_TRAILING_HIT_INFO = TextHitInfo.trailing(0);
-
-    private ThaiRules rules;
-
-    /**
-     * Returns the equivalent character for thai locale.
-     * @param originalChar The original character.
-     */
-    private char getMappedChar( char originalChar )
-    {
-        if (originalChar <= keyboardMap.length) {
-            return keyboardMap[originalChar];
-        }
-
-        return originalChar;
-    }//getMappedChar()
-
-    private InputMethodContext context;
-
-    void setInputMethodContext(InputMethodContext context) {
-        this.context = context;
-        rules = new ThaiRules((InputMethodRequests)context);
-    }
-
-    void handleKeyTyped(KeyEvent kevent) {
-        char keyChar = kevent.getKeyChar();
-        char currentChar = getMappedChar(keyChar);
-        if (!Character.UnicodeBlock.THAI.equals(Character.UnicodeBlock.of(currentChar))) {
-            // don't care
-            return;
-        } else if (rules.isInputValid(currentChar)) {
-            Character tmp = new Character(currentChar);
-            String tmp2 = tmp.toString();
-            context.dispatchInputMethodEvent(InputMethodEvent.INPUT_METHOD_TEXT_CHANGED,
-                                             (new AttributedString(tmp2)).getIterator(),
-                                             1,
-                                             ZERO_TRAILING_HIT_INFO,
-                                             ZERO_TRAILING_HIT_INFO);
-        } else {
-            // input sequence is not allowed
-            Toolkit.getDefaultToolkit().beep();
-        }
-
-        kevent.consume();// prevent client from getting this event.
-        return;
-    }//dispatchEvent()
-
-    void endComposition() {
-    }//endComposition()
-}
--- a/src/share/classes/com/sun/inputmethods/internal/thaiim/ThaiRules.java	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,348 +0,0 @@
-/*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package com.sun.inputmethods.internal.thaiim;
-
-import java.awt.im.InputMethodRequests;
-
-public class ThaiRules {
-
-    public static final char BASE = 0x0e00;
-
-    public static final byte NON  =  0;
-    public static final byte CONS =  1;
-    public static final byte LV   =  2;
-    public static final byte FV1  =  3;
-    public static final byte FV2  =  4;
-    public static final byte FV3  =  5;
-    public static final byte FV4  =  6;
-    /* Note that FV4 is added. It is not in WTT.
-     * We need it for SARA AM since it has a
-     * weired characteristic to share the same
-     * cell with whatever consonant preceeds it.
-     */
-    public static final byte BV1  =  7;
-    public static final byte BV2  =  8;
-    public static final byte BD   =  9;
-    public static final byte TONE = 10;
-    public static final byte AD1  = 11;
-    public static final byte AD2  = 12;
-    public static final byte AD3  = 13;
-    public static final byte AV1  = 14;
-    public static final byte AV2  = 15;
-    public static final byte AV3  = 16;
-
-    /**
-     * Constants for validity checking and auto correction
-     */
-    public static final byte STRICT    = 0;
-    public static final byte LOOSE     = 1;
-    public static final byte NOREPLACE = 2;
-
-    public static final byte[] CHARTYPE = {
-    /* 0e00 UNUSED                      */      NON,
-    /* THAI CHARACTER KO KAI            */      CONS,
-    /* THAI CHARACTER KHO KHAI          */      CONS,
-    /* THAI CHARACTER KHO KHUAT         */      CONS,
-    /* THAI CHARACTER KHO KHWAI         */      CONS,
-    /* THAI CHARACTER KHO KHON          */      CONS,
-    /* THAI CHARACTER KHO RAKHANG       */      CONS,
-    /* THAI CHARACTER NGO NGU           */      CONS,
-    /* THAI CHARACTER CHO CHAN          */      CONS,
-    /* THAI CHARACTER CHO CHING         */      CONS,
-    /* THAI CHARACTER CHO CHANG         */      CONS,
-    /* THAI CHARACTER SO SO             */      CONS,
-    /* THAI CHARACTER CHO CHOE          */      CONS,
-    /* THAI CHARACTER YO YING           */      CONS,
-    /* THAI CHARACTER DO CHADA          */      CONS,
-    /* THAI CHARACTER TO PATAK          */      CONS,
-    /* THAI CHARACTER THO THAN          */      CONS,
-    /* THAI CHARACTER THO NANGMONTHO    */      CONS,
-    /* THAI CHARACTER THO PHUTHAO       */      CONS,
-    /* THAI CHARACTER NO NEN            */      CONS,
-    /* THAI CHARACTER DO DEK            */      CONS,
-    /* THAI CHARACTER TO TAO            */      CONS,
-    /* THAI CHARACTER THO THUNG         */      CONS,
-    /* THAI CHARACTER THO THAHAN        */      CONS,
-    /* THAI CHARACTER THO THONG         */      CONS,
-    /* THAI CHARACTER NO NU             */      CONS,
-    /* THAI CHARACTER BO BAIMAI         */      CONS,
-    /* THAI CHARACTER PO PLA            */      CONS,
-    /* THAI CHARACTER PHO PHUNG         */      CONS,
-    /* THAI CHARACTER FO FA             */      CONS,
-    /* THAI CHARACTER PHO PHAN          */      CONS,
-    /* THAI CHARACTER FO FAN            */      CONS,
-    /* THAI CHARACTER PHO SAMPHAO       */      CONS,
-    /* THAI CHARACTER MO MA             */      CONS,
-    /* THAI CHARACTER YO YAK            */      CONS,
-    /* THAI CHARACTER RO RUA            */      CONS,
-    /* THAI CHARACTER RU                */      FV3,
-    /* THAI CHARACTER LO LING           */      CONS,
-    /* THAI CHARACTER LU                */      FV3,
-    /* THAI CHARACTER WO WAEN           */      CONS,
-    /* THAI CHARACTER SO SALA           */      CONS,
-    /* THAI CHARACTER SO RUSI           */      CONS,
-    /* THAI CHARACTER SO SUA            */      CONS,
-    /* THAI CHARACTER HO HIP            */      CONS,
-    /* THAI CHARACTER LO CHULA          */      CONS,
-    /* THAI CHARACTER O ANG             */      CONS,
-    /* THAI CHARACTER HO NOKHUK         */      CONS,
-    /* THAI CHARACTER PAIYANNOI         */      NON,
-    /* THAI CHARACTER SARA A            */      FV1,
-    /* THAI CHARACTER MAI HAN-AKAT      */      AV2,
-    /* THAI CHARACTER SARA AA           */      FV1,
-    /* THAI CHARACTER SARA AM           */      FV4,
-    /* THAI CHARACTER SARA I            */      AV1,
-    /* THAI CHARACTER SARA II           */      AV3,
-    /* THAI CHARACTER SARA UE           */      AV2,
-    /* THAI CHARACTER SARA UEE          */      AV3,
-    /* THAI CHARACTER SARA U            */      BV1,
-    /* THAI CHARACTER SARA UU           */      BV2,
-    /* THAI CHARACTER PHINTHU           */      BD,
-    /* 0e3b UNUSED                      */      NON,
-    /* 0e3c UNUSED                      */      NON,
-    /* 0e3d UNUSED                      */      NON,
-    /* 0e3e UNUSED                      */      NON,
-    /* THAI CURRENCY SYMBOL BAHT        */      NON,
-    /* THAI CHARACTER SARA E            */      LV,
-    /* THAI CHARACTER SARA AE           */      LV,
-    /* THAI CHARACTER SARA O            */      LV,
-    /* THAI CHARACTER SARA AI MAIMUAN   */      LV,
-    /* THAI CHARACTER SARA AI MAIMALAI  */      LV,
-    /* THAI CHARACTER LAKKHANGYAO       */      FV2,
-    /* THAI CHARACTER MAIYAMOK          */      NON,
-    /* THAI CHARACTER MAITAIKHU         */      AD2,
-    /* THAI CHARACTER MAI EK            */      TONE,
-    /* THAI CHARACTER MAI THO           */      TONE,
-    /* THAI CHARACTER MAI TRI           */      TONE,
-    /* THAI CHARACTER MAI CHATTAWA      */      TONE,
-    /* THAI CHARACTER THANTHAKHAT       */      AD1,
-    /* THAI CHARACTER NIKHAHIT          */      AD3,
-    /* THAI CHARACTER YAMAKKAN          */      AD3,
-    /* THAI CHARACTER FONGMAN           */      NON,
-    /* THAI DIGIT ZERO                  */      NON,
-    /* THAI DIGIT ONE                   */      NON,
-    /* THAI DIGIT TWO                   */      NON,
-    /* THAI DIGIT THREE                 */      NON,
-    /* THAI DIGIT FOUR                  */      NON,
-    /* THAI DIGIT FIVE                  */      NON,
-    /* THAI DIGIT SIX                   */      NON,
-    /* THAI DIGIT SEVEN                 */      NON,
-    /* THAI DIGIT EIGHT                 */      NON,
-    /* THAI DIGIT NINE                  */      NON,
-    /* THAI CHARACTER ANGKHANKHU        */      NON,
-    /* THAI CHARACTER KHOMUT            */      NON
-    };
-
-    private InputMethodRequests requests;
-
-    ThaiRules(InputMethodRequests requests) {
-        this.requests = requests;
-    }
-
-    public static byte getCharType(char c) {
-        byte cType;
-        int ci = ((int) c) - (int) BASE;
-        if (ci < 0 || ci >= CHARTYPE.length)
-            cType = NON;
-        else
-            cType = CHARTYPE[ci];
-        return cType;
-    }
-
-    private static boolean isValid(char c1, char c2, int[] validityArray) {
-        return ((validityArray[getCharType(c1)]
-                & (1 << getCharType(c2))) != 0);
-    }
-
-    /**
-     * VALIDITY is a bit matrix defining whether one
-     * character is allowed to be typed in after the
-     * previous one (array index). Determining the
-     * validity is done by bit-anding the 2nd char
-     * type's mask (obtained by 1 << chartype) with
-     * the array element indexed by the first char
-     * type. If the result is non-zero, the 2nd
-     * character is allowed to follow the first.
-     */
-
-    /* Please note that the bits in the comment below
-     * are displayed least significant bit first.
-     * The actual value reflexs this representation
-     * when the bits are swapped.
-     */
-
-    private static final int[] INPUTVALIDITY = {
-    /* NON  1110 010  0 0000 0000 0 */          0x00027,
-    /* CONS 1111 111  1 1111 1111 1 */          0x1ffff,
-    /* LV   0100 000  0 0000 0000 0 */          0x00002,
-    /* FV1  1110 010  0 0000 0000 0 */          0x00027,
-    /* FV2  1110 010  0 0000 0000 0 */          0x00027,
-    /* FV3  1110 110  0 0000 0000 0 */          0x00037,
-    /* FV4  1110 010  0 0000 0000 0 */          0x00027,
-    /* BV1  1110 010  0 0011 0000 0 */          0x00c27,
-    /* BV2  1110 010  0 0010 0000 0 */          0x00427,
-    /* BD   1110 010  0 0000 0000 0 */          0x00027,
-    /* TONE 1111 011  0 0000 0000 0 */          0x0006f,
-    /* AD1  1110 010  0 0000 0000 0 */          0x00027,
-    /* AD2  1110 010  0 0000 0000 0 */          0x00027,
-    /* AD3  1110 010  0 0000 0000 0 */          0x00027,
-    /* AV1  1110 010  0 0011 0000 0 */          0x00c27,
-    /* AV2  1110 010  0 0010 0000 0 */          0x00427,
-    /* AV3  1110 010  0 0010 0100 0 */          0x02427
-    };
-
-    private static final int[] COMPOSABLE = {
-    /* NON  0000 000  0 0000 0000 0 */          0x00000,
-    /* CONS 0000 001  1 1111 1111 1 */          0x1ffc0,
-    /* LV   0000 000  0 0000 0000 0 */          0x00000,
-    /* FV1  0000 000  0 0000 0000 0 */          0x00000,
-    /* FV2  0000 000  0 0000 0000 0 */          0x00000,
-    /* FV3  0000 000  0 0000 0000 0 */          0x00000,
-    /* FV4  0000 000  0 0000 0000 0 */          0x00000,
-    /* BV1  0000 000  0 0011 0000 0 */          0x00c00,
-    /* BV2  0000 000  0 0010 0000 0 */          0x00400,
-    /* BD   0000 000  0 0000 0000 0 */          0x00000,
-    /* TONE 0000 001  0 0000 0000 0 */          0x00040,
-    /* AD1  0000 000  0 0000 0000 0 */          0x00000,
-    /* AD2  0000 000  0 0000 0000 0 */          0x00000,
-    /* AD3  0000 000  0 0000 0000 0 */          0x00000,
-    /* AV1  0000 000  0 0011 0000 0 */          0x00c00,
-    /* AV2  0000 000  0 0010 0000 0 */          0x00400,
-    /* AV3  0000 000  0 0010 0100 0 */          0x02400
-    };
-
-    private static final int[] REPLACABLE = {
-    /* NON  0000 000  0 0000 0000 0 */          0x00000,
-    /* CONS 0000 000  0 0000 0000 0 */          0x00000,
-    /* LV   0000 000  0 0000 0000 0 */          0x00000,
-    /* FV1  0000 000  0 0000 0000 0 */          0x00000,
-    /* FV2  0000 000  0 0000 0000 0 */          0x00000,
-    /* FV3  0000 000  0 0000 0000 0 */          0x00000,
-    /* FV4  0000 001  1 1001 1111 1 */          0x1f9c0,
-    /* BV1  0000 001  1 1100 1111 1 */          0x1f3c0,
-    /* BV2  0000 001  1 1101 1111 1 */          0x1fbc0,
-    /* BD   0000 001  1 1111 1111 1 */          0x1ffc0,
-    /* TONE 0000 000  0 0111 1100 0 */          0x03e00,
-    /* AD1  0000 001  0 1111 1101 1 */          0x1bf40,
-    /* AD2  0000 001  1 1111 1111 1 */          0x1ffc0,
-    /* AD3  0000 001  1 1111 1111 0 */          0x0ffc0,
-    /* AV1  0000 001  1 1100 1111 1 */          0x1f3c0,
-    /* AV2  0000 001  1 1101 1111 1 */          0x1fbc0,
-    /* AV3  0000 001  1 1101 1011 1 */          0x1dbc0
-    };
-
-    private static final int[] SWAPPABLE = {
-    /* NON  0000 000  0 0000 0000 0 */          0x00000,
-    /* CONS 0000 000  0 0000 0000 0 */          0x00000,
-    /* LV   0000 000  0 0000 0000 0 */          0x00000,
-    /* FV1  0000 000  0 0000 0000 0 */          0x00000,
-    /* FV2  0000 000  0 0000 0000 0 */          0x00000,
-    /* FV3  0000 000  0 0000 0000 0 */          0x00000,
-    /* FV4  0000 000  0 0010 0000 0 */          0x00400,
-    /* BV1  0000 000  0 0000 0000 0 */          0x00000,
-    /* BV2  0000 000  0 0000 0000 0 */          0x00000,
-    /* BD   0000 000  0 0000 0000 0 */          0x00000,
-    /* TONE 0000 000  1 1000 0011 1 */          0x1c180,
-    /* AD1  0000 000  1 0000 0010 0 */          0x04080,
-    /* AD2  0000 000  0 0000 0000 0 */          0x00000,
-    /* AD3  0000 000  0 0000 0000 1 */          0x10000,
-    /* AV1  0000 000  0 0000 0000 0 */          0x00000,
-    /* AV2  0000 000  0 0000 0000 0 */          0x00000,
-    /* AV3  0000 000  0 0000 0000 0 */          0x00000
-    };
-
-    public static boolean isInputValid(char c1, char c2) {
-        return isValid(c1, c2, INPUTVALIDITY);
-    }
-
-    public static boolean isComposable(char c1, char c2) {
-        return isValid(c1, c2, COMPOSABLE);
-    }
-
-    public static boolean isSwappable(char c1, char c2) {
-        return isValid(c1, c2, SWAPPABLE);
-    }
-
-    public static boolean isReplacable(char c1, char c2) {
-        return isValid(c1, c2, REPLACABLE);
-    }
-
-    public static boolean isForward(char c) {
-        return (getCharType(c) < FV4);
-    }
-
-    public static boolean isDead(char c) {
-        return (getCharType(c) > FV3);
-    }
-
-    public boolean isInputValid(char current) {
-        int offset = requests.getInsertPositionOffset();
-        if (offset == 0) {
-            byte charType = getCharType(current);
-            return ((charType < FV1) || (charType == FV3));
-        }
-        else {
-            char prev = requests.getCommittedText(offset-1, offset, null).first();
-
-            if(isForward(current)) {
-                if (isInputValid(prev, current)) {
-                    if (getCharType(prev) == TONE &&
-                        getCharType(current) == FV1) {
-                        if (offset == 1) {
-                            return true;
-                        } else {
-                            char pprev =
-                                requests.getCommittedText(offset-2, offset-1, null).first();
-                            return isInputValid(pprev, current);
-                        }
-                    } else {
-                        return true;
-                    }
-                } else if (prev == '\u0e32' &&       // SARA AA
-                           current  == '\u0e30') {   // SARA A
-                    return true;
-                } else if (prev == '\u0e4d' &&       // NIKAHIT
-                           current  == '\u0e32') {   // SARA AA
-                                                     // Special compose to SARA AM
-                    return true;
-                } else {
-                    return false;
-                }
-            } else {
-                if(isInputValid(prev, current)) {
-                    if (getCharType(prev) == TONE &&
-                        getCharType(current) == FV4) {
-                        return (offset != 1);
-                    } else {
-                        return true;
-                    }
-                } else {
-                    return false;
-                }
-            }
-        }
-    }
-}
--- a/src/share/classes/com/sun/inputmethods/internal/thaiim/java.awt.im.spi.InputMethodDescriptor	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-com.sun.inputmethods.internal.thaiim.ThaiInputMethodDescriptor
--- a/src/share/classes/com/sun/inputmethods/internal/thaiim/resources/DisplayNames.properties	Sat May 29 23:26:16 2010 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-#
-# Default Input method display names for Thai input methods
-#
-
-DisplayName.Thai     = Thai Input Method
-
--- a/src/share/classes/com/sun/java/swing/plaf/windows/WindowsTableHeaderUI.java	Sat May 29 23:26:16 2010 -0700
+++ b/src/share/classes/com/sun/java/swing/plaf/windows/WindowsTableHeaderUI.java	Tue Jun 01 21:25:26 2010 -0700
@@ -35,6 +35,7 @@
 import static com.sun.java.swing.plaf.windows.TMSchema.*;
 import static com.sun.java.swing.plaf.windows.XPStyle.*;
 import sun.swing.table.*;
+import sun.swing.SwingUtilities2;
 
 
 public class WindowsTableHeaderUI extends BasicTableHeaderUI {
@@ -163,18 +164,13 @@
             return this;
         }
 
-        private int viewIndexForColumn(TableColumn aColumn) {
-            if (aColumn != null) {
-                return header.getTable().convertColumnIndexToView(
-                        aColumn.getModelIndex());
-            }
-            return -1;
-        }
-
         public void paint(Graphics g) {
             Dimension size = getSize();
             State state = State.NORMAL;
-            if (column == viewIndexForColumn(header.getDraggedColumn())) {
+            TableColumn draggedColumn = header.getDraggedColumn();
+            if (draggedColumn != null &&
+                    column == SwingUtilities2.convertColumnIndexToView(
+                            header.getColumnModel(), draggedColumn.getModelIndex())) {
                 state = State.PRESSED;
             } else if (isSelected || hasFocus || hasRollover) {
                 state = State.HOT;
--- a/src/share/classes/java/beans/DefaultPersistenceDelegate.java	Sat May 29 23:26:16 2010 -0700
+++ b/src/share/classes/java/beans/DefaultPersistenceDelegate.java	Tue Jun 01 21:25:26 2010 -0700
@@ -222,6 +222,25 @@
 
     // Write out the properties of this instance.
     private void initBean(Class type, Object oldInstance, Object newInstance, Encoder out) {
+        for (Field field : type.getFields()) {
+            int mod = field.getModifiers();
+            if (Modifier.isFinal(mod) || Modifier.isStatic(mod) || Modifier.isTransient(mod)) {
+                continue;
+            }
+            try {
+                Expression oldGetExp = new Expression(field, "get", new Object[] { oldInstance });
+                Expression newGetExp = new Expression(field, "get", new Object[] { newInstance });
+                Object oldValue = oldGetExp.getValue();
+                Object newValue = newGetExp.getValue();
+                out.writeExpression(oldGetExp);
+                if (!equals(newValue, out.get(oldValue))) {
+                    out.writeStatement(new Statement(field, "set", new Object[] { oldInstance, oldValue }));
+                }
+            }
+            catch (Exception exception) {
+                out.getExceptionListener().exceptionThrown(exception);
+            }
+        }
         BeanInfo info;
         try {
             info = Introspector.getBeanInfo(type);
--- a/src/share/classes/java/beans/MetaData.java	Sat May 29 23:26:16 2010 -0700
+++ b/src/share/classes/java/beans/MetaData.java	Tue Jun 01 21:25:26 2010 -0700
@@ -701,56 +701,6 @@
 // AWT
 
 /**
- * The persistence delegate for {@link Dimension}.
- * It is impossible to use {@link DefaultPersistenceDelegate}
- * because all getters have return types that differ from parameter types
- * of the constructor {@link Dimension#Dimension(int, int)}.
- *
- * @author Sergey A. Malenkov
- */
-final class java_awt_Dimension_PersistenceDelegate extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return oldInstance.equals(newInstance);
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        Dimension dimension = (Dimension) oldInstance;
-        Object[] args = new Object[] {
-                dimension.width,
-                dimension.height,
-        };
-        return new Expression(dimension, dimension.getClass(), "new", args);
-    }
-}
-
-/**
- * The persistence delegate for {@link GridBagConstraints}.
- * It is impossible to use {@link DefaultPersistenceDelegate}
- * because this class does not have any properties.
- *
- * @author Sergey A. Malenkov
- */
-final class java_awt_GridBagConstraints_PersistenceDelegate extends PersistenceDelegate {
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        GridBagConstraints gbc = (GridBagConstraints) oldInstance;
-        Object[] args = new Object[] {
-                gbc.gridx,
-                gbc.gridy,
-                gbc.gridwidth,
-                gbc.gridheight,
-                gbc.weightx,
-                gbc.weighty,
-                gbc.anchor,
-                gbc.fill,
-                gbc.insets,
-                gbc.ipadx,
-                gbc.ipady,
-        };
-        return new Expression(gbc, gbc.getClass(), "new", args);
-    }
-}
-
-/**
  * The persistence delegate for {@link Insets}.
  * It is impossible to use {@link DefaultPersistenceDelegate}
  * because this class does not have any properties.
@@ -775,54 +725,6 @@
 }
 
 /**
- * The persistence delegate for {@link Point}.
- * It is impossible to use {@link DefaultPersistenceDelegate}
- * because all getters have return types that differ from parameter types
- * of the constructor {@link Point#Point(int, int)}.
- *
- * @author Sergey A. Malenkov
- */
-final class java_awt_Point_PersistenceDelegate extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return oldInstance.equals(newInstance);
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        Point point = (Point) oldInstance;
-        Object[] args = new Object[] {
-                point.x,
-                point.y,
-        };
-        return new Expression(point, point.getClass(), "new", args);
-    }
-}
-
-/**
- * The persistence delegate for {@link Rectangle}.
- * It is impossible to use {@link DefaultPersistenceDelegate}
- * because all getters have return types that differ from parameter types
- * of the constructor {@link Rectangle#Rectangle(int, int, int, int)}.
- *
- * @author Sergey A. Malenkov
- */
-final class java_awt_Rectangle_PersistenceDelegate extends PersistenceDelegate {
-    protected boolean mutatesTo(Object oldInstance, Object newInstance) {
-        return oldInstance.equals(newInstance);
-    }
-
-    protected Expression instantiate(Object oldInstance, Encoder out) {
-        Rectangle rectangle = (Rectangle) oldInstance;
-        Object[] args = new Object[] {
-                rectangle.x,
-                rectangle.y,
-                rectangle.width,
-                rectangle.height,
-        };
-        return new Expression(rectangle, rectangle.getClass(), "new", args);
-    }
-}
-
-/**
  * The persistence delegate for {@link Font}.
  * It is impossible to use {@link DefaultPersistenceDelegate}
  * because size of the font can be float value.
--- a/src/share/classes/java/beans/XMLEncoder.java	Sat May 29 23:26:16 2010 -0700
+++ b/src/share/classes/java/beans/XMLEncoder.java	Tue Jun 01 21:25:26 2010 -0700
@@ -407,7 +407,20 @@
                    os.writeObject(this);
             */
             mark(oldStm);
-            statementList(oldStm.getTarget()).add(oldStm);
+            Object target = oldStm.getTarget();
+            if (target instanceof Field) {
+                String method = oldStm.getMethodName();
+                Object[] args = oldStm.getArguments();
+                if ((method == null) || (args == null)) {
+                }
+                else if (method.equals("get") && (args.length == 1)) {
+                    target = args[0];
+                }
+                else if (method.equals("set") && (args.length == 2)) {
+                    target = args[0];
+                }
+            }
+            statementList(target).add(oldStm);
         }
         catch (Exception e) {
             getExceptionListener().exceptionThrown(new Exception("XMLEncoder: discarding statement " + oldStm, e));
@@ -703,7 +716,9 @@
                 statements.add(exp);
             }
             outputValue(target, outer, false);
-            outputValue(value, outer, isArgument);
+            if (expression) {
+                outputValue(value, outer, isArgument);
+            }
             return;
         }
         if (expression && (d.refs > 1)) {
@@ -722,8 +737,10 @@
         }
         else if ((!expression && methodName.startsWith("set") && args.length == 1) ||
                  (expression && methodName.startsWith("get") && args.length == 0)) {
-            attributes = attributes + " property=" +
-                quote(Introspector.decapitalize(methodName.substring(3)));
+            if (3 < methodName.length()) {
+                attributes = attributes + " property=" +
+                    quote(Introspector.decapitalize(methodName.substring(3)));
+            }
         }
         else if (!methodName.equals("new") && !methodName.equals("newInstance")) {
             attributes = attributes + " method=" + quote(methodName);
--- a/src/share/classes/javax/swing/DefaultDesktopManager.java	Sat May 29 23:26:16 2010 -0700
+++ b/src/share/classes/javax/swing/DefaultDesktopManager.java	Tue Jun 01 21:25:26 2010 -0700
@@ -26,16 +26,12 @@
 
 package javax.swing;
 
+import com.sun.awt.AWTUtilities;
+import sun.awt.AWTAccessor;
+import sun.awt.SunToolkit;
+
 import java.awt.*;
 import java.beans.PropertyVetoException;
-import java.beans.PropertyChangeEvent;
-import javax.swing.border.Border;
-import java.awt.event.ComponentListener;
-import java.awt.event.ComponentAdapter;
-import java.awt.event.ComponentEvent;
-
-import sun.awt.AWTAccessor;
-import sun.awt.SunToolkit;
 
 /** This is an implementation of the <code>DesktopManager</code>.
   * It currently implements the basic behaviors for managing
@@ -318,7 +314,10 @@
         dragMode = DEFAULT_DRAG_MODE;
         if (p != null) {
             String mode = (String)p.getClientProperty("JDesktopPane.dragMode");
-            if (mode != null && mode.equals("outline")) {
+            Window window = SwingUtilities.getWindowAncestor(f);
+            if (window != null && !AWTUtilities.isWindowOpaque(window)) {
+                dragMode = DEFAULT_DRAG_MODE;
+            } else if (mode != null && mode.equals("outline")) {
                 dragMode = OUTLINE_DRAG_MODE;
             } else if (mode != null && mode.equals("faster")
                     && f instanceof JInternalFrame
--- a/src/share/classes/javax/swing/JTable.java	Sat May 29 23:26:16 2010 -0700
+++ b/src/share/classes/javax/swing/JTable.java	Tue Jun 01 21:25:26 2010 -0700
@@ -2583,10 +2583,8 @@
      * @see #convertColumnIndexToView
      */
     public int convertColumnIndexToModel(int viewColumnIndex) {
-        if (viewColumnIndex < 0) {
-            return viewColumnIndex;
-        }
-        return getColumnModel().getColumn(viewColumnIndex).getModelIndex();
+        return SwingUtilities2.convertColumnIndexToModel(
+                getColumnModel(), viewColumnIndex);
     }
 
     /**
@@ -2603,16 +2601,8 @@
      * @see #convertColumnIndexToModel
      */
     public int convertColumnIndexToView(int modelColumnIndex) {
-        if (modelColumnIndex < 0) {
-            return modelColumnIndex;
-        }
-        TableColumnModel cm = getColumnModel();
-        for (int column = 0; column < getColumnCount(); column++) {
-            if (cm.getColumn(column).getModelIndex() == modelColumnIndex) {
-                return column;
-            }
-        }
-        return -1;
+        return SwingUtilities2.convertColumnIndexToView(
+                getColumnModel(), modelColumnIndex);
     }
 
     /**
--- a/src/share/classes/javax/swing/border/MatteBorder.java	Sat May 29 23:26:16 2010 -0700
+++ b/src/share/classes/javax/swing/border/MatteBorder.java	Tue Jun 01 21:25:26 2010 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,7 +26,6 @@
 
 import java.awt.Graphics;
 import java.awt.Insets;
-import java.awt.Rectangle;
 import java.awt.Component;
 import java.awt.Color;
 
@@ -133,63 +132,29 @@
             g.fillRect(width - insets.right, 0, insets.right, height - insets.bottom);
 
         } else if (tileIcon != null) {
-
             int tileW = tileIcon.getIconWidth();
             int tileH = tileIcon.getIconHeight();
-            int xpos, ypos, startx, starty;
-            Graphics cg;
-
-            // Paint top matte edge
-            cg = g.create();
-            cg.setClip(0, 0, width, insets.top);
-            for (ypos = 0; insets.top - ypos > 0; ypos += tileH) {
-                for (xpos = 0; width - xpos > 0; xpos += tileW) {
-                    tileIcon.paintIcon(c, cg, xpos, ypos);
-                }
-            }
-            cg.dispose();
-
-            // Paint left matte edge
-            cg = g.create();
-            cg.setClip(0, insets.top, insets.left, height - insets.top);
-            starty = insets.top - (insets.top%tileH);
-            startx = 0;
-            for (ypos = starty; height - ypos > 0; ypos += tileH) {
-                for (xpos = startx; insets.left - xpos > 0; xpos += tileW) {
-                    tileIcon.paintIcon(c, cg, xpos, ypos);
-                }
-            }
-            cg.dispose();
-
-            // Paint bottom matte edge
-            cg = g.create();
-            cg.setClip(insets.left, height - insets.bottom, width - insets.left, insets.bottom);
-            starty = (height - insets.bottom) - ((height - insets.bottom)%tileH);
-            startx = insets.left - (insets.left%tileW);
-            for (ypos = starty; height - ypos > 0; ypos += tileH) {
-                for (xpos = startx; width - xpos > 0; xpos += tileW) {
-                    tileIcon.paintIcon(c, cg, xpos, ypos);
-                }
-            }
-            cg.dispose();
-
-            // Paint right matte edge
-            cg = g.create();
-            cg.setClip(width - insets.right, insets.top, insets.right, height - insets.top - insets.bottom);
-            starty = insets.top - (insets.top%tileH);
-            startx = width - insets.right - ((width - insets.right)%tileW);
-            for (ypos = starty; height - ypos > 0; ypos += tileH) {
-                for (xpos = startx; width - xpos > 0; xpos += tileW) {
-                    tileIcon.paintIcon(c, cg, xpos, ypos);
-                }
-            }
-            cg.dispose();
+            paintEdge(c, g, 0, 0, width - insets.right, insets.top, tileW, tileH);
+            paintEdge(c, g, 0, insets.top, insets.left, height - insets.top, tileW, tileH);
+            paintEdge(c, g, insets.left, height - insets.bottom, width - insets.left, insets.bottom, tileW, tileH);
+            paintEdge(c, g, width - insets.right, 0, insets.right, height - insets.bottom, tileW, tileH);
         }
         g.translate(-x, -y);
         g.setColor(oldColor);
 
     }
 
+    private void paintEdge(Component c, Graphics g, int x, int y, int width, int height, int tileW, int tileH) {
+        g = g.create(x, y, width, height);
+        int sY = -(y % tileH);
+        for (x = -(x % tileW); x < width; x += tileW) {
+            for (y = sY; y < height; y += tileH) {
+                this.tileIcon.paintIcon(c, g, x, y);
+            }
+        }
+        g.dispose();
+    }
+
     /**
      * Reinitialize the insets parameter with this Border's current Insets.
      * @param c the component for which this border insets value applies
--- a/src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java	Sat May 29 23:26:16 2010 -0700
+++ b/src/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java	Tue Jun 01 21:25:26 2010 -0700
@@ -3524,7 +3524,11 @@
             }
             else if (name =="indexForTitle") {
                 calculatedBaseline = false;
-                updateHtmlViews((Integer)e.getNewValue());
+                Integer index = (Integer) e.getNewValue();
+                // remove the current index
+                // to let updateHtmlViews() insert the correct one
+                htmlViews.removeElementAt(index);
+                updateHtmlViews(index);
             } else if (name == "tabLayoutPolicy") {
                 BasicTabbedPaneUI.this.uninstallUI(pane);
                 BasicTabbedPaneUI.this.installUI(pane);
--- a/src/share/classes/javax/swing/plaf/basic/BasicTableHeaderUI.java	Sat May 29 23:26:16 2010 -0700
+++ b/src/share/classes/javax/swing/plaf/basic/BasicTableHeaderUI.java	Tue Jun 01 21:25:26 2010 -0700
@@ -98,15 +98,18 @@
         private Cursor otherCursor = resizeCursor;
 
         public void mouseClicked(MouseEvent e) {
+            if (!header.isEnabled()) {
+                return;
+            }
             if (e.getClickCount() % 2 == 1 &&
-                    SwingUtilities.isLeftMouseButton(e)){
+                    SwingUtilities.isLeftMouseButton(e)) {
                 JTable table = header.getTable();
                 RowSorter sorter;
                 if (table != null && (sorter = table.getRowSorter()) != null) {
                     int columnIndex = header.columnAtPoint(e.getPoint());
                     if (columnIndex != -1) {
                         columnIndex = table.convertColumnIndexToModel(
-                                            columnIndex);
+                                columnIndex);
                         sorter.toggleSortOrder(columnIndex);
                     }
                 }
@@ -140,6 +143,9 @@
         }
 
         public void mousePressed(MouseEvent e) {
+            if (!header.isEnabled()) {
+                return;
+            }
             header.setDraggedColumn(null);
             header.setResizingColumn(null);
             header.setDraggedDistance(0);
@@ -182,6 +188,9 @@
         }
 
         public void mouseMoved(MouseEvent e) {
+            if (!header.isEnabled()) {
+                return;
+            }
             if (canResize(getResizingColumn(e.getPoint()), header) !=
                 (header.getCursor() == resizeCursor)) {
                 swapCursor();
@@ -190,6 +199,9 @@
        }
 
         public void mouseDragged(MouseEvent e) {
+            if (!header.isEnabled()) {
+                return;
+            }
             int mouseX = e.getX();
 
             TableColumn resizingColumn  = header.getResizingColumn();
@@ -217,21 +229,23 @@
                 if (0 <= newColumnIndex && newColumnIndex < cm.getColumnCount()) {
                     int width = cm.getColumn(newColumnIndex).getWidth();
                     if (Math.abs(draggedDistance) > (width / 2)) {
-                        JTable table = header.getTable();
 
                         mouseXOffset = mouseXOffset + direction * width;
                         header.setDraggedDistance(draggedDistance - direction * width);
 
                         //Cache the selected column.
-                        int selectedIndex = table.convertColumnIndexToModel(
-                                                        getSelectedColumnIndex());
+                        int selectedIndex =
+                                SwingUtilities2.convertColumnIndexToModel(
+                                        header.getColumnModel(),
+                                        getSelectedColumnIndex());
 
                         //Now do the move.
                         cm.moveColumn(columnIndex, newColumnIndex);
 
                         //Update the selected index.
                         selectColumn(
-                            table.convertColumnIndexToView(selectedIndex),
+                            SwingUtilities2.convertColumnIndexToView(
+                                    header.getColumnModel(), selectedIndex),
                             false);
 
                         return;
@@ -244,6 +258,9 @@
         }
 
         public void mouseReleased(MouseEvent e) {
+            if (!header.isEnabled()) {
+                return;
+            }
             setDraggedDistance(0, viewIndexForColumn(header.getDraggedColumn()));
 
             header.setResizingColumn(null);
@@ -253,10 +270,16 @@
         }
 
         public void mouseEntered(MouseEvent e) {
+            if (!header.isEnabled()) {
+                return;
+            }
             updateRolloverColumn(e);
         }
 
         public void mouseExited(MouseEvent e) {
+            if (!header.isEnabled()) {
+                return;
+            }
             int oldRolloverColumn = rolloverColumn;
             rolloverColumn = -1;
             rolloverColumnUpdated(oldRolloverColumn, rolloverColumn);
--- a/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java	Sat May 29 23:26:16 2010 -0700
+++ b/src/share/classes/javax/swing/plaf/basic/BasicTextUI.java	Tue Jun 01 21:25:26 2010 -0700
@@ -779,20 +779,16 @@
         if (c instanceof JTextComponent) {
             editor = (JTextComponent) c;
 
+            // common case is background painted... this can
+            // easily be changed by subclasses or from outside
+            // of the component.
+            LookAndFeel.installProperty(editor, "opaque", Boolean.TRUE);
+            LookAndFeel.installProperty(editor, "autoscrolls", Boolean.TRUE);
+
             // install defaults
             installDefaults();
             installDefaults2();
 
-            // This is a workaround as these should not override what synth has
-            // set them to
-            if (! (this instanceof SynthUI)) {
-                // common case is background painted... this can
-                // easily be changed by subclasses or from outside
-                // of the component.
-                LookAndFeel.installProperty(editor, "opaque", Boolean.TRUE);
-                LookAndFeel.installProperty(editor, "autoscrolls", Boolean.TRUE);
-            }
-
             // attach to the model and editor
             editor.addPropertyChangeListener(updateHandler);
             Document doc = editor.getDocument();
--- a/src/share/classes/javax/swing/plaf/basic/BasicViewportUI.java	Sat May 29 23:26:16 2010 -0700
+++ b/src/share/classes/javax/swing/plaf/basic/BasicViewportUI.java	Tue Jun 01 21:25:26 2010 -0700
@@ -56,8 +56,8 @@
     }
 
     public void uninstallUI(JComponent c) {
+        uninstallDefaults(c);
         super.uninstallUI(c);
-
     }
 
     protected void installDefaults(JComponent c) {
--- a/src/share/classes/javax/swing/plaf/synth/SynthTableUI.java	Sat May 29 23:26:16 2010 -0700
+++ b/src/share/classes/javax/swing/plaf/synth/SynthTableUI.java	Tue Jun 01 21:25:26 2010 -0700
@@ -361,12 +361,14 @@
             cMax = table.getColumnCount()-1;
         }
 
-        // Paint the grid.
-        paintGrid(context, g, rMin, rMax, cMin, cMax);
-
         // Paint the cells.
         paintCells(context, g, rMin, rMax, cMin, cMax);
 
+        // Paint the grid.
+        // it is important to paint the grid after the cells, otherwise the grid will be overpainted
+        // because in Synth cell renderers are likely to be opaque
+        paintGrid(context, g, rMin, rMax, cMin, cMax);
+
         paintDropLines(context, g);
     }
 
--- a/src/share/classes/javax/swing/plaf/synth/SynthTextPaneUI.java	Sat May 29 23:26:16 2010 -0700
+++ b/src/share/classes/javax/swing/plaf/synth/SynthTextPaneUI.java	Tue Jun 01 21:25:26 2010 -0700
@@ -72,7 +72,28 @@
     }
 
     /**
-     * @inheritDoc
+     * Installs the UI for a component.  This does the following
+     * things.
+     * <ol>
+     * <li>
+     * Sets opaqueness of the associated component according to its style,
+     * if the opaque property has not already been set by the client program.
+     * <li>
+     * Installs the default caret and highlighter into the
+     * associated component. These properties are only set if their
+     * current value is either {@code null} or an instance of
+     * {@link UIResource}.
+     * <li>
+     * Attaches to the editor and model.  If there is no
+     * model, a default one is created.
+     * <li>
+     * Creates the view factory and the view hierarchy used
+     * to represent the model.
+     * </ol>
+     *
+     * @param c the editor component
+     * @see BasicTextUI#installUI
+     * @see ComponentUI#installUI
      */
     @Override
     public void installUI(JComponent c) {
--- a/src/share/classes/javax/swing/text/WrappedPlainView.java	Sat May 29 23:26:16 2010 -0700
+++ b/src/share/classes/javax/swing/text/WrappedPlainView.java	Tue Jun 01 21:25:26 2010 -0700
@@ -24,8 +24,6 @@
  */
 package javax.swing.text;
 
-import java.util.Vector;
-import java.util.Properties;
 import java.awt.*;
 import java.lang.ref.SoftReference;
 import javax.swing.event.*;
@@ -236,9 +234,6 @@
         Segment segment = SegmentCache.getSharedSegment();
         loadText(segment, p0, p1);
         int currentWidth = getWidth();
-        if (currentWidth == Integer.MAX_VALUE) {
-            currentWidth = (int) getDefaultSpan(View.X_AXIS);
-        }
         if (wordWrap) {
             p = p0 + Utilities.getBreakLocation(segment, metrics,
                                                 tabBase, tabBase + currentWidth,
@@ -324,53 +319,6 @@
         tabSize = getTabSize() * metrics.charWidth('m');
     }
 
-    /**
-     * Return reasonable default values for the view dimensions.  The standard
-     * text terminal size 80x24 is pretty suitable for the wrapped plain view.
-     *
-     * The size should not be larger than the component housing the view's
-     * container.
-     */
-    private float getDefaultSpan(int axis) {
-         Container host = getContainer();
-         Component parent = null;
-
-         if (host != null) {
-            parent = host.getParent();
-         }
-
-         switch (axis) {
-            case View.X_AXIS:
-               int defaultWidth = 80 * metrics.getWidths()['M'];
-               int parentWidth = 0;
-
-               if (parent != null) {
-                  parentWidth = parent.getWidth();
-               }
-
-               if (defaultWidth > parentWidth) {
-                 return parentWidth;
-               }
-               return defaultWidth;
-
-            case View.Y_AXIS:
-               int defaultHeight = 24 * metrics.getHeight();
-               int parentHeight = 0;
-
-               if (parent != null) {
-                  parentHeight = parent.getHeight();
-               }
-
-               if (defaultHeight > parentHeight) {
-                 return parentHeight;
-               }
-               return defaultHeight;
-
-            default:
-                throw new IllegalArgumentException("Invalid axis: " + axis);
-        }
-    }
-
     // --- TabExpander methods ------------------------------------------
 
     /**
@@ -605,18 +553,14 @@
                 if (width == Integer.MAX_VALUE) {
                     // We have been initially set to MAX_VALUE, but we don't
                     // want this as our preferred.
-                    width = getDefaultSpan(axis);
+                    return 100f;
                 }
                 return width;
             case View.Y_AXIS:
-                if (getDocument().getLength() > 0) {
-                    if ((lineCount < 0) || widthChanging) {
-                        breakLines(getStartOffset());
-                    }
-                    return lineCount * metrics.getHeight();
-                } else {
-                    return getDefaultSpan(axis);
+                if (lineCount < 0 || widthChanging) {
+                    breakLines(getStartOffset());
                 }
+                return lineCount * metrics.getHeight();
             default:
                 throw new IllegalArgumentException("Invalid axis: " + axis);
             }
Binary file src/share/classes/javax/swing/text/html/parser/html32.bdtd has changed
--- a/src/share/classes/sun/swing/SwingUtilities2.java	Sat May 29 23:26:16 2010 -0700
+++ b/src/share/classes/sun/swing/SwingUtilities2.java	Tue Jun 01 21:25:26 2010 -0700
@@ -44,6 +44,8 @@
 import javax.swing.text.DefaultHighlighter;
 import javax.swing.text.DefaultCaret;
 import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumnModel;
+
 import sun.swing.PrintColorUIResource;
 import sun.swing.ImageIconUIResource;
 import sun.print.ProxyPrintGraphics;
@@ -1807,4 +1809,54 @@
                                          boolean three) {
         return liesIn(rect, p, false, false, three);
     }
+
+    /**
+     * Maps the index of the column in the view at
+     * {@code viewColumnIndex} to the index of the column
+     * in the table model.  Returns the index of the corresponding
+     * column in the model.  If {@code viewColumnIndex}
+     * is less than zero, returns {@code viewColumnIndex}.
+     *
+     * @param cm the table model
+     * @param   viewColumnIndex     the index of the column in the view
+     * @return  the index of the corresponding column in the model
+     *
+     * @see JTable#convertColumnIndexToModel(int)
+     * @see javax.swing.plaf.basic.BasicTableHeaderUI
+     */
+    public static int convertColumnIndexToModel(TableColumnModel cm,
+                                                int viewColumnIndex) {
+        if (viewColumnIndex < 0) {
+            return viewColumnIndex;
+        }
+        return cm.getColumn(viewColumnIndex).getModelIndex();
+    }
+
+    /**
+     * Maps the index of the column in the {@code cm} at
+     * {@code modelColumnIndex} to the index of the column
+     * in the view.  Returns the index of the
+     * corresponding column in the view; returns {@code -1} if this column
+     * is not being displayed. If {@code modelColumnIndex} is less than zero,
+     * returns {@code modelColumnIndex}.
+     *
+     * @param cm the table model
+     * @param modelColumnIndex the index of the column in the model
+     * @return the index of the corresponding column in the view
+     *
+     * @see JTable#convertColumnIndexToView(int)
+     * @see javax.swing.plaf.basic.BasicTableHeaderUI
+     */
+    public static int convertColumnIndexToView(TableColumnModel cm,
+                                        int modelColumnIndex) {
+        if (modelColumnIndex < 0) {
+            return modelColumnIndex;
+        }
+        for (int column = 0; column < cm.getColumnCount(); column++) {
+            if (cm.getColumn(column).getModelIndex() == modelColumnIndex) {
+                return column;
+            }
+        }
+        return -1;
+    }
 }
--- a/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java	Sat May 29 23:26:16 2010 -0700
+++ b/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java	Tue Jun 01 21:25:26 2010 -0700
@@ -788,7 +788,7 @@
             // for example /foo/bar/ becomes /foo/bar
             File canonical;
             try {
-                canonical = directory.getCanonicalFile();
+                canonical = ShellFolder.getNormalizedFile(directory);
             } catch (IOException e) {
                 // Maybe drive is not ready. Can't abort here.
                 canonical = directory;
--- a/src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java	Sat May 29 23:26:16 2010 -0700
+++ b/src/share/classes/sun/swing/table/DefaultTableCellHeaderRenderer.java	Tue Jun 01 21:25:26 2010 -0700
@@ -24,6 +24,8 @@
  */
 package sun.swing.table;
 
+import sun.swing.DefaultLookup;
+
 import java.awt.Component;
 import java.awt.Color;
 import java.awt.FontMetrics;
@@ -31,12 +33,11 @@
 import java.awt.Insets;
 import java.awt.Point;
 import java.awt.Rectangle;
+import java.io.Serializable;
 import javax.swing.*;
 import javax.swing.plaf.UIResource;
 import javax.swing.border.Border;
 import javax.swing.table.*;
-import sun.swing.DefaultLookup;
-
 
 public class DefaultTableCellHeaderRenderer extends DefaultTableCellRenderer
         implements UIResource {
@@ -186,7 +187,7 @@
         return new Point(x, y);
     }
 
-    private class EmptyIcon implements Icon {
+    private class EmptyIcon implements Icon, Serializable {
         int width = 0;
         int height = 0;
         public void paintIcon(Component c, Graphics g, int x, int y) {}
--- a/test/java/beans/XMLEncoder/java_awt_GridBagConstraints.java	Sat May 29 23:26:16 2010 -0700
+++ b/test/java/beans/XMLEncoder/java_awt_GridBagConstraints.java	Tue Jun 01 21:25:26 2010 -0700
@@ -55,7 +55,6 @@
     }
 
     protected GridBagConstraints getAnotherObject() {
-        return null; // TODO: could not update property
-        // return new GridBagConstraints();
+        return new GridBagConstraints();
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/JTabbedPane/6670274/bug6670274.java	Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*@test
+  @bug 6670274
+  @summary Incorrect tab titles for JTabbedPane if using HTML (BasicTabbedPanelUI problem)
+  @author Alexander Potochkin
+  @run main bug6670274
+*/
+
+import javax.swing.*;
+import javax.swing.plaf.basic.BasicTabbedPaneUI;
+import javax.swing.text.View;
+
+public class bug6670274 {
+
+    private static void createGui() {
+        final JTabbedPane pane = new JTabbedPane();
+        TestTabbedPaneUI ui = new TestTabbedPaneUI();
+        pane.setUI(ui);
+
+        pane.add("one", new JPanel());
+        pane.add("<html><i>Two</i></html>", new JPanel());
+        pane.add("three", new JPanel());
+        pane.setTitleAt(0, "<html><i>ONE</i></html>");
+        check(ui, 0, 1);
+
+        pane.setTitleAt(1, "hello");
+        check(ui, 0);
+
+        pane.setTitleAt(0, "<html>html</html>");
+        pane.setTitleAt(2, "<html>html</html>");
+        check(ui, 0, 2);
+    }
+
+    private static void check(TestTabbedPaneUI ui, int... indices) {
+        for(int i = 0; i < ui.getTabbedPane().getTabCount(); i++) {
+            System.out.print("Checking tab #" + i);
+            View view = ui.getTextViewForTab(i);
+            boolean found = false;
+            for (int j = 0; j < indices.length; j++) {
+                if (indices[j]== i) {
+                    found = true;
+                    break;
+                }
+            }
+            System.out.print("; view = " + view);
+            if (found) {
+                if (view == null) {
+                    throw new RuntimeException("View is unexpectedly null");
+                }
+            } else if (view != null) {
+                throw new RuntimeException("View is unexpectedly not null");
+            }
+            System.out.println(" ok");
+        }
+        System.out.println("");
+    }
+
+
+    static class TestTabbedPaneUI extends BasicTabbedPaneUI {
+        public View getTextViewForTab(int tabIndex) {
+            return super.getTextViewForTab(tabIndex);
+        }
+
+        public JTabbedPane getTabbedPane() {
+            return tabPane;
+        }
+    }
+
+    public static void main(String[] args) throws Exception {
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                bug6670274.createGui();
+            }
+        });
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/JTable/6768387/bug6768387.java	Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+   @bug 6768387
+   @summary REGRESSION: JTable no longer serializable
+   @author Alexander Potochkin
+   @run main bug6768387
+*/
+
+import javax.swing.*;
+import javax.swing.table.AbstractTableModel;
+import java.io.*;
+
+public class bug6768387 {
+
+    private static void createGui() {
+        JTable table = new JTable();
+        OutputStream os;
+        ObjectOutputStream out;
+        try {
+            os = new ByteArrayOutputStream();
+            out = new ObjectOutputStream(os);
+            out.writeObject(table);
+            out.close();
+        }
+        catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    public static void main(String[] args) throws Exception {
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                bug6768387.createGui();
+            }
+        });
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/JTable/6937798/bug6937798.java	Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,164 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+   @bug 6937798
+   @summary Nimbus: Issues with JTable grid
+   @author Alexander Potochkin
+   @run main bug6937798
+*/
+
+import com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel;
+
+import javax.swing.*;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableModel;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+
+public class bug6937798 {
+
+    public static void main(String... args) throws Exception {
+        UIManager.setLookAndFeel(new NimbusLookAndFeel());
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                new bug6937798();
+            }
+        });
+    }
+
+    public bug6937798() {
+        final JTable table = createCountryTable();
+        table.setShowGrid(true);
+        table.setSize(100, 100);
+
+        BufferedImage im = new BufferedImage(table.getWidth(), table.getHeight(), BufferedImage.TYPE_INT_ARGB);
+        Graphics g = im.getGraphics();
+        table.print(g);
+        g.dispose();
+
+        for (int i = 0; i < im.getHeight(); i++) {
+            for (int j = 0; j < im.getWidth(); j++) {
+                if (im.getRGB(i, j) == table.getGridColor().getRGB()) {
+                    System.out.println("got it!");
+                    return;
+                }
+            }
+        }
+        throw new RuntimeException("no table's grid detected....");
+    }
+
+    protected JTable createCountryTable() {
+        // Column headers
+        final String
+                [] headers = {
+                "Name", "Capital City", "Language(s)", "Monetary Unit(s)", "EC Member"
+        };
+
+        // Table data
+        final Object[][] data = {
+                {"Albania", "Tirane", "Albanian, Greek", "Lek", new Boolean(false)},
+                {"Andorra", "Andorra la Vella", "Catalan, French, Spanish", "French Franc, Spanish Peseta", new Boolean(false)},
+                {"Austria", "Vienna", "German, Slovenian, Croatian", "Schilling", new Boolean(false)},
+                {"Belarus", "Minsk", "Byelorussian, Russian", "Belarusian Rubel", new Boolean(false)},
+                {"Belgium", "Brussels", "French, Flemish, German", "Belgian Franc", new Boolean(true)},
+                {"Bosnia & Herzegovina", "Sarajevo", "Serbo-Croatian", "Dinar", new Boolean(false)},
+                {"Bulgaria", "Sofia", "Bulgarian, Turkish", "Lev", new Boolean(false)},
+                {"Croatia", "Zagreb", "Serbo-Croatian", "Croatian Kuna", new Boolean(false)},
+                {"Czech Republic", "Prague", "Czech, Slovak", "Koruna", new Boolean(false)},
+                {"Denmark", "Copenhagen", "Danish", "Krone", new Boolean(true)},
+                {"Estonia", "Tallinn", "Estonian, Latvian, Lithuanian, Russian", "Estonian Kroon", new Boolean(false)},
+                {"Finland", "Helsinki", "Finnish, Swedish, Lappish", "Markka", new Boolean(false)},
+                {"France", "Paris", "French", "Franc", new Boolean(true)},
+                {"Germany", "Berlin", "German", "Deutsche Mark", new Boolean(true)},
+                {"Greece", "Athens", "Greek, English, French", "Drachma", new Boolean(true)},
+                {"Hungary", "Budapest", "Hungarian", "Forint", new Boolean(false)},
+                {"Iceland", "Reykjavik", "Icelandic", "Icelandic Krona", new Boolean(false)},
+                {"Ireland", "Dublin", "Irish, English", "Pound", new Boolean(true)},
+                {"Italy", "Rome", "Italian", "Lira", new Boolean(true)},
+                {"Latvia", "Riga", "Lettish, Lithuanian, Russian", "Lat", new Boolean(false)},
+                {"Liechtenstein", "Vaduz", "German", "Swiss Franc", new Boolean(false)},
+                {"Lithuania", "Vilnius", "Lithuanian, Polish, Russian", "Lita", new Boolean(false)},
+                {"Luxembourg", "Luxembourg", "French, German, Letzeburgesch", "Luxembourg Franc", new Boolean(true)},
+                {"Macedonia", "Skopje", "Macedonian, Albanian, Turkish, Serbo-Croatian", "Denar", new Boolean(false)},
+                {"Malta", "Valletta", "Maltese, English", "Maltese Lira", new Boolean(false)},
+                {"Moldova", "Chisinau", "Moldovan, Russian", "Leu", new Boolean(false)},
+                {"Monaco", "Monaco", "French, English, Italian", "French Franc", new Boolean(false)},
+                {"the Netherlands", "Amsterdam", "Dutch", "Guilder", new Boolean(true)},
+                {"Norway", "Oslo", "Norwegian", "Krone", new Boolean(false)},
+                {"Poland", "Warsaw", "Polish", "Zloty", new Boolean(false)},
+                {"Portugal", "Lisbon", "Portuguese", "Escudo", new Boolean(true)},
+                {"Romania", "Bucharest", "Romanian", "Leu", new Boolean(false)},
+                {"Russia", "Moscow", "Russian", "Ruble", new Boolean(false)},
+                {"San Marino", "San Marino", "Italian", "Italian Lira", new Boolean(false)},
+                {"Slovakia", "Bratislava", "Slovak, Hungarian", "Koruna", new Boolean(false)},
+                {"Slovenia", "Ljubljana", "Slovenian, Serbo-Croatian", "Tolar", new Boolean(false)},
+                {"Spain", "Madrid", "Spanish", "Peseta", new Boolean(true)},
+                {"Sweden", "Stockholm", "Swedish", "Krona", new Boolean(false)},
+                {"Switzerland", "Bern", "German, French, Italian", "Swiss Franc", new Boolean(false)},
+                {"Turkey", "Ankara", "Turkish", "Turkish Lira", new Boolean(false)},
+                {"Ukraine", "Kiev", "Ukranian, Russian, Romanian, Polish, Hungarian", "Hryvnia", new Boolean(false)},
+                {"United Kingdom", "London", "English, Welsh", "British Pound", new Boolean(true)},
+                {"Yugoslavia", "Belgrade", "Serbo-Croatian, Slovenian, Macedonian", "Dinar", new Boolean(false)},
+        };
+
+        // Table model
+        TableModel dataModel = new AbstractTableModel() {
+
+            public int getColumnCount() {
+                return headers.length;
+            }
+
+            public int getRowCount() {
+                return data.length;
+            }
+
+            public Object getValueAt(int row, int col) {
+                return data[row][col];
+            }
+
+            public String getColumnName(int column) {
+                return headers[column];
+            }
+
+            public Class getColumnClass(int col) {
+                return getValueAt(0, col).getClass();
+            }
+
+            public void setValueAt(Object aValue, int row, int column) {
+                data[row][column] = aValue;
+            }
+
+            public boolean isCellEditable(int row, int col) {
+                return (col == 4);
+            }
+        };
+
+        // Create table with table model
+        JTable countryTable = new JTable(dataModel);
+        countryTable.setGridColor(Color.pink);
+        countryTable.setBackground(Color.white);
+        countryTable.setForeground(Color.black);
+        return countryTable;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/JTableHeader/6884066/bug6884066.java	Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+   @bug 6884066
+   @summary JTableHeader listens mouse in disabled state and doesn't work when not attached to a table
+   @author Alexander Potochkin
+   @run main bug6884066
+*/
+
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import javax.swing.table.JTableHeader;
+import javax.swing.table.TableColumnModel;
+import javax.swing.table.TableColumn;
+import java.awt.*;
+import java.awt.event.InputEvent;
+
+import com.sun.java.swing.plaf.windows.WindowsLookAndFeel;
+
+public class bug6884066 {
+    private static JTableHeader header;
+
+    public static void main(String[] args) throws Exception {
+
+        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
+
+        SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+        Robot robot = new Robot();
+        robot.setAutoDelay(20);
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                // just to quickly grab a column model
+                JTable table = new JTable(10, 5);
+                header = new JTableHeader(table.getColumnModel());
+                checkColumn(0, "A");
+                JFrame frame = new JFrame("standalone header");
+                frame.add(header);
+                frame.pack();
+                frame.setVisible(true);
+                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+            }
+        });
+        toolkit.realSync();
+        Point point = header.getLocationOnScreen();
+        robot.mouseMove(point.x + 3, point.y + 3);
+        robot.mousePress(InputEvent.BUTTON1_MASK);
+        for (int i = 0; i < header.getWidth() - 3; i++) {
+            robot.mouseMove(point.x + i, point.y + 3);
+        }
+        robot.mouseRelease(InputEvent.BUTTON1_MASK);
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                TableColumnModel model = header.getColumnModel();
+                checkColumn(model.getColumnCount() - 1, "A");
+            }
+        });
+    }
+
+    private static void checkColumn(int index, String str) {
+        TableColumnModel model = header.getColumnModel();
+        Object value = model.getColumn(index).getHeaderValue();
+        if (!str.equals(value)) {
+            throw new RuntimeException("Unexpected header's value; " +
+                    "index = " + index + " value = " + value);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/JTableHeader/6889007/bug6889007.java	Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+   @bug 6889007
+   @summary No resize cursor during hovering mouse over JTable
+   @author Alexander Potochkin
+*/
+
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import javax.swing.plaf.basic.BasicTableHeaderUI;
+import javax.swing.table.JTableHeader;
+import java.awt.*;
+
+public class bug6889007 {
+
+    public static void main(String[] args) throws Exception {
+        SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+        Robot robot = new Robot();
+        robot.setAutoDelay(20);
+
+        final JFrame frame = new JFrame();
+        frame.setUndecorated(true);
+
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+                JTableHeader th = new JTableHeader();
+                th.setColumnModel(new JTable(20, 5).getColumnModel());
+
+                th.setUI(new MyTableHeaderUI());
+
+                frame.add(th);
+                frame.pack();
+                frame.setLocationRelativeTo(null);
+                frame.setVisible(true);
+            }
+        });
+        toolkit.realSync();
+        Point point = frame.getLocationOnScreen();
+        int shift = 10;
+        int x = point.x;
+        int y = point.y + frame.getHeight()/2;
+        for(int i = -shift; i < frame.getWidth() + 2*shift; i++) {
+            robot.mouseMove(x++, y);
+        }
+        toolkit.realSync();
+        // 9 is a magic test number
+        if (MyTableHeaderUI.getTestValue() != 9) {
+            throw new RuntimeException("Unexpected test number "
+                    + MyTableHeaderUI.getTestValue());
+        }
+        System.out.println("ok");
+    }
+
+    static class MyTableHeaderUI extends BasicTableHeaderUI {
+        private static int testValue;
+
+        protected void rolloverColumnUpdated(int oldColumn, int newColumn) {
+            increaseTestValue(newColumn);
+            Cursor cursor = Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR);
+            if (oldColumn != -1 && newColumn != -1 &&
+                    header.getCursor() != cursor) {
+                throw new RuntimeException("Wrong type of cursor!");
+            }
+        }
+
+        private static synchronized void increaseTestValue(int increment) {
+            testValue += increment;
+        }
+
+        public static synchronized int getTestValue() {
+            return testValue;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/JTextArea/6925473/bug6925473.java	Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 6925473
+ * @summary REGRESSION: JOptionPane in dialog is full-screen height
+ * @author Pavel Porvatov
+ * @run main bug6925473
+ */
+
+import javax.swing.*;
+import java.awt.*;
+
+public class bug6925473 {
+    private static final String LONG_TEXT = "Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved. " +
+            "DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. " +
+            "This code is free software; you can redistribute it and/or modify it " +
+            "under the terms of the GNU General Public License version 2 only, as " +
+            "published by the Free Software Foundation. ";
+
+    public static void main(String[] args) throws Exception {
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                JTextArea textArea = new JTextArea(LONG_TEXT);
+
+                Dimension preferredSize = textArea.getPreferredSize();
+
+                if (preferredSize.width <= 0 || preferredSize.height <= 0) {
+                    throw new RuntimeException("Invalid preferred size " + preferredSize);
+                }
+
+                JTextArea textAreaLW = new JTextArea(LONG_TEXT);
+
+                textAreaLW.setLineWrap(true);
+
+                Dimension preferredSizeLW = textAreaLW.getPreferredSize();
+
+                if (preferredSizeLW.width <= 0 || preferredSizeLW.height <= 0) {
+                    throw new RuntimeException("Invalid preferred size " + preferredSizeLW);
+                }
+            }
+        });
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/JTextArea/6940863/bug6940863.java	Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 6940863
+ * @summary Textarea within scrollpane shows vertical scrollbar
+ * @author Pavel Porvatov
+ * @run main bug6940863
+ */
+
+import sun.awt.OSInfo;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+public class bug6940863 {
+    private static JFrame frame;
+
+    private static JScrollPane scrollPane;
+
+    private static final Timer timer = new Timer(1000, new ActionListener() {
+        public void actionPerformed(ActionEvent e) {
+            boolean failed = scrollPane.getVerticalScrollBar().isShowing() ||
+                    scrollPane.getHorizontalScrollBar().isShowing();
+
+            frame.dispose();
+
+            if (failed) {
+                throw new RuntimeException("The test failed");
+            }
+        }
+    });
+
+    public static void main(String[] args) throws Exception {
+        if (OSInfo.getOSType() != OSInfo.OSType.WINDOWS) {
+            System.out.println("The test is suitable only for Windows OS. Skipped");
+        }
+
+        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
+
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                JTextArea textArea = new JTextArea();
+
+                textArea.setLineWrap(true);
+                textArea.setWrapStyleWord(true);
+
+                scrollPane = new JScrollPane(textArea);
+
+                scrollPane.setMinimumSize(new Dimension(200, 100));
+                scrollPane.setPreferredSize(new Dimension(300, 150));
+
+                frame = new JFrame("Vertical scrollbar shown without text");
+
+                frame.setContentPane(scrollPane);
+                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+                frame.pack();
+                frame.setVisible(true);
+
+                timer.setRepeats(false);
+                timer.start();
+            }
+        });
+    }
+}
--- a/test/javax/swing/JTextArea/Test6593649.java	Sat May 29 23:26:16 2010 -0700
+++ b/test/javax/swing/JTextArea/Test6593649.java	Tue Jun 01 21:25:26 2010 -0700
@@ -30,60 +30,50 @@
 
 import javax.swing.*;
 import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 
-public class Test6593649 extends JFrame {
-  static JTextArea txt;
-  static JPanel innerPanel;
+public class Test6593649 {
+    private static JFrame frame;
 
-  public Test6593649(Dimension d)
-  {
-    super("Word Wrap Testcase");
+    private static JTextArea textArea;
 
-    setSize(d);
+    private static final Timer timer = new Timer(1000, new ActionListener() {
+        public void actionPerformed(ActionEvent e) {
+            boolean failed = !textArea.getParent().getSize().equals(textArea.getSize());
 
-    final Container contentPane = getContentPane();
+            frame.dispose();
 
-    innerPanel = new JPanel();
-    innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.LINE_AXIS));
+            if (failed) {
+                throw new RuntimeException("The test failed");
+            }
+        }
+    });
 
-    txt = new JTextArea("This is a long line that should wrap, but doesn't...");
-    txt.setLineWrap(true);
-    txt.setWrapStyleWord(true);
+    public static void main(String[] args) throws Exception {
+        SwingUtilities.invokeAndWait(new Runnable() {
+            public void run() {
+                frame = new JFrame();
 
-    innerPanel.add(txt);
+                frame.setSize(200, 100);
 
-    contentPane.add(innerPanel, BorderLayout.SOUTH);
-  }
+                textArea = new JTextArea("This is a long line that should wrap, but doesn't...");
 
-  public static void main(String[] args) throws InterruptedException
-  {
-    int size = 100;
-    Dimension d;
-    Test6593649 cp;
-    Dimension txtSize;
-    Dimension innerSize;
-    Dimension cpSize;
+                textArea.setLineWrap(true);
+                textArea.setWrapStyleWord(true);
 
-    while (size <= 600)
-    {
-      d = new Dimension(size, size);
-      cp = new Test6593649(d);
-      cp.setVisible(true);
+                JPanel innerPanel = new JPanel();
 
-      txtSize = txt.getPreferredSize();
-      innerSize = innerPanel.getPreferredSize();
-      cpSize = cp.getSize();
+                innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.LINE_AXIS));
+                innerPanel.add(textArea);
 
-      if (!(txtSize.getWidth() == innerPanel.getWidth() && txtSize.getHeight() == innerPanel.getHeight() &&
-           txtSize.getWidth() <= cpSize.getWidth() && txtSize.getHeight() <= cpSize.getHeight()))
-      {
-        throw new RuntimeException("Test failed: Text area size does not properly match panel and frame sizes");
-      }
+                frame.getContentPane().add(innerPanel, BorderLayout.SOUTH);
 
-      Thread.sleep(2000);
+                frame.setVisible(true);
 
-      cp.hide();
-      size += 50;
+                timer.setRepeats(false);
+                timer.start();
+            }
+        });
     }
-  }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/JViewport/6953396/bug6953396.java	Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 6953396
+ * @summary javax.swing.plaf.basic.BasicViewportUI.uninstallDefaults() is not called when UI is uninstalled
+ * @author Alexander Potochkin
+ */
+
+import javax.swing.*;
+import javax.swing.plaf.basic.BasicViewportUI;
+
+public class bug6953396 {
+    static volatile boolean flag;
+
+    public static void main(String[] args) throws Exception {
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                BasicViewportUI ui = new BasicViewportUI() {
+
+                    @Override
+                    protected void installDefaults(JComponent c) {
+                        super.installDefaults(c);
+                        flag = true;
+                    }
+
+                    @Override
+                    protected void uninstallDefaults(JComponent c) {
+                        super.uninstallDefaults(c);
+                        flag = false;
+                    }
+                };
+
+                JViewport viewport = new JViewport();
+                viewport.setUI(ui);
+                viewport.setUI(null);
+            }
+        });
+        if (flag) {
+            throw new RuntimeException("uninstallDefaults() hasn't been called");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/border/Test6910490.html	Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,9 @@
+<html>
+<body>
+If the border is painted over scroll bars then test fails.
+Otherwise test passes.
+
+<applet width="600" height="300" code="Test6910490.class">
+</applet>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/swing/border/Test6910490.java	Tue Jun 01 21:25:26 2010 -0700
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2010 Sun Microsystems, Inc.  All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+import static java.awt.Color.RED;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Insets;
+import javax.swing.Icon;
+import javax.swing.JApplet;
+import javax.swing.JButton;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.border.MatteBorder;
+
+/*
+ * @test
+ * @bug 6910490
+ * @summary Tests a matte border around a component inside a scroll pane.
+ * @author Sergey Malenkov
+ * @run applet/manual=yesno Test6910490.html
+ */
+
+public class Test6910490 extends JApplet implements Icon {
+
+    @Override
+    public void init() {
+        Insets insets = new Insets(10, 10, 10, 10);
+        Dimension size = new Dimension(getWidth() / 2, getHeight());
+        JSplitPane pane = new JSplitPane(
+                JSplitPane.HORIZONTAL_SPLIT,
+                create("Color", size, new MatteBorder(insets, RED)),
+                create("Icon", size, new MatteBorder(insets, this)));
+        pane.setDividerLocation(size.width - pane.getDividerSize() / 2);
+        add(pane);
+    }
+
+    private JScrollPane create(String name, Dimension size, MatteBorder border) {
+        JButton button = new JButton(name);
+        button.setPreferredSize(size);
+        button.setBorder(border);
+        return new JScrollPane(button);
+    }
+
+    public int getIconWidth() {
+        return 10;
+    }
+
+    public int getIconHeight() {
+        return 10;
+    }
+
+    public void paintIcon(Component c, Graphics g, int x, int y) {
+        g.setColor(RED);
+        g.fillRect(x, y, getIconWidth(), getIconHeight());
+    }
+}